一、项目背景与意义

在食品工程领域,农产品包装质量直接关系到产品的保鲜、运输和销售。传统的人工检测方式存在效率低、易疲劳、主观性强等问题。随着人工智能技术的发展,利用深度学习中的目标检测算法进行智能检测成为趋势。而 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 的农产品包装质量智能检测方案,我们成功实现了对农产品包装缺陷的高效检测。该方案具有以下优势:

  1. 高效准确:YOLOv8 模型在保证检测速度的同时,提供了较高的检测精度。
  2. 实时性强:能够满足实时检测的需求,适用于生产线上的快速筛查。
  3. 易于扩展:可以根据实际需求增加新的缺陷类别,具有良好的可扩展性。

未来,我们可以进一步优化模型,提升其在复杂环境下的鲁棒性,同时探索与其他技术(如边缘计算、物联网等)的结合,打造更加完善的农产品质量监控系统。

人工智能图片

更多推荐