基于YOLOv8+pyqt5的课堂行为检测系统
可以替换训练的模型,实现检测目标自定义
完整源码源文件+已标注的数据集+训练好的模型+环境配置教程+程序运行说明文档
Python + PyQt5可视化界面
可对图片,视频,摄像头进行识别
构建一个基于YOLOv8的害虫检测系统可以帮助农业领域实现精准的病虫害管理,提高作物产量和质量。以下是一个完整的指南,包括环境配置、模型训练(或使用预训练模型)、以及如何创建一个简单的用户界面来展示害虫检测结果。
环境准备
首先,确保你的环境中安装了必要的库:
pip install ultralytics opencv-python pyqt5 numpy matplotlib
数据集与模型
对于特定于害虫的数据集,你可能需要自己收集并标注数据,或者寻找公开可用的相关数据集。假设你已经有了适用于YOLOv8格式的数据集,下面将介绍如何利用YOLOv8进行训练和预测。
模型训练(可选)
如果你已经有了一定规模的标记数据集,你可以使用YOLOv8进行训练。以下是基本命令示例:
yolo task=detect mode=train model=yolov8n.pt data=path/to/your/pests.yaml epochs=100 imgsz=640
请确保pests.yaml
文件正确配置了训练和验证数据路径、类别数量及名称。例如:
train: ./images/train/
val: ./images/val/
nc: 3 # 假设有3种害虫
names: ['Aphid', 'Beetle', 'Moth']
创建GUI应用程序
接下来,我们将创建一个简单的PyQt5 GUI应用,它允许用户上传图片,并使用YOLOv8模型检测图片中的害虫。
示例代码: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 PestDetectionApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("害虫检测系统 - YOLOv8")
self.setGeometry(100, 100, 800, 600)
# 加载YOLOv8模型
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 = PestDetectionApp()
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()
然后,在GUI初始化部分添加一个按钮来触发这个方法:
camera_button = QPushButton("开启摄像头检测", self)
camera_button.clicked.connect(self.start_camera)
layout.addWidget(camera_button)
总结
通过上述步骤,我们创建了一个基本的害虫检测系统,它可以对上传的图片进行分析,并使用YOLOv8模型检测其中的害虫。此外,还提供了扩展到实时视频检测的功能。你可以进一步优化和扩展这个系统,例如加入更多种类的害虫识别、提高检测精度、优化性能等。这不仅有助于提高农业生产效率,还能促进农业可持续发展。