YOLOv8 食品工程:农产品包装质量智能检测方案
在食品工程领域,农产品包装质量直接关系到产品的保鲜、运输和销售。传统的人工检测方式存在效率低、易疲劳、主观性强等问题。随着人工智能技术的发展,利用深度学习中的目标检测算法进行智能检测成为趋势。而 YOLOv8 作为最新一代的目标检测模型,以其高效、准确的特点成为理想选择。
一、项目背景与意义
在食品工程领域,农产品包装质量直接关系到产品的保鲜、运输和销售。传统的人工检测方式存在效率低、易疲劳、主观性强等问题。随着人工智能技术的发展,利用深度学习中的目标检测算法进行智能检测成为趋势。而 YOLOv8 作为最新一代的目标检测模型,以其高效、准确的特点成为理想选择。
二、技术选型与环境搭建
本次项目选用 YOLOv8 作为核心检测算法,其相比前代模型在速度和精度上都有显著提升。同时,为了实现整个检测系统的高效运行,我们选择 Python 作为开发语言,并借助 PyTorch 深度学习框架进行模型训练和部署。
环境依赖安装
# 安装必要的库
!pip install torch torchvision numpy matplotlib
三、数据集准备与预处理
数据是深度学习项目的基础。在农产品包装质量检测中,我们需要准备包含各种包装缺陷(如破损、褶皱、标签缺失等)的图片数据集。
数据集结构
dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/
数据集标注
使用 LabelImg 等工具对图片进行标注,生成对应的文字标签文件,标注格式采用 YOLO 格式(类别 x_center y_center width height)。
# 数据集划分示例代码(假设原始数据已标注)
import shutil
import os
import random
# 设置原始数据和目标文件夹路径
original_images_dir = 'original_images'
original_labels_dir = 'original_labels'
target_train_dir = 'dataset/images/train'
target_val_dir = 'dataset/images/val'
target_test_dir = 'dataset/images/test'
target_train_labels_dir = 'dataset/labels/train'
target_val_labels_dir = 'dataset/labels/val'
target_test_labels_dir = 'dataset/labels/test'
# 创建目标文件夹
os.makedirs(target_train_dir, exist_ok=True)
os.makedirs(target_val_dir, exist_ok=True)
os.makedirs(target_test_dir, exist_ok=True)
os.makedirs(target_train_labels_dir, exist_ok=True)
os.makedirs(target_val_labels_dir, exist_ok=True)
os.makedirs(target_test_labels_dir, exist_ok=True)
# 获取所有图片和标签文件列表
image_files = [f for f in os.listdir(original_images_dir) if f.endswith('.jpg')]
label_files = [f for f in os.listdir(original_labels_dir) if f.endswith('.txt')]
# 打乱数据
random.shuffle(image_files)
# 划分比例(70% 训练,20% 验证,10% 测试)
train_count = int(len(image_files) * 0.7)
val_count = int(len(image_files) * 0.2)
test_count = len(image_files) - train_count - val_count
# 复制文件到对应文件夹
for i in range(len(image_files)):
image_file = image_files[i]
label_file = image_file.replace('.jpg', '.txt')
if i < train_count:
shutil.copy(os.path.join(original_images_dir, image_file), target_train_dir)
shutil.copy(os.path.join(original_labels_dir, label_file), target_train_labels_dir)
elif i < train_count + val_count:
shutil.copy(os.path.join(original_images_dir, image_file), target_val_dir)
shutil.copy(os.path.join(original_labels_dir, label_file), target_val_labels_dir)
else:
shutil.copy(os.path.join(original_images_dir, image_file), target_test_dir)
shutil.copy(os.path.join(original_labels_dir, label_file), target_test_labels_dir)
四、YOLOv8 模型训练
模型配置文件
创建模型配置文件 yolov8_custom.yaml,定义模型架构和训练参数。
# 模型配置文件示例
nc: 3 # 类别数量(3 种包装缺陷)
names: ['破损', '褶皱', '标签缺失'] # 类别名称
# 模型架构
backbone:
- from: -1 # 输入来源
module: Conv
args: [64, 3, 2] # 卷积层参数
- from: -1
module: Conv
args: [128, 3, 2]
# 更多层配置...
head:
- from: -1
module: YOLODetectorHead
args: [nc] # 传入类别数量
训练脚本
编写训练脚本,加载数据集并启动训练过程。
# YOLOv8 模型训练脚本
import torch
from ultralytics import YOLO
# 加载预训练模型(可以使用官方提供的基础模型)
model = YOLO('yolov8n.pt')
# 设置训练参数
train_params = {
'data': 'dataset/data.yaml', # 数据集配置文件
'epochs': 100, # 训练轮次
'batch': 16, # 批量大小
'imgsz': 640, # 输入图片尺寸
'device': '0', # 使用 GPU 设备
'workers': 4, # 数据加载线程数
'project': 'food_packaging_detection', # 项目保存路径
'name': 'yolov8_custom', # 实验名称
'exist_ok': True # 是否覆盖已有实验
}
# 开始训练
model.train(**train_params)
五、模型评估与优化
训练完成后,需要对模型进行评估,查看其在验证集上的表现。
评估脚本
# 模型评估脚本
results = model.val(data='dataset/data.yaml', # 数据集配置
imgsz=640, # 输入图片尺寸
batch=32, # 批量大小
device='0') # 使用 GPU
# 打印评估结果
print(results.metrics)
print(results.summary())
根据评估结果,可以针对性地进行模型优化,如调整超参数、增加数据增强手段等。
六、模型部署与应用
将训练好的 YOLOv8 模型部署到实际检测场景中,可以使用以下代码进行实时检测。
实时检测脚本
# 实时检测脚本
import cv2
import numpy as np
# 加载训练好的模型
model = YOLO('runs/food_packaging_detection/yolov8_custom/weights/best.pt')
# 打开摄像头(或读取视频文件)
cap = cv2.VideoCapture(0) # 0 表示默认摄像头
while True:
# 读取帧
ret, frame = cap.read()
if not ret:
break
# 转换为 RGB 格式(OpenCV 默认使用 BGR)
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 进行目标检测
results = model(frame_rgb)
# 绘制检测结果
annotated_frame = results.render()[0]
annotated_frame = cv2.cvtColor(annotated_frame, cv2.COLOR_RGB2BGR)
# 显示结果
cv2.imshow('Packaging Quality Detection', annotated_frame)
# 按 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
七、总结与展望
通过本文介绍的基于 YOLOv8 的农产品包装质量智能检测方案,我们成功实现了对农产品包装缺陷的高效检测。该方案具有以下优势:
- 高效准确:YOLOv8 模型在保证检测速度的同时,提供了较高的检测精度。
- 实时性强:能够满足实时检测的需求,适用于生产线上的快速筛查。
- 易于扩展:可以根据实际需求增加新的缺陷类别,具有良好的可扩展性。
未来,我们可以进一步优化模型,提升其在复杂环境下的鲁棒性,同时探索与其他技术(如边缘计算、物联网等)的结合,打造更加完善的农产品质量监控系统。

更多推荐





所有评论(0)