智能番茄新鲜度检测系统:基于深度学习的全面实现

news/2024/10/19 9:43:26/

YOLOv8v7v6v5_0">基于深度学习的番茄新鲜度检测系统(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)

引言

番茄是全球广泛种植和消费的蔬菜之一,其新鲜度直接影响其营养价值和口感。传统的番茄新鲜度检测主要依赖于人工观察和经验判断,这不仅费时费力,而且容易出错。随着深度学习技术的发展,利用计算机视觉进行番茄新鲜度检测变得越来越可行。本文将详细介绍如何构建一个基于深度学习的番茄新鲜度检测系统,包括数据收集与处理、模型训练、系统实现以及UI界面设计。

环境搭建

在开始之前,需要搭建开发环境。本项目所需的主要工具和库包括:

  • Python 3.x
  • OpenCV
  • PyTorch
  • YOLOv8/v7/v6/v5模型
  • Qt for Python (PySide2)
安装必要库
pip install opencv-python-headless
pip install torch torchvision
pip install pyside2

数据收集与处理

首先需要收集番茄的图片数据集。数据集应包括不同新鲜度的番茄图片,并进行标注。可以使用LabelImg等工具进行标注。标注完成后,将数据集划分为训练集和测试集。

数据标注工具

使用LabelImg进行数据标注:

  1. 安装LabelImg:

    pip install labelImg
    
  2. 打开LabelImg并加载图片文件夹:

    labelImg
    
  3. 标注番茄的新鲜度,并保存为YOLO格式。

模型训练

使用YOLO模型进行训练。可以使用预训练模型,并在其基础上进行微调。

下载预训练模型

可以从以下链接下载YOLO预训练模型:

训练脚本

以下是使用YOLOv5进行训练的示例脚本:

import torch
from yolov5 import train# 设置训练参数
train.run(data='path/to/dataset.yaml',  # 数据集配置文件weights='yolov5s.pt',  # 预训练模型路径epochs=50,  # 训练轮数batch_size=16,  # 批次大小img_size=640  # 输入图像大小
)

系统实现

训练完成后,可以开始构建番茄新鲜度检测系统。系统主要包括模型加载、图像处理和结果显示三个部分。

模型加载与图像处理

以下是一个简单的图像处理和结果显示示例:

import cv2
import torch# 加载模型
model = torch.hub.load('ultralytics/yolov5', 'custom', path='path/to/best.pt')# 读取图像
img = cv2.imread('path/to/tomato.jpg')# 进行检测
results = model(img)# 获取检测结果
labels, cord = results.xyxyn[0][:, -1], results.xyxyn[0][:, :-1]# 显示结果
for i in range(len(labels)):row = cord[i]if row[4] >= 0.5:  # 置信度阈值x1, y1, x2, y2 = int(row[0]*img.shape[1]), int(row[1]*img.shape[0]), int(row[2]*img.shape[1]), int(row[3]*img.shape[0])bgr = (0, 255, 0)  # 绿色框cv2.rectangle(img, (x1, y1), (x2, y2), bgr, 2)cv2.putText(img, f'{labels[i]} {row[4]:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, bgr, 2)cv2.imshow('Tomato Freshness Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

UI界面设计

为了让系统更加友好,我们将使用Qt for Python (PySide2)来创建图形用户界面。

创建UI界面

以下是一个简单的UI界面示例:

import sys
import cv2
import torch
from PySide2.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QFileDialog
from PySide2.QtGui import QImage, QPixmapclass TomatoDetectionUI(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle('Tomato Freshness Detection System')self.setGeometry(100, 100, 800, 600)self.label = QLabel(self)self.label.setGeometry(50, 50, 700, 400)self.button = QPushButton('Load Image', self)self.button.setGeometry(350, 500, 100, 30)self.button.clicked.connect(self.load_image)self.model = torch.hub.load('ultralytics/yolov5', 'custom', path='path/to/best.pt')def load_image(self):file_path, _ = QFileDialog.getOpenFileName(self, 'Open Image', '', 'Image files (*.jpg *.png)')if file_path:self.detect_tomato(file_path)def detect_tomato(self, file_path):img = cv2.imread(file_path)results = self.model(img)labels, cord = results.xyxyn[0][:, -1], results.xyxyn[0][:, :-1]for i in range(len(labels)):row = cord[i]if row[4] >= 0.5:x1, y1, x2, y2 = int(row[0]*img.shape[1]), int(row[1]*img.shape[0]), int(row[2]*img.shape[1]), int(row[3]*img.shape[0])bgr = (0, 255, 0)cv2.rectangle(img, (x1, y1), (x2, y2), bgr, 2)cv2.putText(img, f'{labels[i]} {row[4]:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, bgr, 2)height, width, channel = img.shapebytesPerLine = 3 * widthqImg = QImage(img.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()self.label.setPixmap(QPixmap.fromImage(qImg))if __name__ == '__main__':app = QApplication(sys.argv)ex = TomatoDetectionUI()ex.show()sys.exit(app.exec_())

总结

本文详细介绍了如何构建一个基于深度学习的番茄新鲜度检测系统,包括环境搭建、数据收集与处理、模型训练、系统实现以及UI界面设计。
声明:本文只是简单的项目思路,如有部署的想法,想要(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)的可以联系作者.


http://www.ppmy.cn/news/1501476.html

相关文章

PyCharm 2024.1最新变化

PyCharm 2024.1 版本带来了多项重要的更新和新特性,旨在提升开发者的编程效率和体验。以下是该版本的主要更新内容: 一、Hugging Face 集成 模型和数据集文档预览:PyCharm 2024.1 现在集成了对 Hugging Face 模型和数据集的支持&#xff0c…

npm与webpack的学习笔记

npm 定义:npm是Node.js标准的软件包管理器。它起初是作为下载和管理Node.js包依赖的方式,但其现在也已成为前端JavaScript中使用的工具。 包 包:将模块、代码、其他资料聚合成一个文件夹 包的分类: 项目包:主要用…

使用chainlit快速构建类似OPEN AI一样的对话网页

快速开始 创建一个文件,例如“chainlit_chat” mkdir chainlit_chat进入 chainlit_chat文件夹下,执行命令创建python 虚拟环境空间(需要提前安装好python sdk。 Chainlit 需要python>3.8。,具体操作,由于文章长度问题就不在叙述&#xf…

jenkins自动化持续集成

一、持续集成优势 1.1 解放重复劳动 一次设置,多次复用。持续集成任务可以解放集成、测试、部署等重复性劳动,通过自动化任务能够显著提升集成频率。 1.2 更快解决问题 接入持续集成任务后,能够更早地感知变更后效果,及时进入…

三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指

随着7月的脚步渐近,科技界的目光再次聚焦于三星,它即将在法国巴黎举办今年的第二场Unpacked发布会。这不仅是一场新品的展示,更是三星对创新科技的一次深刻诠释。 从Galaxy Z Fold 6的全新设计,到Galaxy Z Flip 6的显著升级&…

Linux操作系统常用命令总结

1、网络配置查看 要想知道网络的配置状态,我们可以使用ifconfig 或者 ip命令来查看。 这两个命令功能都差不多,不过它们属于不同的软件包,ifconfig属于net-tools软件包,ip属于iproute2软件包,通过查资料,…

算法 —— 暴力枚举

目录 循环枚举 P2241 统计方形(数据加强版) P2089 烤鸡 P1618 三连击(升级版) 子集枚举 P1036 [NOIP2002 普及组] 选数 P1157 组合的输出 排列枚举 P1706 全排列问题 P1088 [NOIP2004 普及组] 火星人 循环枚举 顾名思…

python实现信号合成(DSP仿真系统)【1】

python实现信号合成(DSP仿真系统)【1】 1、效果图 2、功能结构 1、基础信号正弦波、脉冲函数、阶跃函数、斜坡函数、方波、sinc曲线、矩形波(非周期) 2、信号合成(叠加)叠加噪音 3、波形展示原始波形、叠加波形、FFT、PSD、卷积 4、各种滤波器4.1.限幅滤波器4.2.中位值滤…