文章目录
- 基于YOLOv8的草莓植物叶片缺陷检测与PyQt5应用
- 项目背景
- 技术方案
- 核心代码实现
- 1. YOLOv8模型训练与推理
- 2. PyQt5界面搭建
- 3. 代码说明
- 结语
基于YOLOv8的草莓植物叶片缺陷检测与PyQt5应用
项目背景
随着农业智能化的发展,植物病虫害检测逐渐成为现代农业管理的重要一环。草莓作为经济作物,易受到多种病虫害影响,叶片的健康状况直接影响其生长和产量。因此,使用计算机视觉技术进行草莓叶片的缺陷检测是农业智能化的重要应用之一。
在该项目中,采用了YOLOv8(You Only Look Once,第八版)深度学习目标检测模型,结合PyQt5图形用户界面(GUI)开发工具,来实现对草莓叶片缺陷的自动检测和展示。
技术方案
YOLOv8模型:
YOLOv8是一种高效的目标检测算法,具有优秀的检测精度和速度。通过YOLOv8,我们可以训练一个草莓叶片缺陷的分类模型,实现对草莓叶片中的不同缺陷(如斑点、枯黄、虫害等)的自动识别。PyQt5:
PyQt5是Python的一个GUI框架,基于Qt开发。它可以方便地构建界面,通过图形界面展示检测结果、加载图片以及交互式操作。我们可以利用PyQt5构建一个用户友好的桌面应用程序。集成步骤:
- 使用YOLOv8对草莓叶片缺陷进行训练和检测。
- 使用PyQt5创建一个图形界面,允许用户加载草莓叶片图像,查看检测结果。
- 将YOLOv8模型与PyQt5界面进行集成,实现实时检测和结果展示。
核心代码实现
1. YOLOv8模型训练与推理
首先,假设我们已经训练好了YOLOv8模型,可以使用以下代码进行推理:
importtorchfrompathlibimportPathimportcv2# 加载YOLOv8模型model=torch.hub.load('ultralytics/yolov8','yolov8n',pretrained=True)defdetect_defects(image_path):# 读取图片img=cv2.imread(image_path)# 转为RGBimg_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# 使用YOLOv8进行预测results=model(img_rgb)# 获取检测结果detections=results.pandas().xywh[0]# 返回检测到的结果returndetections,img2. PyQt5界面搭建
使用PyQt5构建一个简单的界面来加载图片和显示检测结果。
importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QVBoxLayout,QPushButton,QLabel,QFileDialogfromPyQt5.QtGuiimportQPixmapfromPyQt5.QtCoreimportQtimportcv2importnumpyasnpclassStrawberryLeafDefectDetector(QWidget):def__init__(self):super().__init__()# 初始化界面元素self.setWindowTitle("草莓叶片缺陷检测")self.setGeometry(100,100,800,600)self.layout=QVBoxLayout()# 显示图片的标签self.image_label=QLabel(self)self.layout.addWidget(self.image_label)# 加载图片按钮self.load_button=QPushButton("加载图片",self)self.load_button.clicked.connect(self.load_image)self.layout.addWidget(self.load_button)# 显示检测结果的标签self.result_label=QLabel("检测结果:",self)self.layout.addWidget(self.result_label)self.setLayout(self.layout)defload_image(self):# 打开文件对话框加载图片file_dialog=QFileDialog(self)file_path,_=file_dialog.getOpenFileName(self,"选择草莓叶片图片","","Images (*.png *.jpg *.jpeg)")iffile_path:# 调用YOLOv8进行缺陷检测detections,img=detect_defects(file_path)# 将检测结果显示在GUI中self.display_image_with_results(img,detections)defdisplay_image_with_results(self,img,detections):# 在图像上绘制检测结果forindex,rowindetections.iterrows():x1,y1,x2,y2=int(row['xmin']),int(row['ymin']),int(row['xmax']),int(row['ymax'])cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(img,row['name'],(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)# 转换为QPixmap显示img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)height,width,channel=img_rgb.shape bytes_per_line=3*width q_img=QPixmap.fromImage(QImage(img_rgb.data,width,height,bytes_per_line,QImage.Format_RGB888))self.image_label.setPixmap(q_img)self.image_label.setAlignment(Qt.AlignCenter)# 显示检测结果result_text="\n".join([f"{row['name']}detected"forindex,rowindetections.iterrows()])self.result_label.setText(f"检测结果:\n{result_text}")if__name__=='__main__':app=QApplication(sys.argv)window=StrawberryLeafDefectDetector()window.show()sys.exit(app.exec_())3. 代码说明
YOLOv8推理部分:
使用torch.hub.load方法加载YOLOv8模型,加载模型后,可以直接使用该模型进行图片推理,返回包含检测结果的DataFrame。PyQt5界面部分:
- 创建一个
QLabel来显示加载的图片和检测结果。 - 使用
QPushButton来让用户加载草莓叶片图像。 QFileDialog用来让用户选择本地图片。detect_defects函数进行图像检测,检测到的缺陷用绿色矩形框表示,并将缺陷类别显示在框的上方。
- 创建一个
检测结果展示:
检测结果会显示在界面下方,列出每种缺陷(如“斑点”、“枯黄”)和其在图像中的位置。
结语
通过结合YOLOv8的目标检测能力和PyQt5的图形界面开发,可以构建出一个直观、实用的草莓叶片缺陷检测系统。用户只需要上传一张草莓叶片的照片,系统便能够快速识别并标出叶片的缺陷类型,为农业生产提供实时的病虫害监测帮助。