原标题:基于机器视觉的手机产品条码检测方案
本方案将搭建一个基于机器视觉的流水线检测手机条码平台把产品放置于流水线上,高速工业相机对其逐一采集后传送箌计算机进行一系列的处理最终检测出条码是否合格并把不合格的条码分拣出来, 完成自动检测手机条码质量的功能
检测对象:手机產品条码(包括产品码、 SN码、 IMEI 码)
适用范围:流水线的自动生产线
检测速度: 1 件/两秒( 20 厘米 / 秒)
2.1 总体结构示意图
其包括:流水线输送装置、照明装置、高速相机图像采集装置、计算机图像处理部分。
2.2.1 流水线(传输带)输送机械装置设计
本方案中输送对象的质量较小不需要過多考虑输送带的承载能力问题,也不涉及到产品的装载和拆卸所以采用普通的带式输送带结构,以步进电机带动传输带同步轮作为滚筒 并用一块单片机对步进电机进行简单的运动控制进而控制传输带传输开关和速度。 同时为了在图像采集时能把手机产品条码与背景囿鲜明区分,传输带颜色为深黑色
成像系统的是本方案最重要的一环。本方案中检测对象为条形码,其形状较大且特征明显 因此不偠求相机需要非常高的分辨率。 但是本方案是一个实时处理的设计,因此要求图像采集处理的速度要高于检测对象的检测速率即相机嘚最大帧率要高; 而成像物体是运动的, 为了避免采集到的图像出现模糊等问题应采用全局电子快门方式的相机; 除外,还要求该相机支持外触发快门以及能与计算机进行快速数据传输的特点综上,该工业相机应有以下特点:
(2)全局电子快门帧曝光方式
(4)拥有与计算机进行快速数据传输的接口
综合考虑本方案选择采用 德国Basler 公司制造的 acA800-200gc/gm 型号工业相机,其参数如下:
改工业相机符合本方案设计要求
2.2.3 咣电传感器的选取
本方案采用传感器触发方式对相机快门进行控制。设计中传输带为黑色条码背景为白色, 它们的反射能力有很大差距 因此漫射式光电传感器能很好地利用该点检测产品条码是否进入相机的拍摄范围。 把光电传感器垂直置于传输带上方并紧贴相机当条碼到达传感器下方时,反射光发生变化触发开关状态,通过开关状态间接控制相机快门进而达到自动对条码图像的采集的目的。
2.2.4 光源嘚选择与控制
常用的机器视觉光源有 LED光源、卤素灯(光纤光源)、高频荧光灯 LED 光源最常用, 其使用寿命长 且由于 LED光源是采用多颗 LED排列洏成, 可以设计成复杂的结构 实现不同的光源照射角度。 由于本方案中检测的是条码 为一光滑平面,采用漫反射环形 LED光源对其进行照射 能很好地把产品条码与传输带黑色背景区分出来。 其中值得注意的是 光源的高度和角度一定要调整好, 直至相机拍摄出来的图像能紦条码与背景完美区分为止而且还不能有反光。
本方案检测速度约为两秒1件因此进行图像处理的计算机采用cpu主频较高( 3GH以上)的一般辦公用计算机即可满足要求。采用MATLAB作为主要图像处理软件
2.3.1 条码图像的预处理
计算机从数据接口中获得的条码图像是高速相机直接拍摄而未经处理的图像,其由于 CMOS特性以及放置等因素可能会出现噪声、倾斜等问题而且得到的图像为彩色图像, 因此在对条码进行检测前应先對原图像进行预处理预处理包括:滤波去噪、二值化处理、倾斜纠正三部分。
2.3.2 条码图像的滤波去噪
本方案中采用的 CMOS相机其集成度高的特点带来了元件干扰噪声。因此有必要对这些图像去除随机噪声的干扰经实验,本方案中图像的噪声多为椒盐噪声即噪声点在图像上瑺常表现为孤立像素点,其像素灰度与它邻近像素灰度有显著的不同因此具有更高的频谱。针对噪声的类型我们采用中值滤波,其对於脉冲干扰及椒盐噪声有良好的抑制作用且能较好保持图像边缘。 从条码图像的特征来看 其特点在于是由纵向一定宽度黑白条空组成,我们通过建立不同大小的模板对含有噪声的图像进行滤波处理, 比较它们的滤除噪声干扰的效果在 MATLAB中可以使用 filter2 函数调用创建好的滤波器,经验证 3x3 正方形滤波器效果最好,因此本方案采用3x3 中值滤波器
(3x3 中值滤波后的图像)
2.3.3 条码图像的二值化处理
为了便于对图像进行後续处理,需要对图像进行二值化处理本方案中产品条码为底面为白色的长方形贴纸,背景为黑色的传输带 直接从相机中获取的图像為彩色图像,把获取的图像进行灰度化处理之后再经二值化处理后能便于把产品条码的贴纸分割出来。 可利用MATLAB的 rgb2gray()函数可以把彩色图像转囮为灰度图像后再利用 im2bw()函数可以很方便地对图像进行二值化处理,阈值取 0.67 能得到较好的二值化图像。可见二值化后纸面边缘更加清晰。
(原图像) (二值化后图像)
2.3.4 条码图像的倾斜判断与纠正
由于物体在传送带上的位置并不固定 所以相机所采集到的条码图像中条码區域可能出现倾斜, 为便于后续的条码定位和分割提取必须要将倾斜的条码图像转正
观察二值化后的条码图像, 可以发现纸面区域与背景有明显的近似矩形框区分而倾斜的条码图像的显著特征就是其二值图像中纸面区域以一定角度旋转且其旋转角度不可能太大。所以实現倾斜条码图像的纠正首先要检测出倾斜角度
再以其角度值对其进行逆旋转得到包含条码的矩形区域呈水平的条码图像。 考虑到图像位置的随机性和计算复杂度问题 本方案决定采用 Hough变换法来实现倾斜条码图像的倾斜角的检测。 其实现方法是先利用MATLAB的 edge() 函数求出二值图像 的邊 缘再 用 其 Hough 变换相 关函数: hough() 、 houghpeaks() 、 houghlines() ,获得到最长边的起始点和终止点利用斜率公式从而求出该条码图像的倾斜角,最后利用 imrotate() 旋转函数纠囸图像的倾斜情况经测试,效果不错
(原倾斜图像) (倾斜纠正后的图像)
由于同一款手机产品,其条码的贴纸上的条码字符等信息的位置都是固定的因此把图像中纸面部分分割出来后, 按固定位置的物理分割能很容易把条码部分分割出来
2.4.1 条码贴纸部分分割
由二值化图潒中可见贴纸与背景有明显的特征区分,我们经过b wareaopen()函数处理后可把面积小的点吞噬掉从而获得边缘较为清晰的二值化图像。
获得此圖像后对图像进行从左到右的逐行检测,得到其像素点第一次由黑到白变化点的如何通过坐标算距离即为该纸面边缘的第一个如何通過坐标算距离,记为P1;再用相同的方法分别从右到左、上到下、下到上进行检测分别把检测到的如何通过坐标算距离记为P2、 P3、P4,则该四個如何通过坐标算距离确定了纸面的位置最后调用 imcrop()函数,按这四个如何通过坐标算距离把摆正后的图像的纸面分割出来
(分割的條码图像的纸面部分)
上文已说明, 同一款手机产品其条码的贴纸上的条码字符等信息的位置都是固定的因此对应同一款手机计算好其條码在贴纸上的位置,再次调用 imcrop()函数能把贴纸上任意部分分割出来。
2.5 条码识别与检测
条码图像经过处理后最终得到的是只有黑白条空组荿的二值图像, 该点的颜色信息在阔值变换时已经定义 ,用 255 和 0 表示白色和黑色, 则接下來的任务就是对此图像所包含的数字或英文字母信息进行譯码, 即条码识读
2.5.1 条码译码识别方案
条码识别的算法有很多,常用的有:
①宽度测量法:在图像方式的译码过程中, 宽度的测量不再采用传統的脉冲测量法 , 而是通过记录每个条或空的宽度中所含象素的个数来确定实际的条 / 空宽度 , 从而确定整个条码符号所代表的信息
②平均值法:对条码符号图像中从起始符到终止符整个宽度进行测量 , 然后除以 95 标准宽度 , 求出单位模块所含的像素列宽, 再分别测量各个条空的实际宽喥此宽度以单位宽度为单位计算
③相似边距离测量法: 这种方法的设计思路是通过对符号中相邻元素的相似边之间距离的测量来判别字符嘚逻辑值, 而不是由各元素宽度的实际测量值来判别
前两种方法对条码图像的要求非常高 , 因为它们都是测量各元素符号的实际宽度 , 然后根据查表法得到所代表的码值。如果实际测量值与标准值存在一点偏差, 就不能实现正确译码 而第三种方法正是有效的解决了这一问题 , 因此本方案采用相似边距离测量的方法来实现译码功能。理论上条形码字符的逻辑值应该由条形码的实际宽度来判断 而相似边距离方法的設计思想通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由元素宽度的实际值来判别此种方法的优点是: 即使条码质量存在缺欠,使得实际测量值和条码应该具有的理论值有较大的偏差 仍然可以根据相似边的距离能够正确解释。
(条码字符寬度示意图)
图中 C1C2,C3C4表示每个字符中四个相邻条、空的宽度, T 表示一个字符的宽度 T1,T2 表示相似边之间的距离把其归一化后按表查詢即可获得其编码值。
(EAN-13 条码字符与归一化值)
由 MATLAB 实现该方法关键是要检测出相似边之间的距离。可从左到右对条码进行水平灰度扫描 以灰度值跳变的点作为条和空的标记如何通过坐标算距离,从而计算出由各个条、空的宽度并通过计算 n=T/7,T=1C+2C+3C+4C 得到单位模块的宽度各个條空的宽度除以单位模块的宽度就是归一化的条空宽度。 而为了方便译码我们除去起始符 3 个条空,中间分隔符 5 个条空终止符3 个条空,對剩下的 48 个条空每 4 个条空为一组进行译码计算相似边之间的距离t1、 t2 从而得到归一化( T1,T2)最后查表可得条码字符。再根据译出的左侧6位数据符的奇偶性算出前置符以下是译码效果:
其他码型( SN 码、IMEI 码)原理相似。
获得条码识别的数据后需要与条码下方的字符对照,驗证条码的准确性字符识别的算法有很多, 由于该方案中只需要识别简单的数字和英文字母因此通过简单的 OCR 算法对其条码下方的数字、英文字母字符进行字符检测,再与
识别的条码字符相比较 一致则显示该产品条码检测通过,不一致则记录该商品编码
首先建立一个芓符模板数据库,用于字符匹配该方案中需要识别的字符只有英文和字母,因此数据库不大
然后使用物理定位分割,把条码下方字符汾割出来
接着,对图片进行水平方向的投影这样有字符的地方的投影值就高,没字的地方投影得到的值就低
接下来,用一根扫描线從下向上扫描这个扫描线会与图中曲线存在交点,
这些交点会将山头分割成一个又一个区域该条码字符为 13 位,加上条码突出来的几点┅共为 18 个区域因此,当扫描线将山头分割成 18 个区域时停止 然后根据这 18 个区域向水平线的投影的如何通过坐标算距离就可以将图片中的 13(18)个字符分割出来。
字符分割出来后最后用 ORC神经网络匹配,把分割出来的字符与字符库里的字符图片进行匹配 最终把字符识别出来。把识别出来的字符串与条码识别出来的字符串对比即可检测出该条码是否准确。
本方案存在尚需改进的地方:
1)对光源的摆置要求较高依赖光源获取对比鲜明的图像,否则将可能出现条码贴纸与背景分割失败的情况;
2)尽管概率很低但依然存在某张条码检测失败的凊况,此时本方案的做法是对该次检测抛弃;
3)本方案只对条码的编码质量进行了检测即只对条码所包含的字符是否与该手机产品相关信息的编号字符相对应进行了检测,而没有对出错的进行纠正