一种多类型条码批量识别系统设计(批量条码生成器app哪个好用)
itomcoil 2025-05-08 01:58 4 浏览
摘要:传统条码识别系统无法满足企业与日俱增的生产管理需求,为此设计了一种能够批量识别且兼容多种类型的条码自动识别系统。首先在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.
相关推荐
- Excel新函数TEXTSPLIT太强大了,轻松搞定数据拆分!
-
我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!最近我把WPS软件升级到了版本号:12.1.0.15990的最新版本,最版本已经支持文本拆分函数TEXTSPLIT了,并...
- Excel超强数据拆分函数TEXTSPLIT,从入门到精通!
-
我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!今天跟大家分享的是Excel超强数据拆分函数TEXTSPLIT,带你从入门到精通!TEXTSPLIT函数真是太强大了,轻松...
- 看完就会用的C++17特性总结(c++11常用新特性)
-
作者:taoklin,腾讯WXG后台开发一、简单特性1.namespace嵌套C++17使我们可以更加简洁使用命名空间:2.std::variant升级版的C语言Union在C++17之前,通...
- plsql字符串分割浅谈(plsql字符集设置)
-
工作之中遇到的小问题,在此抛出问题,并给出解决方法。一方面是为了给自己留下深刻印象,另一方面给遇到相似问题的同学一个解决思路。如若其中有写的不好或者不对的地方也请不加不吝赐教,集思广益,共同进步。遇到...
- javascript如何分割字符串(javascript切割字符串)
-
javascript如何分割字符串在JavaScript中,您可以使用字符串的`split()`方法来将一个字符串分割成一个数组。`split()`方法接收一个参数,这个参数指定了分割字符串的方式。如...
- TextSplit函数的使用方法(入门+进阶+高级共八种用法10个公式)
-
在Excel和WPS新增的几十个函数中,如果按实用性+功能性排名,textsplit排第二,无函数敢排第一。因为它不仅使用简单,而且解决了以前用超复杂公式才能搞定的难题。今天小编用10个公式,让你彻底...
- Python字符串split()方法使用技巧
-
在Python中,字符串操作可谓是基础且关键的技能,而今天咱们要重点攻克的“堡垒”——split()方法,它能将看似浑然一体的字符串,按照我们的需求进行拆分,极大地便利了数据处理与文本解析工作。基本语...
- go语言中字符串常用的系统函数(golang 字符串)
-
最近由于工作比较忙,视频有段时间没有更新了,在这里跟大家说声抱歉了,我尽快抽些时间整理下视频今天就发一篇关于go语言的基础知识吧!我这我工作中用到的一些常用函数,汇总出来分享给大家,希望对...
- 无规律文本拆分,这些函数你得会(没有分隔符没规律数据拆分)
-
今天文章来源于表格学员训练营群内答疑,混合文本拆分。其实拆分不难,只要规则明确就好办。就怕规则不清晰,或者规则太多。那真是,Oh,mygod.如上图所示进行拆分,文字表达实在是有点难,所以小熊变身灵...
- Python之文本解析:字符串格式化的逆操作?
-
引言前面的文章中,提到了关于Python中字符串中的相关操作,更多地涉及到了字符串的格式化,有些地方也称为字符串插值操作,本质上,就是把多个字符串拼接在一起,以固定的格式呈现。关于字符串的操作,其实还...
- 忘记【分列】吧,TEXTSPLIT拆分文本好用100倍
-
函数TEXTSPLIT的作用是:按分隔符将字符串拆分为行或列。仅ExcelM365版本可用。基本应用将A2单元格内容按逗号拆分。=TEXTSPLIT(A2,",")第二参数设置为逗号...
- Excel365版本新函数TEXTSPLIT,专攻文本拆分
-
Excel中字符串的处理,拆分和合并是比较常见的需求。合并,当前最好用的函数非TEXTJOIN不可。拆分,Office365于2022年3月更新了一个专业函数:TEXTSPLIT语法参数:【...
- 站长在线Python精讲使用正则表达式的split()方法分割字符串详解
-
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中使用正则表达式的split()方法分割字符串详解》。使用正则表达式分割字符串在Python中使用正则表达式的split(...
- Java中字符串分割的方法(java字符串切割方法)
-
技术背景在Java编程中,经常需要对字符串进行分割操作,例如将一个包含多个信息的字符串按照特定的分隔符拆分成多个子字符串。常见的应用场景包括解析CSV文件、处理网络请求参数等。实现步骤1.使用Str...
- 因为一个函数strtok踩坑,我被老工程师无情嘲笑了
-
在用C/C++实现字符串切割中,strtok函数经常用到,其主要作用是按照给定的字符集分隔字符串,并返回各子字符串。但是实际上,可不止有strtok(),还有strtok、strtok_s、strto...
- 一周热门
- 最近发表
- 标签列表
-
- ps像素和厘米换算 (32)
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)