百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

一种多类型条码批量识别系统设计(批量条码生成器app哪个好用)

itomcoil 2025-05-08 01:58 10 浏览


摘要传统条码识别系统无法满足企业与日俱增的生产管理需求,为此设计了一种能够批量识别且兼容多种类型的条码自动识别系统。首先在Linux开源系统上开发系统软件,实现大华工业相机焦距调节,图像采集等操作;其次利用OpenCV计算机视觉库对采集图像进行滤波、二值化、特征提取等图像处理,完成一维或二维条码的定位;最后利用QZING条码识别库解析条码中的产品SN信息,并通过QT上位机软件将SN信息上传至数据库完成生产管理。实验验证系统具有良好的准确性和稳定性。

关键词:条码识别、Linux、图像处理、OpenCV算法、生产管理


一、引言


随着工业4.0时代的到来,制造型企业向智能工厂转型升级成为必然趋势。智能工厂的智能仓储、智能物流管理要求产品在原料入库、生产工艺、运输物流——供应链全过程都可视化、可追踪[1],因此要在供应来料、产品部件、生产成品上打印识别码作为物料号进行生产数据信息存储和追溯。而条码自动识别技术能使物料号识别减少人工干预、提高识别效率及准确率、降低制造成本。传统的条码识别采用人工持枪扫描的方式,有兼容性差、准确率低,易漏检、效率低等缺点,难以满足产线满载运行的检码流程要求。

在条码识别术的前期研究中:文献[2]针对QR码图像捕捉中的噪声问题,运用图像预处理与中值滤波算法优化了传统算法。文献[3]基于Halcon条码高速识别算法和XLD边缘检测识别方法构建了兼容一维和二维条码高速在线识别系统,可以识别3.75m/s速度下运行的一维或二维条码。文献[4]提出一种基于不变矩和BP网络结合的条码识别方法,在一维条码中的识别准确率为92.9%。文献[5]采用了几何定位与基于位置探测图形相结合的方法构建了二维码批量识别的系统,在0.296m/s的运行速度下识别率达到100%,但该系统只识别二维码。

本文以条码识别技术为研究对象,通过图像处理技术对采集到的图像进行图像预处理、图像分割、特征提取等。基于Linux开源系统,对工业摄像头调节焦距,利用Opencv计算机视觉库的算法对料号进行识别,再通过上位机QT软件上传料号,更新数据库资料,构建出一种能够兼容条形码、QR二维码,能够批量、准确、稳定、且快速的料号识别系统。该系统能够减少企业人力成本投入,提升产线加工效率,对企业有着普遍的实用价值和较高的经济价值。


二、系统设计


1.系统硬件框架设计

本文设计的多种条码批量识别系统由工业相机、辅助光源、工控一体机、数据库服务器组成,系统硬件框架如图1所示。工业相机选取大华2000W像素CMOS 工业相机,型号A3B00MG000;工控一体机选用NXP I.MX6ULL型号CPU,Cortex_A7架构,800MHZ主频,512MB内存。辅助灯源选择条形LED光源至于检测区域两侧,提高图像采集清晰度。

系统运行时,贴有条码的产品由传送带输送至工业相机正下方的检测区域,工业相机拍摄照片并传输给工控一体机,由自主开发的多码识别软件读取条码中产品SN信息,同时将数据上传至SQL数据库完成出入库、盘点等生产管理操作。

2.系统软件框架设计

工控一体机是Linux系统架构,在其上调用计算机视觉算法,实现条码识别以及相关功能,系统软件框架图如图2所示。其中QT软件开发平台,用于完成识别结果上位UI显示和相应设置操作;Opencv提供料号识别的开源算法;Linux开源系统为整个软件的运行提供必要的运行环境。



三、条码批量识别算法


传统的条码识别算法需要进行图像采集、图像处理、边缘检测、特征提取,条码定位等步骤。在本设计中,系统需兼容一维条码与二维码识别,算法流程图如图3所示。

1.图像预处理

条码识别过程中,工业相机采集的原始图像传输至工控一体机后,首先要进行图像预处理。

灰度处理是将彩色原图转换成灰度直方图,即对图像内部每个像素的灰度等级进行统计并表述,使图像的整体灰度分布更加清晰,方便后期处理。本设计采用OpenCV提供的cv2.calcHist()函数完成灰度直方图的计算。

灰度直方图均衡化是对灰度直方图进行图像亮度归一化和对比度增强处理。均衡化处理对后期边缘与轮廓检测的效果有较大的提升作用。本文采用cvEqualizeHist()函数完成该计算。

图像二值化是将上述灰度图中的每个像素点的灰度值设为0或255,使图像转化为黑白图像,在缩减图像数据量的同时,使条码的轮廓更加凸显。本文采用cvThreshold()进行二值化。

2.条码特征提取

边缘检测用于检测图像中灰度值变化迅速的像素点,将这些点连成线条就可以得到图像中物体的边缘。一维条码与二维条码都是由黑白色的条纹或矩形组成,边缘检测可以快速锁定条边缘。本文采用Canny边缘检测算子,具有较高的准确度和稳定性。

轮廓检测是在图像的边缘检测基础上,提取与目标特征吻合的目标轮廓。本设计需兼容一维与二维条码,因此需创建两种不同的轮廓模型。其中一维条码的轮廓检测需对图像进行腐蚀与膨胀,然后查找一维条码的矩形区域轮廓,检测轮廓数量并绘制最小外接矩形框。如数量为0,则检测二维条码轮廓,二维条码的典型特征是用于定位的 “回”型框,再利用minAreaRect函数构建最小的外接矩形框。

定位完成后需解码提取SN信息,本文采用QZXing实现解码。解码完成后与上次解码信息比对,避免重检。


四、实验测试


1.少量样本静态测试

按照系统设计进行实验平台搭建,如图4所示。首先选取少量条码样本进行识别检测,验证算法正确性。

将2个不同的一维条码贴在PCB板不同位置与不同方向上,将PCB板放置到工业相机检测区域,触发检测流程,检测结果如图5所示。检测耗时13.5ms,提取出的2个SN信息正确率100%。

将4个不同二维码贴在PCB板的不同位置与不同方向上,放置到检测区域进行识别,结果如图6所示。检测耗时24ms,提取出的4个SN信息正确率100%。

2.批量样本动态测试

将实验平台安装至PCBA生产线,进行批量条码检测。产线传送带以不同速度运输,将贴有不同类型条码的PCBA板送至检测区进行识别测试,实验结果如表1所示。当传送带运行速度≤0.4m/s时,一维码、二维码的批量识别准确率可达100%,平均识别时间分别为13.69ms与25.17ms。当传送带运行速度≥0.5m/s时,一维条码与二维码批量识别的准确率不达100%。生产线在生产过程中实际运行速度在0.1m/s~0.3m/s范围内,识别系统准确率满足企业要求。

3.生产管理系统

生产管理系统是基于QT开发的上位机软件,条码检测获得的SN信息可在其可视化界面上显示,并可进行出入库、查询等生产管理操作,同时可以生成数据报表便于直接查看物料状态,上位机界面如图7所示。点击入库或出库按钮,料号、工号、操作时间等数据信息将被上传至SQL数据库,实现入库或出库操作。点击查询按钮可查询该料号产品在数据库内的登记信息,如在架数量、外借次数等,同时生成图表报告,实现生产数据可视化。



五、总结


本文设计一种能够兼容一维二维条码批量检测系统,通过实验验证,该系统能够实现目标功能,在0.4m/s移动速度范围内,正确率100%,检测耗时20ms左右,能够满足生产线需求,对企业有着普遍的实用价值。



参考文献:

[1]戚卫峰,张宁.自动识别技术在企业物流过程中的应用[J].企业导报,2012.

[2]Xiong Zou,Liu Guodong, et al. Study on the sequence of steps in the QR code image preprocessing[C]// IEEE,2010.

[3]李少波,王铮,杨静,朱书德,全华凤.基于机器视觉的一维和二维条码高速在线识别[J].计算机集成制造系统,2020.

[4]田秋红,孙政荣.基于不变矩和BP网络的条形码图像识别方法[J].计算机工程与设计,2012.[5]LI Jiangang, HUANG Shihao, et al. Identification system for batch of two-dimensional code with high speed based on machine vision[J].Journal of Applied Optics,2021.


相关推荐

Python 类型注解的进阶应用:从静态检查到元编程

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。如需转载请附上本文源链接!近年来,Python类型注解(TypeHinting)逐渐从一个可选的功能演变为大型...

高阶Python|返回类型提示技巧 (1)

引言Python提供了一种可选的特性——类型提示,它有助于提高代码的可读性、可推理性和可调试性。通过类型提示,开发者能够清楚地了解变量、函数参数和返回值应具备的数据类型。在开发那些需要高度灵活性的应用...

跟我一起学Python-函数的定义(基础)

一.函数的定义和调用1.语法:def函数名():函数封装的代码函数最好能够表达函数内部封装的代码功能,方便后续的调用,函数命名需要遵循规则字母、数字、下划线、不能以数字开头,不能使用系统关键字。&#...

Python函数参数和返回值类型:让你的代码更清晰、更健壮

在Python开发中,你是否遇到过这些抓狂时刻?同事写的函数参数类型全靠猜调试两小时发现传了字符串给数值计算函数重构代码时不知道函数返回的是列表还是字典今天教你两招,彻底解决类型混乱问题!让你的...

python入门到脱坑 函数—参数(python 参数处理)

本文包括必须参数,关键参数,默认参数以及可变参数Python函数参数详解一、位置参数(必需参数)位置参数是函数调用时必须提供的参数,且顺序必须与定义时一致。基本用法defgreet(name,me...

python入门到脱坑经典案例—求两个数的和

下面为大家讲解如何求两个数之和——这是编程中最基础但最重要的算术运算之一。我们会从最简单的情况逐步深入,并穿插相关编程概念。1.最基础版本#定义两个变量num1=5num2=3#...

新手必看!30 个 Python 核心函数详解,手把手教你玩转编程

Python中30个核心函数及其含义、代码示例、注释和应用场景:print():用于输出文本或变量的值到控制台。message="Hello,World!"#定义一个...

Python快速入门教程1:基本语法、数据类型、运算符、数字字符串

Python3的基础教程,涵盖了基本语法、数据类型、类型转换、解释器、注释、运算符、数字和字符串等内容,并附有使用实例场景。Python3的基础教程,涵盖了基本语法、数据类型、类型转换、解释器、注释、...

编程小白学做题:Python 的经典编程题及详解,附代码和注释(八)

适合Python3+的6道编程练习题(附详解)1找出字典中值最小的键题目描述:找出字典中值最小的键(如{"a":5,"b":2,"c...

新手学Python避坑,学习效率狂飙! 二十一、print()函数

感谢大家对《新手学Python避坑,学习效率狂飙!》系列的点赞、关注和收藏,今天这编是这个系列的第二十一个分享,前面还有二十个,大家可以关注下之前发布的文章。下面是我们今天第三个的分享:在Pytho...

编程小白学做题:Python 的经典编程题及详解,附代码和注释(六)

适合Python3+的6道编程练习题(附详解)1、打印杨辉三角的前n行题目描述:给定正整数n,打印杨辉三角的前n行(每个数等于它上方两数之和,每行首尾为1)。编写思路:杨辉三角的第i...

让你的Python代码更易读:7个提升函数可读性的实用技巧

如果你正在阅读这篇文章,很可能你已经用Python编程有一段时间了。今天,让我们聊聊可以提升你编程水平的一件事:编写易读的函数。请想一想:我们花在阅读代码上的时间大约是写代码的10倍。所以,每当你创建...

python入门到脱坑 函数—return语句

Python函数中的return语句详解一、return语句基础1.1基本功能return语句用于从函数中返回一个值,并立即结束函数的执行。defadd(a,b):returna+...

编程小白学做题:Python 的经典编程题及详解,附代码和注释(七)

适合Python3+的6道编程练习题(附详解)1.检查字符串是否以指定子串开头题目描述:判断字符串是否以给定子串开头(如"helloworld"以"hello&...

python的注释符是什么(python的合法注释符号是什么)

python的注释符是什么?python的注释符包括单行注释符和多行注释符。一、python单行注释符号(#)井号(#)常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释。...