掘金 人工智能 06月18日 11:34
基于YOLO的智能条码识别模型标注与训练
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了使用YOLO模型进行条码识别的完整流程,从数据准备、标注工具的选择、数据集的构建,到模型的训练和最终的应用,都进行了详细的步骤分解和实践指导。文章以LabelImg作为标注工具,YOLOv8模型作为基础,提供了清晰的指令和示例,帮助读者快速上手,构建自己的条码识别模型。通过实践,读者可以掌握如何收集数据、标注数据、配置训练环境,并最终实现条码的自动识别。此外,文章还分享了作者的经验和未来展望,鼓励读者一起探索和进步。

🏷️ 准备条码图片数据集是训练的第一步,需要收集足够数量的条码图片,图片格式和大小尽量统一,内容应涵盖不同角度、背景和光线,以提高模型的泛化能力。

🖱️ 使用LabelImg标注工具进行数据标注,选择YOLO格式,框选条码区域并输入类别名称,生成对应的.txt标签文件,其中包含了类别编号、中心点坐标、宽度和高度等信息。

📁 构建YOLO数据集结构,将标注好的图片和标签文件按照train和val的比例进行分割,创建barcode_dataset目录,包含images和labels两个子目录,用于存放训练集和验证集。

⚙️ 准备YAML配置文件,创建一个barcode.yaml文件,配置数据集的路径、训练集和验证集的路径,以及类别名称,为YOLO模型的训练提供必要的参数信息。

🚀 执行训练命令,使用yolo detect train命令启动训练,指定配置文件、基础模型、训练轮数、图像尺寸和批量大小等参数,监控训练过程并等待训练完成。

✅ 使用训练好的模型进行识别,修改代码,将预训练模型替换为训练好的best.pt模型,即可使用自定义训练的模型进行条码区域检测。

讨论背景

书接上文,介绍了一个简单的AI智能条码识别系统的初步架构以及实现。其中自主模型训练这部分比较简略带过,应掘友的要求,再次做个明细补充和介绍。

上文:《基于YOLO实现一个智能条码识别》

主要标注工具优缺点对比

工具名称优点缺点支持任务类型
LabelImg- 开源免费 - 支持 Pascal VOC 和 YOLO 格式 - 简单轻量- 功能简单 - 只支持矩形框标注 - 不适合多种任务目标检测(矩形框)
Labelme- 支持多种标注类型(多边形、线、关键点) - 格式灵活(JSON)- 标注速度慢 - 批量处理功能弱图像分割、多边形、关键点标注等
CVAT- 功能强大 - Web界面友好 - 支持团队协作 - 支持视频标注- 安装较复杂(需Docker) - 对计算资源有要求检测、分割、追踪、关键点等
VIA (VGG Image Annotator)- 无需安装,纯网页运行 - 文件小,开箱即用- UI不够友好 - 不支持复杂项目管理检测、分割、多边形、关键点

在这我选择上手简单,开源免费的LabelImg作为我们的标注工具。

准备数据并训练你自己的 YOLO 条码检测模型

📦 第一步:准备条码图片数据集

我们想要识别条形码,那我们就得收集准备足够的条码图片,用于机器学习。图片格式大小尽量统一,不要相差太大,因为我们的上篇文章已经讲到OpenCV对图像进行裁剪,一个图像100x100px,一个图片3200x3200px,规格相差太大是不利于裁剪和识别区域标注的。

    收集10-50张条码图片,多多益善。内容越丰富越好(不同角度、背景、光线)。

💡 命名建议:

复制编辑images/├── barcode_01.jpg├── barcode_02.jpg├── ...

🏷️ 第二步:使用 LabelImg 工具

使用python环境安装LabelImg

pip install labelImg

打开工具

labelImg

打开界面如下图所示:

使用工具

    File菜单下的 “Open Dir” 打开你的图片目录点菜单 YOLO,启用 YOLO 格式(坐标将自动保存为 .txt)开始标注

标注过程

标注过程示例:

每张图片都会有对应的标签文件,如:

复制编辑barcode_01.jpgbarcode_01.txt

.txt 文件内容格式如下(YOLO 格式):

复制编辑0 0.532 0.651 0.210 0.123

含义为:

📁 第三步:构建 YOLO 数据集结构

创建如下结构:

复制编辑barcode_dataset/├── images/│   ├── train/│   └── val/├── labels/│   ├── train/│   └── val/

✅ 第四步:分割数据:

📄 第五步:准备 YAML 配置文件

在项目目录下创建 barcode.yaml 文件:

yaml复制编辑path: ./barcode_datasettrain: images/trainval: images/valnames:  0: barcode

开始训练

在命令行中进入你的项目目录,执行以下命令:

yolo detect train data=barcode.yaml model=yolov8n.pt epochs=50 imgsz=640 batch=16

参数说明:

参数说明
data=配置文件路径(你写的 barcode.yaml
model=使用的基础模型(yolov8n.pt 比较小)
epochs=训练轮数,50 一般够用(你可以调高)
imgsz=输入图像尺寸,默认 640 即可
batch=批量训练张数(内存小就用 8 或更小)

训练过程示例图:

训练完成

训练完成后,YOLO 会自动创建以下目录结构:

runs/detect/train/├── weights/│   ├── best.pt       ← 用这个模型来做条码识别│   └── last.pt├── results.png       ← 训练过程可视化图   

训练参数:

使用训练好的模型进行识别

回到你之前的 barcode_detect.py 文件,把这行:

python复制编辑model = YOLO("yolov8n.pt")

替换成:

python复制编辑model = YOLO("runs/detect/train/weights/best.pt")

然后重新运行这个文件,就可以用你自己训练的模型进行条码区域检测了!

分享

到这整个标注训练过程就已经完成,终于也有了一个属于自己的模型了,是不是有点小激动。要是觉得有趣,赶紧行动起来试试吧。作者自己也算是初步入门,有兴趣的掘友一同进步。在这又有了新的构想,下次把功能做的完善一些,比如开放出来一个接口,供外部api使用。或者打包成一个apk,或者桌面端应用。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

YOLO 条码识别 模型训练 LabelImg
相关文章