基于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,或者桌面端应用。

相关推荐
做萤石二次开发的哈哈5 小时前
连锁门店、园区、交通枢纽的视频如何统一汇集?应用模板的接入与分权管理详解
人工智能·物联网·音视频·二次开发·视频监控·蓝海aiot一站式工作台·萤石云开放平台
高级程序源5 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
老金带你玩AI5 小时前
全程拿着手机,我让dot准备了一场AI分享
人工智能
WeiXin_DZbishe5 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
nvd115 小时前
Flink 批处理驱动的湖仓 AI 财务研报流水线:从双流广播汇聚到 Agent 智能决策与原生 Iceberg 落盘全景实战
大数据·人工智能·flink
kimnoic6 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna6 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏6 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
点云-激光雷达-Slam-三维牙齿6 小时前
100,000 Records CSV File - India Traffic Accident Analysis Dataset.7z
人工智能·数据集
TechWayfarer6 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer