基于YOLOv8目标检测的水稻病害检测系统
·
基于YOLOv8目标检测的水稻病害检测系统
内含6715张水稻病害数据集,共3类
标签names:[‘Bacteria Leaf Blight’,‘Brown Spot’, ‘Leaf smut’]
名称:【‘细菌叶斑病’, ‘褐斑病’, ‘叶瘤病’】
也可自行替换模型,使用该界面做其他检测
文章目录

基于YOLOv8目标检测的水稻病害检测系统
本项目旨在利用 YOLOv8 模型构建一个高效的 水稻病害识别与定位系统,可用于农业病虫害防治、智能巡田机器人或无人机图像分析等场景。该系统可以对水稻叶片上的病害进行精准识别和边界框标注。
🧰 一、开发环境准备
安装依赖库:
pip install ultralytics opencv-python PyQt5 matplotlib numpy

📁 二、数据集说明(以公开水稻病害数据集为例)
假设你有一个基于 YOLO 格式的数据集结构如下:
rice_disease_dataset/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
└── data.yaml
data.yaml 内容示例:
train: ./images/train
val: ./images/val
nc: 3
names: ['Bacterial Blight', 'Brown Spot', 'Leaf Blast']
🔧 三、模型训练(可选)
如果你需要自己训练模型,使用以下命令训练自己的水稻病害检测模型:
yolo train model=yolov8s.pt data=data.yaml epochs=100 imgsz=640
训练完成后会在 runs/detect/train/weights/ 下生成最佳权重文件:best.pt
🖥️ 四、图形界面设计(PyQt5 + OpenCV)
我们将创建一个带有 GUI 的应用程序,支持:
- 图像上传
- 模型推理
- 病害检测结果可视化
- 实时摄像头检测(可选)
📌 示例代码:GUI 应用程序主窗口
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QFileDialog, QVBoxLayout, QWidget
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt
from ultralytics import YOLO
class RiceDiseaseApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("水稻病害检测系统 - YOLOv8")
self.setGeometry(100, 100, 800, 600)
self.model = YOLO('best.pt') # 替换为你训练好的模型路径
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.image_label = QLabel(self)
self.image_label.setAlignment(Qt.AlignCenter)
self.image_label.setStyleSheet("border: 1px solid black;")
self.image_label.setFixedSize(760, 500)
layout.addWidget(self.image_label)
upload_button = QPushButton("上传图片", self)
upload_button.clicked.connect(self.upload_image)
layout.addWidget(upload_button)
self.setLayout(layout)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def upload_image(self):
file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Image Files (*.png *.jpg *.jpeg)")
if file_name:
self.detect_and_show(file_name)
def detect_and_show(self, image_path):
results = self.model(image_path)
annotated_frame = results[0].plot()
# 将图像转换为QPixmap显示
rgb_image = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
h, w, ch = rgb_image.shape
bytes_per_line = ch * w
qt_image = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qt_image).scaled(
self.image_label.width(), self.image_label.height(), Qt.KeepAspectRatio
)
self.image_label.setPixmap(pixmap)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = RiceDiseaseApp()
window.show()
sys.exit(app.exec_())

📸 五、实时视频检测(可选功能)
在上述代码中增加摄像头检测功能:
def start_camera(self):
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
results = self.model(frame)
annotated_frame = results[0].plot()
cv2.imshow("Real-time Detection", annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
并在按钮点击事件中调用它。
📊 六、模型评估与部署建议
✅ 模型评估指标:
- mAP@0.5: 反映整体精度
- Recall / Precision: 衡量每类病害的识别能力
- F1-score: 平衡准确率与召回率
💡 部署建议:
-
使用 ONNX 转换优化推理速度:
yolo export model=best.pt format=onnx -
可部署到边缘设备如 Jetson Nano、树莓派等,结合摄像头实现田间实时监测。
📝 七、总结
本系统实现了基于 YOLOv8 的水稻病害识别与定位功能,并通过 PyQt5 提供了友好的图形界面,适用于农业自动化、科研辅助、教学演示等多种场景。
你可以进一步扩展如下功能:
- 支持多图批量处理
- 导出检测结果为 CSV 或 JSON 文件
- 接入无人机或农业机器人实现实时检测
- 加入病害诊断建议或防治措施数据库
📌 GitHub 示例推荐参考:
- ultralytics/ultralytics
- 自定义水稻病害数据集 GitHub 开源项目(如 RiceDisease-Dataset)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)