Python機械学習に基づく昆虫認識・個体数統計システム

目次

要旨 I要旨
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.3 PC 上の昆虫分類認識ソフトウェア 12第 3 章 昆虫画像の前処理と数の研究 15 3.1 昆虫画像の取得 15 3.2 前処理昆虫画像の解析 16 3.2.1 画像のグレースケール、ガウス フィルタリング、スケール変換 16 3.2.2 二値化 17 3.2.3 昆虫画像の二値化における OTSU メソッド 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 3つの分類34
第 5 章 まとめと展望 37
5.1 概要 37
5.1.1 完了した作業 37
5.1.2 革新と不十分な点 37
5.2 今後の展望 38
謝辞... エラー! 未定義のブックマークです。
参考文献 40
付録 1: 昆虫画像サンプル 42
付録 2: OTSU の PYTHON 実装 44
1.3 研究内容と目的
1.3.1 研究内容
農業生産地における害虫識別の問題を解決するために、マシンビジョンに基づく害虫検出システムが開発されました。
(1) 現場で適用できる害虫捕獲および画像取得装置のセットを設計および実装するこの装置を農作物栽培エリアに設置し、24時間体制で害虫を捕獲・殺虫し、画像を収集すると同時に、無線ネットワークを介して害虫の画像を農業監視センターの害虫識別サーバーにアップロードすることができます。害虫の種類を特定し、生産地内の害虫を検出する 収集される情報のカテゴリの数。
(2) ハエ粘着ボードなどのほとんどの昆虫器具の画像に適したマシンビジョンベースの昆虫計数方法のセットを開発しました。この方法は、昆虫が多く写っている写真に対して二値化前処理を行った後、輪郭を探索してカウントすることで、写真に写っている昆虫の数とほぼ同じ数が得られます。
(3) この一連の画像取得装置に適した一連のマシンビジョンベースの昆虫認識方法およびプロセスを開発しました。この手法は、以前の研究に基づいて、昆虫の長方形性、昆虫の伸長性、昆虫の円形性、昆虫の球形性、昆虫の葉らしさの5つの昆虫の形態的特徴を選択し、昆虫画像の特徴抽出を実行します。その後、ロジスティック回帰モデル、線形 SVM モデル、K 近傍分類器をそれぞれトレーニングに使用し、トレーニング結果をテストおよび比較して分類器アルゴリズムをスクリーニングしました。
(4) 一連の遠隔害虫自動識別システムを設計し、上記 3 つの機能を組み合わせることで、画像収集ノードでの害虫の捕獲と昆虫画像の収集、昆虫識別サーバーでの昆虫の画像認識と分類を実現します。
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