基于YOLO实现一个智能条码识别

需求背景

在智能制造行业已经多年,跟自己主要打交道的就是电子物料管理。公司有一个智能条码注册站产品,主要是依靠海康的相机拍照然后解析电子料盘中的条码信息。随着AI的发展,利用AI辅助条码的解析也是一个不错的发展方向。后续还会不断更新和丰富该功能实践。

根据需求选技术栈

模块 工具/库 说明
条码目标检测 YOLOv8 轻量、速度快、适合自定义训练
图像处理 OpenCV 图像裁剪、绘图等功能
条码解码 pyzbar 支持常见的一维码/二维码
标注工具 LabelImg 可视化框选目标,导出 YOLO 标签
编程语言 Python 3.x 主流、易用、生态强大

系统功能流程图

功能实现

1、引入相关依赖

pip install opencv-python pyzbar ultralytics

2、使用系统训练模型

model = YOLO("yolov8n.pt")

如果利用系统默认的模型,比如yolov8n.pt,这样会无法识别条码,因为模型压根没训练条码相关的内容,所以压根识别不了。查看结果多半就是这样的提示:

js 复制代码
result = ultralytics.engine.results.Results object with attributes: boxes: ultralytics.engine.results.Boxes object keypoints: None masks: None names: {0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus', 6: 'train', 7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant', 11: 'stop sign', 12: 'parking meter', 13: 'bench', 14: 'bird', 15: 'cat', 16: 'dog', 17: 'horse', 18: 'sheep', 19: 'cow', 20: 'elephant', 21: 'bear', 22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 'umbrella', 26: 'handbag', 27: 'tie', 28: 'suitcase', 29: 'frisbee', 30: 'skis', 31: 'snowboard', 32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove', 36: 'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle', 40: 'wine glass', 41: 'cup', 42: 'fork', 43: 'knife', 44: 'spoon', 45: 'bowl', 46: 'banana', 47: 'apple', 48: 'sandwich', 49: 'orange', 50: 'broccoli', 51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 'donut', 55: 'cake', 56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed', 60: 'dining table', 61: 'toilet', 62: 'tv', 63:

我们从上面的结果可以看到有一个names对象,这就是yolov8n.pt模型自己自带的基础模型,也就是大概能识别names里面包含的内容,我们从中可以看出,包括一些,人、自行车、小汽车、摩托车等等都是一些物品相关的,和我们今天的主角条码barcode,毫无关系。

3、打造属于我们自己的训练模型

  • ✅ 准备条码图片数据集

  • ✅ 使用工具标注条码区域(生成 YOLO 格式标签)

  • ✅ 构建数据集目录结构

  • ✅ 用 YOLOv8 开始训练模型

  • ✅ 用训练好的模型识别条码(替换之前的 yolov8n.pt

这里模型的构建和训练我不做过多的详细描述,内容有点多。需要的可以单独私信,或者单开一篇文章来叙述。执行训练100次模型结果如下:

源码展示

js 复制代码
import cv2
from pyzbar import pyzbar
from ultralytics import YOLO

# 使用你训练好的模型
model = YOLO("runs/detect/train/weights/best.pt")

# 读取图像
image = cv2.imread("./images/xie.png")

# 使用模型进行预测
results = model(image)

# 遍历每个检测结果(通常这里只有一个)
for result in results:
    boxes = result.boxes
    if boxes is not None:
        for box in boxes:
            # 获取框的坐标
            x1, y1, x2, y2 = map(int, box.xyxy[0])

            # 截取框中的图像区域
            roi = image[y1:y2, x1:x2]

            # 解码该区域中的条码
            barcodes = pyzbar.decode(roi)
            for barcode in barcodes:
                data = barcode.data.decode("utf-8")
                barcode_type = barcode.type
                print(f"识别到条码 [{barcode_type}]: {data}")

                # 绘制文字
                cv2.putText(image, data, (x1, y1 - 10),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)

            # 绘制检测框
            cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)

# 显示检测结果
cv2.imshow("YOLO Barcode Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

测试用例

在条码测试过程中,我们借助条码生成工具,来自定义我们测试的条码信息,然后再给到程序中运行,输出识别的条码结果。

测试结果

总结与展望

在这分享主要就是一个学习分享的过程,第一次接触大模型开发,也算是牛刀小试初步成功。本项目实现了一个完整的图像级条码识别系统,利用 YOLOv8 实现高效目标检测,结合 pyzbar 解码技术完成实际应用。但是离我们的目标还是有点远的,慢慢的可以将照片引入变为机器拍照。条码识别,可以变成多条码和多类型条码识别等。

相关推荐
Georgewu4 分钟前
【AI大模型入门指南】提示词Prompt工程详解
算法·aigc·ai编程
飞哥数智坊1 小时前
AI编程实战:Cursor+Claude4助力15分钟完成大屏开发
人工智能·claude·cursor
我是王大你是谁5 小时前
SmolVLA:一种用于经济实惠和高效的机器人视觉-语言-动作模型
人工智能·llm
MarkGosling5 小时前
【语音合成】B 站开源 IndexTTS :声音克隆,吊打真人发音,断句精准度 98%
人工智能·python
alicelovesu5 小时前
Mac开发者噩梦终结者?实测三大工具,告别环境配置地狱!
python·node.js
数据智能老司机5 小时前
AI产品开发的艺术——搜索与检索增强生成
人工智能·产品经理·产品
机器之心5 小时前
逐个token太慢!大模型原生并行出token,CMU、英伟达新作Multiverse
人工智能·llm
AI袋鼠帝5 小时前
字节出手了!5分钟搞定一个商用AI Agent(智能体),太丝滑了~【喂饭级教程】
aigc·agent·ai编程
量子位6 小时前
直击 CVPR 现场:中国玩家展商面前人从众,腾讯 40 + 篇接收论文亮眼
ai编程·腾讯