基于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 解码技术完成实际应用。但是离我们的目标还是有点远的,慢慢的可以将照片引入变为机器拍照。条码识别,可以变成多条码和多类型条码识别等。

相关推荐
xiao5kou4chang6kai43 分钟前
Python-GEE遥感云大数据分析与可视化(如何建立基于云计算的森林监测预警系统)
python·数据分析·云计算·森林监测·森林管理
铭keny9 分钟前
YOLO11 目标检测从安装到实战
人工智能·目标检测·目标跟踪
presenttttt10 分钟前
用Python和OpenCV从零搭建一个完整的双目视觉系统(四)
开发语言·python·opencv·计算机视觉
木头左3 小时前
逻辑回归的Python实现与优化
python·算法·逻辑回归
quant_19864 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
杨小扩6 小时前
第4章:实战项目一 打造你的第一个AI知识库问答机器人 (RAG)
人工智能·机器人
whaosoft-1436 小时前
51c~目标检测~合集4
人工智能
雪兽软件6 小时前
2025 年网络安全与人工智能发展趋势
人工智能·安全·web安全
元宇宙时间7 小时前
全球发展币GDEV:从中国出发,走向全球的数字发展合作蓝图
大数据·人工智能·去中心化·区块链
小黄人20257 小时前
自动驾驶安全技术的演进与NVIDIA的创新实践
人工智能·安全·自动驾驶