基于Python的机器学习的昆虫识别和数目统计系统

目 录

摘 要 I
ABSTRACT II
目 录 III
第 1 章 绪论 1
1.1课题研究的背景和意义 1
1.2国内外研究现状 1
1.2.1国内研究现状 2
1.2.2国外研究现状 2
1.3研究的内容和目的 3
1.3.1研究内容 3
1.3.2研究目的 3
1.4章节安排 4
第 2 章 系统总体设计 5
2.1系统设计目标 5
2.2系统总体架构 5
2.3图像采集节点 6
2.3.1装置总体设计 6
2.3.2运行流程 9
2.4虫类鉴别服务器和虫类信息数据库设计 10
2.4.1服务器设计 10
2.4.2服务器虫类分类器实现 11
2.4.3PC 上的昆虫分类识别软件 12
第 3 章 昆虫图像预处理与计数研究 15
3.1昆虫图像的采集 15
3.2昆虫图像的预处理 16
3.2.1图像的灰度化,高斯滤波和尺度变换 16
3.2.2二值化 17
3.2.3大津法 OTSU 在昆虫图像二值化上的应用 18
3.3昆虫图像的计数 20
3.3.1检测轮廓 20
3.3.2昆虫计数 20
第 4 章 昆虫图像特征提取与识别研究 23
4.1特征的选取 23
4.2特征描述以及提取方式 23
4.3分类器的选择和训练 32
4.4机器学习结果分析 33
4.4.1性能评价指标 33
4.4.2三种分类器的性能比较 34
第 5 章 总结与展望 37
5.1 总结 37
5.1.1完成的工作 37
5.1.2创新点和不足之处 37
5.2 展望 38
致谢… 错误!未定义书签。
参考文献 40
附录一:部分昆虫图像样本 42
附录二:OTSU 的 PYTHON 实现 44
1.3研究的内容和目的
1.3.1研究内容
论文为解决农业产区害虫识别的难题,提出了一种基于机器视觉的害虫种类及数量检测方案,并完成了如下工作:
(1)设计实现了一套可应用于野外的害虫捕获和图像采集装置。该装置放置在农业种植区域,24 小时进行害虫的诱杀和图像采集,同时,装置可以通过无线网络将害虫图像上传至农业监控中心虫类鉴别服务器,并进行害虫种类的识别,进行产区内害虫种类数目的信息收集。
(2)开发了一套的适用于苍蝇粘板等包含多数昆虫设备的图像的基于机器视觉的昆虫计数工作方法。该方法首先对包含多数昆虫的图片进行二值化预处理, 然后进行轮廓的查找,并进行轮廓的计数,得到的数目约等于图片中的昆虫数目。
(3)开发了一套适用于本套图像采集装置的基于机器视觉的昆虫识别工作方法和流程。该方法在参照前人工作成果的基础山,选取了昆虫形态特征中的昆虫矩形度、昆虫延长度、昆虫圆形度、昆虫球状性、昆虫叶状性等 5 个特征,进行昆虫图像的特征提取。之后,采用逻辑斯蒂回归模型、线性 SVM 模型和 K 邻近分类器分别进行训练,并测试比较训练结果,以进行分类器算法的筛选。
(4)设计了一套远程害虫自动识别系统,结合上述三个功能,该系统可以实现: 在图像采集节点进行害虫捕获和昆虫图像采集,在虫类鉴别服务器进行昆虫图像的识别和分类。
1.3.2研究目的
研究的目的在于建立一套远程病虫害自动识别系统,有助于缓解农业植保人员和病虫害鉴定专家的人力资源紧张,有助于病虫害知识有限的农业人员进行及时的病虫害检测,并且,通过害虫种类数目的监测和信息收集,定期对昆虫数据进行整理和分析,建立病虫害爆发的规律模型,进而预测判断病虫害爆发的时间, 及时通知农业植物保护人员和农户进行合理地科学地预防。提高农作物产量和质量。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1239, 727)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.videoFrame = QtWidgets.QLabel(self.centralwidget)
        self.videoFrame.setGeometry(QtCore.QRect(0, 0, 600, 400))
        self.videoFrame.setFrameShape(QtWidgets.QFrame.WinPanel)
        self.videoFrame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.videoFrame.setMidLineWidth(2)
        self.videoFrame.setObjectName("videoFrame")
        self.videoFrame_2 = QtWidgets.QLabel(self.centralwidget)
        self.videoFrame_2.setGeometry(QtCore.QRect(630, 0, 600, 400))
        self.videoFrame_2.setFrameShape(QtWidgets.QFrame.WinPanel)
        self.videoFrame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.videoFrame_2.setMidLineWidth(2)
        self.videoFrame_2.setObjectName("videoFrame_2")
        self.btnCapture = QtWidgets.QPushButton(self.centralwidget)
        self.btnCapture.setGeometry(QtCore.QRect(200, 520, 171, 101))
        self.btnCapture.setObjectName("btnCapture")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(860, 530, 161, 61))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label.setFont(font)
        self.label.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label.setObjectName("label")
        self.label_status = QtWidgets.QLabel(self.centralwidget)
        self.label_status.setGeometry(QtCore.QRect(1120, 650, 111, 31))
        self.label_status.setText("")
        self.label_status.setObjectName("label_status")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(1050, 660, 54, 12))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(473, 442, 81, 20))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_success = QtWidgets.QLabel(self.centralwidget)
        self.label_success.setGeometry(QtCore.QRect(580, 440, 91, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_success.setFont(font)
        self.label_success.setText("")
        self.label_success.setObjectName("label_success")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(473, 490, 81, 20))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.label_rect = QtWidgets.QLabel(self.centralwidget)
        self.label_rect.setGeometry(QtCore.QRect(570, 480, 91, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_rect.setFont(font)
        self.label_rect.setText("")
        self.label_rect.setObjectName("label_rect")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(470, 530, 61, 16))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.label_extend = QtWidgets.QLabel(self.centralwidget)
        self.label_extend.setGeometry(QtCore.QRect(580, 520, 91, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_extend.setFont(font)
        self.label_extend.setText("")
        self.label_extend.setObjectName("label_extend")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(470, 560, 61, 21))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.label_circle = QtWidgets.QLabel(self.centralwidget)
        self.label_circle.setGeometry(QtCore.QRect(580, 560, 91, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_circle.setFont(font)
        self.label_circle.setText("")
        self.label_circle.setObjectName("label_circle")
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(470, 600, 71, 21))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.label_spherical = QtWidgets.QLabel(self.centralwidget)
        self.label_spherical.setGeometry(QtCore.QRect(580, 595, 81, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_spherical.setFont(font)
        self.label_spherical.setText("")
        self.label_spherical.setObjectName("label_spherical")
        self.label_8 = QtWidgets.QLabel(self.centralwidget)
        self.label_8.setGeometry(QtCore.QRect(470, 640, 71, 21))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.label_leaf = QtWidgets.QLabel(self.centralwidget)
        self.label_leaf.setGeometry(QtCore.QRect(570, 640, 91, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_leaf.setFont(font)
        self.label_leaf.setText("")
        self.label_leaf.setObjectName("label_leaf")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1239, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.videoFrame.setText(_translate("MainWindow", "Video Frame"))
        self.videoFrame_2.setText(_translate("MainWindow", "Video Frame"))
        self.btnCapture.setText(_translate("MainWindow", "拍照"))
        self.label.setText(_translate("MainWindow", "Species"))
        self.label_2.setText(_translate("MainWindow", "状态"))
        self.label_3.setText(_translate("MainWindow", "检测状态"))
        self.label_4.setText(_translate("MainWindow", "矩形度"))
        self.label_5.setText(_translate("MainWindow", "延长度"))
        self.label_6.setText(_translate("MainWindow", "似圆度"))
        self.label_7.setText(_translate("MainWindow", "球状性"))
        self.label_8.setText(_translate("MainWindow", "叶状性"))


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sheziqiong/article/details/130740439