基于深度学习的番茄新鲜度检测系统(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进行数据标注:
安装LabelImg:
pip install labelImg
打开LabelImg并加载图片文件夹:
labelImg
标注番茄的新鲜度,并保存为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, QPixmap
class 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.shape
bytesPerLine = 3 * width
qImg = 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代码+训练数据集)的可以联系作者.