基于深度学习的稻田害虫智能检测系统详解

九天猎人  金牌会员 | 2024-7-30 07:08:11 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 668|帖子 668|积分 2004

基于深度学习的稻田虫害检测系统(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)

弁言

在农业领域,稻田虫害检测是确保稻米产量和质量的紧张环节。传统的人工检测方法效率低、成本高,而基于深度学习的主动化检测系统可以进步检测效率和准确性。本文将具体先容如何构建一个基于深度学习的稻田虫害检测系统,包罗环境搭建、数据收集与处理、模子训练、系统实现以及用户界面设计,并提供现实的代码示例。
系统概述

本系统的实现步调包罗:

  • 环境搭建
  • 数据收集与处理
  • 模子训练
  • 系统实现
  • 用户界面设计
环境搭建

首先,需要搭建一个适合深度学习开发的环境。本文利用Python 3.8或以上版本,并依赖于多个深度学习和图像处理库。
安装须要的库

利用以下命令安装所需库:
  1. pip install numpy pandas matplotlib opencv-python torch torchvision ultralytics pyqt5
复制代码
数据收集与处理

数据收集

收集包罗稻田虫害的图像和视频数据集。可以利用公开的数据集,如PestMonitor Dataset,或者通过实地拍摄获取。确保数据集包罗各种不同虫害类型和不同生长阶段的图像。
数据处理

将图像数据整理到指定的文件夹结构,并标注虫害的位置。以下是示例的文件夹结构:
  1. datasets/
  2.     ├── images/
  3.     │   ├── train/
  4.     │   │   ├── image1.jpg
  5.     │   │   ├── image2.jpg
  6.     │   ├── val/
  7.     │   │   ├── image1.jpg
  8.     │   │   ├── image2.jpg
  9.     ├── labels/
  10.         ├── train/
  11.         │   ├── image1.txt
  12.         │   ├── image2.txt
  13.         ├── val/
  14.             ├── image1.txt
  15.             ├── image2.txt
复制代码
每个标签文件的内容如下:
  1. class x_center y_center width height
复制代码
其中,class表示类别编号(如稻飞虱、螟虫等),x_center、y_center为归一化后的中心坐标,width和height为归一化后的宽度和高度。
数据增强

为了进步模子的泛化本领,可以对数据进行增强处理。常见的数据增强方法包罗旋转、缩放、平移、镜像等。
  1. import albumentations as A
  2. from albumentations.pytorch import ToTensorV2
  3. import cv2
  4. import os
  5. # 定义数据增强变换
  6. transform = A.Compose([
  7.     A.RandomRotate90(),
  8.     A.Flip(),
  9.     A.Transpose(),
  10.     A.OneOf([
  11.         A.IAAAdditiveGaussianNoise(),
  12.         A.GaussNoise(),
  13.     ], p=0.2),
  14.     A.OneOf([
  15.         A.MotionBlur(p=0.2),
  16.         A.MedianBlur(blur_limit=3, p=0.1),
  17.         A.Blur(blur_limit=3, p=0.1),
  18.     ], p=0.2),
  19.     A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),
  20.     A.OneOf([
  21.         A.OpticalDistortion(p=0.3),
  22.         A.GridDistortion(p=0.1),
  23.         A.IAAPiecewiseAffine(p=0.3),
  24.     ], p=0.2),
  25.     A.OneOf([
  26.         A.CLAHE(clip_limit=2),
  27.         A.IAASharpen(),
  28.         A.IAAEmboss(),
  29.         A.RandomBrightnessContrast(),
  30.     ], p=0.3),
  31.     A.HueSaturationValue(p=0.3),
  32.     ToTensorV2()
  33. ])
  34. # 处理图像
  35. def augment_images(image_folder, output_folder):
  36.     os.makedirs(output_folder, exist_ok=True)
  37.     for filename in os.listdir(image_folder):
  38.         image_path = os.path.join(image_folder, filename)
  39.         image = cv2.imread(image_path)
  40.         augmented = transform(image=image)
  41.         augmented_image = augmented["image"].numpy().transpose(1, 2, 0)
  42.         output_path = os.path.join(output_folder, filename)
  43.         cv2.imwrite(output_path, augmented_image)
  44. # 应用数据增强
  45. augment_images('datasets/images/train', 'datasets/images/train_augmented')
复制代码
模子训练

利用YOLO模子进行训练。
配置文件

创建一个配置文件config.yaml:
  1. path: datasets
  2. train: images/train
  3. val: images/val
  4. test: images/test
  5. nc: 5  # 类别数,例如5种常见的稻田虫害
  6. names: ['rice_leaf_folder', 'rice_hispa', 'brown_plant_hopper', 'white_backed_plant_hopper', 'rice_stem_borer']  # 类别名称
复制代码
训练代码

利用以下代码训练模子:
  1. from ultralytics import YOLO
  2. # 加载模型
  3. model = YOLO('yolov8n.pt')
  4. # 训练模型
  5. model.train(data='config.yaml', epochs=50, imgsz=640, batch=16, lr0=0.01)
复制代码
训练过程会生成模子权重文件best.pt,该文件包罗了训练好的模子参数。
系统实现

训练好的模子可以用于及时稻田虫害检测。利用OpenCV读取视频流,并调用YOLO模子进行检测。
检测代码

  1. import cv2
  2. from ultralytics import YOLO
  3. # 加载训练好的模型
  4. model = YOLO('best.pt')
  5. # 打开视频流
  6. cap = cv2.VideoCapture('rice_field_video.mp4')
  7. while cap.isOpened():
  8.     ret, frame = cap.read()
  9.     if not ret:
  10.         break
  11.     # 检测虫害
  12.     results = model(frame)
  13.     for result in results:
  14.         bbox = result['bbox']
  15.         label = result['label']
  16.         confidence = result['confidence']
  17.         # 画框和标签
  18.         cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
  19.         cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  20.     # 显示结果
  21.     cv2.imshow('Rice Field Pest Detection', frame)
  22.     if cv2.waitKey(1) & 0xFF == ord('q'):
  23.         break
  24. cap.release()
  25. cv2.destroyAllWindows()
复制代码
用户界面设计

为了进步系统的易用性,我们设计了一个用户友爱的界面。利用PyQt5实现用户界面,提供图像或视频播放和检测结果表现。
界面代码

以下是一个简朴的PyQt5界面代码示例:
  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog
  3. from PyQt5.QtGui import QPixmap, QImage
  4. import cv2
  5. from ultralytics import YOLO
  6. class PestDetectionUI(QWidget):
  7.     def __init__(self):
  8.         super().__init__()
  9.         self.initUI()
  10.         
  11.         self.model = YOLO('best.pt')
  12.         
  13.     def initUI(self):
  14.         self.setWindowTitle('Pest Detection System')
  15.         
  16.         self.layout = QVBoxLayout()
  17.         
  18.         self.label = QLabel(self)
  19.         self.layout.addWidget(self.label)
  20.         
  21.         self.button = QPushButton('Open Image or Video', self)
  22.         self.button.clicked.connect(self.open_file)
  23.         self.layout.addWidget(self.button)
  24.         
  25.         self.setLayout(self.layout)
  26.    
  27.     def open_file(self):
  28.         options = QFileDialog.Options()
  29.         file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "All Files (*);;MP4 Files (*.mp4);;JPEG Files (*.jpg);;PNG Files (*.png)", options=options)
  30.         
  31.         if file_path:
  32.             if file_path.endswith('.mp4'):
  33.                 self.detect_pest_video(file_path)
  34.             else:
  35.                 self.detect_pest_image(file_path)
  36.    
  37.     def detect_pest_image(self, file_path):
  38.         frame = cv2.imread(file_path)
  39.         results = self.model(frame)
  40.         for result in results:
  41.             bbox = result['bbox']
  42.             label = result['label']
  43.             confidence = result['confidence']
  44.                
  45.             cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
  46.             cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  47.         height, width, channel = frame.shape
  48.         bytesPerLine = 3 * width
  49.         qImg = QImage(frame.data,
  50. width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
  51.         self.label.setPixmap(QPixmap.fromImage(qImg))
  52.    
  53.     def detect_pest_video(self, file_path):
  54.         cap = cv2.VideoCapture(file_path)
  55.         
  56.         while cap.isOpened():
  57.             ret, frame = cap.read()
  58.             if not ret:
  59.                 break
  60.             
  61.             results = self.model(frame)
  62.             for result in results:
  63.                 bbox = result['bbox']
  64.                 label = result['label']
  65.                 confidence = result['confidence']
  66.                
  67.                 cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
  68.                 cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  69.             
  70.             height, width, channel = frame.shape
  71.             bytesPerLine = 3 * width
  72.             qImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
  73.             
  74.             self.label.setPixmap(QPixmap.fromImage(qImg))
  75.             QApplication.processEvents()
  76.         
  77.         cap.release()
  78. if __name__ == '__main__':
  79.     app = QApplication(sys.argv)
  80.     ex = PestDetectionUI()
  81.     ex.show()
  82.     sys.exit(app.exec_())
复制代码
总结

本文具体先容了如何构建一个基于深度学习的稻田虫害检测系统,从环境搭建、数据收集与处理、模子训练、系统实现到用户界面设计。这不仅有助于进步农业生产效率,还可以为农作物病虫害防治提供有力支持。
基于深度学习的稻田虫害检测系统(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)

弁言

在农业领域,稻田虫害检测是确保稻米产量和质量的紧张环节。传统的人工检测方法效率低、成本高,而基于深度学习的主动化检测系统可以进步检测效率和准确性。本文将具体先容如何构建一个基于深度学习的稻田虫害检测系统,包罗环境搭建、数据收集与处理、模子训练、系统实现以及用户界面设计,并提供现实的代码示例。
系统概述

本系统的实现步调包罗:

  • 环境搭建
  • 数据收集与处理
  • 模子训练
  • 系统实现
  • 用户界面设计
环境搭建

首先,需要搭建一个适合深度学习开发的环境。本文利用Python 3.8或以上版本,并依赖于多个深度学习和图像处理库。
安装须要的库

利用以下命令安装所需库:
  1. pip install numpy pandas matplotlib opencv-python torch torchvision ultralytics pyqt5
复制代码
数据收集与处理

数据收集

收集包罗稻田虫害的图像和视频数据集。可以利用公开的数据集,如PestMonitor Dataset,或者通过实地拍摄获取。确保数据集包罗各种不同虫害类型和不同生长阶段的图像。
数据处理

将图像数据整理到指定的文件夹结构,并标注虫害的位置。以下是示例的文件夹结构:
  1. datasets/
  2.     ├── images/
  3.     │   ├── train/
  4.     │   │   ├── image1.jpg
  5.     │   │   ├── image2.jpg
  6.     │   ├── val/
  7.     │   │   ├── image1.jpg
  8.     │   │   ├── image2.jpg
  9.     ├── labels/
  10.         ├── train/
  11.         │   ├── image1.txt
  12.         │   ├── image2.txt
  13.         ├── val/
  14.             ├── image1.txt
  15.             ├── image2.txt
复制代码
每个标签文件的内容如下:
  1. class x_center y_center width height
复制代码
其中,class表示类别编号(如稻飞虱、螟虫等),x_center、y_center为归一化后的中心坐标,width和height为归一化后的宽度和高度。
数据增强

为了进步模子的泛化本领,可以对数据进行增强处理。常见的数据增强方法包罗旋转、缩放、平移、镜像等。
  1. import albumentations as A
  2. from albumentations.pytorch import ToTensorV2
  3. import cv2
  4. import os
  5. # 定义数据增强变换
  6. transform = A.Compose([
  7.     A.RandomRotate90(),
  8.     A.Flip(),
  9.     A.Transpose(),
  10.     A.OneOf([
  11.         A.IAAAdditiveGaussianNoise(),
  12.         A.GaussNoise(),
  13.     ], p=0.2),
  14.     A.OneOf([
  15.         A.MotionBlur(p=0.2),
  16.         A.MedianBlur(blur_limit=3, p=0.1),
  17.         A.Blur(blur_limit=3, p=0.1),
  18.     ], p=0.2),
  19.     A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),
  20.     A.OneOf([
  21.         A.OpticalDistortion(p=0.3),
  22.         A.GridDistortion(p=0.1),
  23.         A.IAAPiecewiseAffine(p=0.3),
  24.     ], p=0.2),
  25.     A.OneOf([
  26.         A.CLAHE(clip_limit=2),
  27.         A.IAASharpen(),
  28.         A.IAAEmboss(),
  29.         A.RandomBrightnessContrast(),
  30.     ], p=0.3),
  31.     A.HueSaturationValue(p=0.3),
  32.     ToTensorV2()
  33. ])
  34. # 处理图像
  35. def augment_images(image_folder, output_folder):
  36.     os.makedirs(output_folder, exist_ok=True)
  37.     for filename in os.listdir(image_folder):
  38.         image_path = os.path.join(image_folder, filename)
  39.         image = cv2.imread(image_path)
  40.         augmented = transform(image=image)
  41.         augmented_image = augmented["image"].numpy().transpose(1, 2, 0)
  42.         output_path = os.path.join(output_folder, filename)
  43.         cv2.imwrite(output_path, augmented_image)
  44. # 应用数据增强
  45. augment_images('datasets/images/train', 'datasets/images/train_augmented')
复制代码
模子训练

利用YOLO模子进行训练。
配置文件

创建一个配置文件config.yaml:
  1. path: datasets
  2. train: images/train
  3. val: images/val
  4. test: images/test
  5. nc: 5  # 类别数,例如5种常见的稻田虫害
  6. names: ['rice_leaf_folder', 'rice_hispa', 'brown_plant_hopper', 'white_backed_plant_hopper', 'rice_stem_borer']  # 类别名称
复制代码
训练代码

利用以下代码训练模子:
  1. from ultralytics import YOLO
  2. # 加载模型
  3. model = YOLO('yolov8n.pt')
  4. # 训练模型
  5. model.train(data='config.yaml', epochs=50, imgsz=640, batch=16, lr0=0.01)
复制代码
训练过程会生成模子权重文件best.pt,该文件包罗了训练好的模子参数。
系统实现

训练好的模子可以用于及时稻田虫害检测。利用OpenCV读取视频流,并调用YOLO模子进行检测。
检测代码

  1. import cv2
  2. from ultralytics import YOLO
  3. # 加载训练好的模型
  4. model = YOLO('best.pt')
  5. # 打开视频流
  6. cap = cv2.VideoCapture('rice_field_video.mp4')
  7. while cap.isOpened():
  8.     ret, frame = cap.read()
  9.     if not ret:
  10.         break
  11.     # 检测虫害
  12.     results = model(frame)
  13.     for result in results:
  14.         bbox = result['bbox']
  15.         label = result['label']
  16.         confidence = result['confidence']
  17.         # 画框和标签
  18.         cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
  19.         cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  20.     # 显示结果
  21.     cv2.imshow('Rice Field Pest Detection', frame)
  22.     if cv2.waitKey(1) & 0xFF == ord('q'):
  23.         break
  24. cap.release()
  25. cv2.destroyAllWindows()
复制代码
用户界面设计

为了进步系统的易用性,我们设计了一个用户友爱的界面。利用PyQt5实现用户界面,提供图像或视频播放和检测结果表现。
界面代码

以下是一个简朴的PyQt5界面代码示例:
  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog
  3. from PyQt5.QtGui import QPixmap, QImage
  4. import cv2
  5. from ultralytics import YOLO
  6. class PestDetectionUI(QWidget):
  7.     def __init__(self):
  8.         super().__init__()
  9.         self.initUI()
  10.         
  11.         self.model = YOLO('best.pt')
  12.         
  13.     def initUI(self):
  14.         self.setWindowTitle('Pest Detection System')
  15.         
  16.         self.layout = QVBoxLayout()
  17.         
  18.         self.label = QLabel(self)
  19.         self.layout.addWidget(self.label)
  20.         
  21.         self.button = QPushButton('Open Image or Video', self)
  22.         self.button.clicked.connect(self.open_file)
  23.         self.layout.addWidget(self.button)
  24.         
  25.         self.setLayout(self.layout)
  26.    
  27.     def open_file(self):
  28.         options = QFileDialog.Options()
  29.         file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "All Files (*);;MP4 Files (*.mp4);;JPEG Files (*.jpg);;PNG Files (*.png)", options=options)
  30.         
  31.         if file_path:
  32.             if file_path.endswith('.mp4'):
  33.                 self.detect_pest_video(file_path)
  34.             else:
  35.                 self.detect_pest_image(file_path)
  36.    
  37.     def detect_pest_image(self, file_path):
  38.         frame = cv2.imread(file_path)
  39.         results = self.model(frame)
  40.         for result in results:
  41.             bbox = result['bbox']
  42.             label = result['label']
  43.             confidence = result['confidence']
  44.                
  45.             cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
  46.             cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  47.         height, width, channel = frame.shape
  48.         bytesPerLine = 3 * width
  49.         qImg = QImage(frame.data,
  50. width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
  51.         self.label.setPixmap(QPixmap.fromImage(qImg))
  52.    
  53.     def detect_pest_video(self, file_path):
  54.         cap = cv2.VideoCapture(file_path)
  55.         
  56.         while cap.isOpened():
  57.             ret, frame = cap.read()
  58.             if not ret:
  59.                 break
  60.             
  61.             results = self.model(frame)
  62.             for result in results:
  63.                 bbox = result['bbox']
  64.                 label = result['label']
  65.                 confidence = result['confidence']
  66.                
  67.                 cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
  68.                 cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  69.             
  70.             height, width, channel = frame.shape
  71.             bytesPerLine = 3 * width
  72.             qImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
  73.             
  74.             self.label.setPixmap(QPixmap.fromImage(qImg))
  75.             QApplication.processEvents()
  76.         
  77.         cap.release()
  78. if __name__ == '__main__':
  79.     app = QApplication(sys.argv)
  80.     ex = PestDetectionUI()
  81.     ex.show()
  82.     sys.exit(app.exec_())
复制代码
总结

本文具体先容了如何构建一个基于深度学习的稻田虫害检测系统,从环境搭建、数据收集与处理、模子训练、系统实现到用户界面设计。通过提供具体的步调和代码示例,读者可以轻松地实现自己的检测系统。这不仅有助于进步农业生产效率,还可以为农作物病虫害防治提供有力支持。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表