news 2026/5/1 9:27:48

基于深度学习 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/1 5:03:23

PDF-Extract-Kit实战案例:智能文档检索系统

PDF-Extract-Kit实战案例:智能文档检索系统 1. 引言 在科研、教育和企业办公场景中,PDF 文档作为知识传递的核心载体,往往包含大量结构化信息——如文字、表格、数学公式和图像。然而,传统方式难以高效提取这些内容并进行二次利…

作者头像 李华
网站建设 2026/5/1 7:49:57

从下载到运行:Proteus Windows安装完整示例

从零开始搭建电路仿真环境:Proteus Windows 安装与首个项目实战指南 你是不是也曾在学习单片机或做课程设计时,被“画错一根线就得重焊一遍”的现实折磨得够呛?有没有想过,在电脑上就能把整个电路连好、程序烧进去、还能用虚拟示…

作者头像 李华
网站建设 2026/3/4 14:40:55

基于TouchGFX的智能温控面板开发实战案例

从零打造专业级智能温控面板:TouchGFX STM32 实战全解析你有没有过这样的体验?家里的空调面板反应迟钝,调个温度要等半秒才动;或者工业设备上的操作屏,界面像十几年前的老家电,按钮生硬、动画卡顿。这些“…

作者头像 李华
网站建设 2026/5/1 9:25:24

混元翻译1.5模型对比:1.8B vs 7B选型指南

混元翻译1.5模型对比:1.8B vs 7B选型指南 随着多语言交流需求的持续增长,高质量、低延迟的机器翻译模型成为智能应用落地的关键基础设施。腾讯开源的混元翻译大模型(HY-MT1.5)系列在近期发布了两个核心版本:HY-MT1.5-…

作者头像 李华
网站建设 2026/4/23 12:32:53

PDF智能提取工具箱实战:医学报告关键指标提取

PDF智能提取工具箱实战:医学报告关键指标提取 1. 引言:医学报告结构化提取的挑战与解决方案 在医疗信息化进程中,大量临床数据以非结构化的PDF格式存储,尤其是体检报告、检验单、影像诊断书等关键文档。这些文档中蕴含着血压、血…

作者头像 李华
网站建设 2026/5/1 9:27:00

image2lcd在OLED显示驱动中的实战案例详解

从一张图片到OLED屏幕:用image2lcd打通嵌入式图形显示的“最后一公里”你有没有过这样的经历?UI设计师发来一个精致的Logo PNG图,说:“这个要显示在设备开机画面上。”你打开工程,心想:好家伙,怎…

作者头像 李华