基于YOLO的智能条码识别模型标注与训练

讨论背景

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

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

主要标注工具优缺点对比

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

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

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

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

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

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

💡 命名建议:

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

🏷️ 第二步:使用 LabelImg 工具

使用python环境安装LabelImg

复制代码
pip install labelImg

打开工具

复制代码
labelImg

打开界面如下图所示:

使用工具

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

标注过程

  • 点击 Edit菜单下的create ReactBox开始标注
  • 用鼠标框选图中的条码区域
  • 输入一个类别名:比如 barcode
  • Ctrl+S 保存(会自动生成 .txt 文件)

标注过程示例:

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

复制代码
复制编辑
barcode_01.jpg
barcode_01.txt

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

复制代码
复制编辑
0 0.532 0.651 0.210 0.123

含义为:

  • 类别编号(0 表示"barcode")
  • 中心点 X、Y(归一化 0~1)
  • 宽度、高度(归一化)

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

创建如下结构:

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

✅ 第四步:分割数据:

  • 把 80% 图片放到 images/train/
  • 剩下 20% 放到 images/val/
  • .txt 标签文件也要放到对应的 labels/train/labels/val/

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

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

yaml 复制代码
yaml
复制编辑
path: ./barcode_dataset
train: images/train
val: images/val
names:
  0: barcode

开始训练

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

ini 复制代码
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 会自动创建以下目录结构:

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

训练参数:

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

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

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

替换成:

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

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

分享

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

相关推荐
DLYSB_20 小时前
存储运维实战:基于 Ceph Event 监听与 Python 适配器的分布式存储健康度物理声光响应架构
运维·ceph·python·报警灯
刹那芳华199220 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作20 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门20 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜20 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟20 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦20 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生21 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能
ZhengEnCi21 小时前
MoE(Mixture of Experts,混合专家模型)深度解析:从路由机制到专家专业化的迷思
人工智能
shxjnpl21 小时前
Qwen3-ASR 从 PyTorch 迁移到 vLLM:一次信创环境下的推理路径改造实录
人工智能·pytorch·vllm