目录
前言:
近年来,随着全球经济的发展,水果消费市场规模不断扩大,水果种类也日益丰富。水果检测与识别技术在农业生产、仓储物流、超市零售等领域具有重要的应用价值。传统的苹果检测与识别方法主要依赖于人工识别,这种方法在一定程度上受到人力成本、识别效率和准确性等方面的限制。因此,开发一种高效、准确的自动化水果检测与识别系统具有重要的研究意义和实际价值。
计算机视觉作为人工智能的一个重要分支,在目标检测和识别方面取得了显著的研究进展。特别是深度学习技术的发展,极大地推动了计算机视觉在水果检测与识别领域的应用。许多研究人员已经尝试利用深度学习技术进行苹果检测与识别,取得了一定的成果。
一、YOLO v8环境搭建
1、创建一个虚拟环境
conda create -n torch1.12.1 python=3.8.8
2、激活刚建的虚拟环境
activate torch1.12.1
3、到官方网站下载yolo模型 ,下载好后解压,里面有个文件requirements.txt
http://mirrors / ultralytics / ultralytics · GitCode
4、安装一个整体包:
pip install -r .\requirements.txt
注:直接按照路径会有问题,找到自己下载后yolo v8文件里的 requirements.txt 文件路径
5、然后安装ultralytics ,这是必须的。也可以用镜像地址
pip install ultralytics -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
6、安装下载好包,接下来就是验证:
yolo predict model=yolov8n.pt source='ultralytics/assets/bus.jpg' show=True save=True
二、训练数据集的准备工作
1、收集数据集
我们选择的苹果数据集包含图片数量978张
2、划分数据集
我们导出的数据标签是这个结构
标签类别包含两类:fresh_apple和rotten_apple;
├── yolov8_dataset
└── train
└── images (folder including all training images)
└── labels (folder including all training labels)
└── test
└── images (folder including all testing images)
└── labels (folder including all testing labels)
└── val
└── images (folder including all testing images)
└── labels (folder including all testing labels)
运行脚本来划分数据集:
import os
import random
import shutil
# 设置随机数种子
random.seed(123)
# 定义文件夹路径
root_dir = 'Moon_Cake'
image_dir = os.path.join(root_dir, 'images', 'all')
label_dir = os.path.join(root_dir, 'labels', 'all')
output_dir = 'yolov8_dataset'
# 定义训练集、验证集和测试集比例
train_ratio = 0.7
valid_ratio = 0.15
test_ratio = 0.15
# 获取所有图像文件和标签文件的文件名(不包括文件扩展名)
image_filenames = [os.path.splitext(f)[0] for f in os.listdir(image_dir)]
label_filenames = [os.path.splitext(f)[0] for f in os.listdir(label_dir)]
# 随机打乱文件名列表
random.shuffle(image_filenames)
# 计算训练集、验证集和测试集的数量
total_count = len(image_filenames)
train_count = int(total_count * train_ratio)
valid_count = int(total_count * valid_ratio)
test_count = total_count - train_count - valid_count
# 定义输出文件夹路径
train_image_dir = os.path.join(output_dir, 'train', 'images')
train_label_dir = os.path.join(output_dir, 'train', 'labels')
valid_image_dir = os.path.join(output_dir, 'valid', 'images')
valid_label_dir = os.path.join(output_dir, 'valid', 'labels')
test_image_dir = os.path.join(output_dir, 'test', 'images')
test_label_dir = os.p