news 2026/6/3 9:05:36

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于深度学习 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 实战项目! 🌱🤖

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 20:58:55

无人机培训PPT课件 多旋翼无人飞行培训无人机精灵培训PPT

无人机培训PPT课件 多旋翼无人飞行培训无人机精灵培训PPT 素材 一、课程内容概述 基础理论: 详细讲解无人机的定义、分类以及多旋翼无人机在整个无人机体系中的独特地位和特点。 让学员清晰了解无人机的基本概念,包括按照用途(如航拍、物流、…

作者头像 李华
网站建设 2026/5/30 21:50:01

PDF-Extract-Kit教程:复杂表格结构识别与转换

PDF-Extract-Kit教程:复杂表格结构识别与转换 1. 引言 1.1 技术背景与业务需求 在科研、金融、法律和教育等领域,PDF文档中常常包含大量结构复杂的表格数据。这些表格往往具有合并单元格、跨页分割、嵌套结构等特征,传统OCR工具难以准确还…

作者头像 李华
网站建设 2026/5/30 21:50:03

PDF-Extract-Kit路线图:未来功能开发计划

PDF-Extract-Kit路线图:未来功能开发计划 1. 项目背景与核心价值 1.1 当前版本能力回顾 PDF-Extract-Kit 是由开发者“科哥”主导开发的一款开源PDF智能信息提取工具箱,旨在解决传统文档数字化过程中结构化信息提取困难、精度低、流程繁琐等问题。当前…

作者头像 李华
网站建设 2026/6/3 4:03:28

腾讯开源翻译模型:HY-MT1.5术语干预SDK开发

腾讯开源翻译模型:HY-MT1.5术语干预SDK开发 1. 引言 随着全球化进程的加速,高质量、低延迟的机器翻译需求日益增长。尤其是在跨语言交流、内容本地化和实时通信等场景中,传统云端翻译服务面临网络依赖性强、响应延迟高、隐私保护不足等问题…

作者头像 李华
网站建设 2026/5/20 11:38:37

从模型到服务:HY-MT1.5产品化路径

从模型到服务:HY-MT1.5产品化路径 1. 引言:翻译大模型的产业落地挑战 随着多语言交流需求的爆发式增长,高质量、低延迟的机器翻译已成为全球化应用的核心基础设施。尽管近年来大模型在翻译任务上取得了显著进展,但如何将高性能模…

作者头像 李华
网站建设 2026/6/2 18:58:52

数字频率计设计从零实现:LCD显示模块连接教程

从零搭建数字频率计:LCD显示模块实战连接与调试指南你有没有遇到过这样的场景?辛辛苦苦写好了脉冲计数逻辑,调通了定时器门控时间,结果往LCD上一输出——屏幕要么全黑、要么乱码频出,甚至压根不亮。明明代码看起来没问…

作者头像 李华