当前位置: 首页 > news >正文

基于深度学习 YOLOv8➕pyqt5的西红柿成熟度检测系统

基于深度学习 YOLOv8➕pyqt5的西红柿成熟度检测系统,
完整源码源文件+已标注的数据集+训练好的模型+环境配置教程+程序运行说明文档
可以替换自己训练的模型,实现检测目标自定义

blog.csdnimg.cn/direct/31c61653310648458126c961a01fd682.png)
以下文章及示例代码仅供参考!

基于深度学习 YOLOv8 + PyQt5 的西红柿成熟度检测系统(附完整代码)

🌟 项目背景

在智慧农业中,果蔬的自动分级与成熟度识别是提升采摘效率和商品价值的关键环节。传统人工分拣成本高、效率低,而基于计算机视觉的自动化检测系统正成为研究热点。

本文将带你从零搭建一个 基于 YOLOv8 和 PyQt5 的西红柿成熟度检测系统,支持图像/视频实时推理,并提供友好的图形界面,适合科研、教学或小型农业项目部署。

🧠 技术栈介绍
YOLOv8:Ultralytics 推出的新一代 YOLO 系列模型,精度高、速度快,支持分类、检测、分割等任务。
PyQt5:Python 下流行的 GUI 开发框架,用于构建桌面应用界面。
OpenCV:用于图像/视频处理。
PyTorch:YOLOv8 的底层深度学习框架。

📦 项目结构

tomato-ripeness-detector/
├── models/
│ └── best.pt # 训练好的 YOLOv8 模型
├── ui/
│ └── main_window.ui # Qt Designer 设计的界面(可选)
├── utils/
│ └── inference.py # 推理逻辑封装
├── main.py # 主程序入口
└── requirements.txt

🔧 环境配置

bash
pip install ultralytics opencv-python pyqt5 numpy pillow
注意:YOLOv8 依赖 PyTorch,请确保 CUDA 或 CPU 环境已正确安装。

🍅 数据准备与模型训练(简要说明)

我们使用自建的西红柿数据集,包含三类标签:
unripe(未成熟,绿色)
half_ripe(半熟,黄红相间)
ripe(成熟,红色)

使用 YOLOv8 的官方训练命令:

bash
yolo detect train data=tomato.yaml model=yolov8n.pt epochs=100 imgsz=640

训练完成后得到 best.pt 模型文件,放入 models/ 目录。

💻 PyQt5 界面设计

我们使用纯代码方式构建简洁 UI,包含:
图像显示区域(QLabel)
文件选择按钮(打开图片/视频)
实时摄像头检测按钮
检测结果信息展示
main.py 核心代码

python
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QTimer, Qt
from ultralytics import YOLO
import numpy as np

class TomatoDetector(QMainWindow):
definit(self):
super().init()
self.setWindowTitle(“🍅 西红柿成熟度检测系统 - YOLOv8 + PyQt5”)
self.setGeometry(100, 100, 1000, 700)

加载模型

self.model = YOLO(“models/best.pt”)

初始化UI

self.init_ui()

视频/摄像头相关

self.cap = None
self.timer = QTimer()
self.timer.timeout.connect(self.update_frame)

def init_ui(self):
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout()

self.image_label = QLabel()
self.image_label.setAlignment(Qt.AlignCenter)
self.image_label.setMinimumSize(800, 600)
layout.addWidget(self.image_label)

btn_layout = QVBoxLayout()
self.btn_open_img = QPushButton(“📂 打开图片”)
self.btn_open_video = QPushButton(“🎥 打开视频”)
self.btn_camera = QPushButton(“📹 启动摄像头”)
self.btn_stop = QPushButton(“⏹ 停止”)

self.btn_open_img.clicked.connect(self.open_image)
self.btn_open_video.clicked.connect(self.open_video)
self.btn_camera.clicked.connect(self.start_camera)
self.btn_stop.clicked.connect(self.stop_media)

btn_layout.addWidget(self.btn_open_img)
btn_layout.addWidget(self.btn_open_video)
btn_layout.addWidget(self.btn_camera)
btn_layout.addWidget(self.btn_stop)

layout.addLayout(btn_layout)
central_widget.setLayout(layout)

def detect_and_display(self, frame):
results = self.model(frame)
annotated_frame = results[0].plot() # 自动绘制检测框和标签
self.display_image(annotated_frame)

def display_image(self, img):
h, w, ch = img.shape
bytes_per_line = ch w
q_img = QImage(img.data, w, h, bytes_per_line, QImage.Format_BGR888)
self.image_label.setPixmap(QPixmap.fromImage(q_img).scaled(
self.image_label.width(), self.image_label.height(),
Qt.KeepAspectRatio, Qt.SmoothTransformation))

def open_image(self):
path, _ = QFileDialog.getOpenFileName(self, “选择图片”, “”, “Image Files (.png .jpg .jpeg)”)
if path:
img = cv2.imread(path)
self.detect_and_display(img)

def open_video(self):
path, _ = QFileDialog.getOpenFileName(self, “选择视频”, “”, “Video Files (.mp4 .avi)”)
if path:
self.cap = cv2.VideoCapture(path)
self.timer.start(30)

def start_camera(self):
self.cap = cv2.VideoCapture(0)
if not self.cap.isOpened():
print(“无法打开摄像头”)
return
self.timer.start(30)

def update_frame(self):
if self.cap and self.cap.isOpened():
ret, frame = self.cap.read()
if ret:
self.detect_and_display(frame)
else:
self.stop_media()

def stop_media(self):
if self.timer.isActive():
self.timer.stop()
if self.cap:
self.cap.release()
self.image_label.clear()

ifname== “main”:
app = QApplication(sys.argv)
window = TomatoDetector()
window.show()
sys.exit(app.exec_())

🖼️ 效果展示


✅ 优势与应用场景
高精度:YOLOv8 在小目标和密集场景下表现优异。
跨平台:PyQt5 支持 Windows/Linux/macOS。
易扩展:可轻松替换模型用于其他果蔬检测(如苹果、草莓)。
实用性强:适用于智能分拣机、农业机器人、教学演示等。

📥 获取完整代码
文章底部获取完整代码

包含:
完整源码源文件+已标注的数据集+训练好的模型+环境配置教程+程序运行说明文档

💬 结语

通过 YOLOv8 强大的检测能力与 PyQt5 的灵活界面开发,我们成功构建了一个实用的西红柿成熟度检测系统。未来可集成到边缘设备(如 Jetson Nano)实现田间实时检测。

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、转发!也欢迎在评论区交流改进意见或分享你的项目成果!

关注我,获取更多 AI + 农业 + GUI 实战项目! 🌱🤖

http://www.jsqmd.com/news/227516/

相关文章:

  • 无人机培训PPT课件 多旋翼无人飞行培训无人机精灵培训PPT
  • PDF-Extract-Kit快速上手:10分钟完成第一个PDF解析项目
  • STM32CubeMX工业电机控制配置:完整指南
  • HY-MT1.5边缘计算方案:离线环境翻译应用部署
  • 基于STM32的rs485modbus协议源代码实现完整示例
  • HY-MT1.5-1.8B模型裁剪:进一步减小体积的方法
  • PDF-Extract-Kit入门教程:PDF元数据提取与分析
  • 腾讯开源HY-MT1.5:模型量化压缩技术解析
  • HY-MT1.5-1.8B实战:低功耗设备部署方案
  • HY-MT1.5-1.8B工业场景应用:设备手册实时翻译系统部署案例
  • HY-MT1.5-1.8B量化部署指南:低资源环境运行方案
  • PDF-Extract-Kit实战案例:保险理赔自动化系统
  • PDF-Extract-Kit技术解析:文档结构理解算法演进
  • 腾讯混元翻译1.5:少数民族语言支持实战
  • PDF-Extract-Kit教程:复杂表格结构识别与转换
  • HY-MT1.5部署指南:企业级翻译服务搭建步骤
  • 嵌入式工控开发必看:STM32CubeMX打不开的核心要点总结
  • 腾讯开源翻译模型应用:旅游行业多语言导览
  • 领导者的系统思考
  • 混元翻译模型1.5实战:术语干预功能详细解析
  • 告别文件存储的混乱:我用SQLite重构了AI对话记录管理
  • 腾讯开源翻译模型:HY-MT1.5术语干预SDK开发
  • 从下载到运行:Proteus Windows安装完整示例
  • 腾讯HY-MT1.5应用:社交媒体内容翻译
  • PDF-Extract-Kit性能对比测试:不同硬件配置下的表现
  • HY-MT1.5部署架构:高可用翻译服务设计
  • Hunyuan HY-MT1.5多语言支持:33语种切换部署实操
  • HY-MT1.5模型架构解析:高效翻译的底层逻辑
  • 基于TouchGFX的智能温控面板开发实战案例
  • Keil5目标选项配置核心要点:Target设置通俗解释