掘金 人工智能 15小时前
基于YOLO实现一个智能条码识别
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文分享了在智能制造领域,利用AI技术辅助电子物料管理的实践。通过使用YOLOv8目标检测模型和pyzbar解码库,构建了一个条码识别系统。文章详细介绍了从需求背景、技术选型、系统功能流程、功能实现到测试用例的完整过程。核心在于如何训练自定义的YOLOv8模型来识别条码,以及如何结合OpenCV进行图像处理。该系统实现了对条码的有效识别,为后续的多条码和多类型条码识别奠定了基础。

💡 项目背景源于智能制造行业对电子物料管理的实际需求,旨在提升条码信息识别的效率和准确性。

🛠️ 技术选型上,作者选择了YOLOv8作为目标检测模型,pyzbar用于条码解码,OpenCV进行图像处理,以及LabelImg用于标注数据,构建了完整的技术栈。

🎯 实现流程的关键在于训练自定义的YOLOv8模型。这包括准备条码图片数据集,使用LabelImg标注条码区域,构建数据集目录结构,以及使用YOLOv8进行模型训练。

💻 代码实现部分展示了如何使用训练好的模型进行条码识别,包括读取图像、使用模型进行预测、截取条码区域、解码条码信息,并在图像上绘制检测框和条码数据。

✅ 测试用例通过自定义条码信息进行测试,验证了系统的有效性。测试结果表明,该系统能够成功识别条码,并提取其中的信息。

需求背景

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

根据需求选技术栈

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

系统功能流程图

功能实现

1、引入相关依赖

pip install opencv-python pyzbar ultralytics

2、使用系统训练模型

model = YOLO("yolov8n.pt")

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

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、打造属于我们自己的训练模型

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

源码展示

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

Fish AI Reader

Fish AI Reader

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

FishAI

FishAI

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

联系邮箱 441953276@qq.com

相关标签

YOLOv8 条码识别 人工智能 OpenCV pyzbar
相关文章