大视野多个条码视觉识别
视频解说
大视野多个条码视觉识别视频号
大视野多个条码视觉识别B站
大视野多个条码视觉识别,通常都有非常大的视野范围,如几百毫米或上千毫米的范围,然后里面可能会分布很多个条码。一般在产品入库、装箱包装中比较常见。或者是一些比较大的产品,如主板、PCB板等。这种产品检测,要想效率高,那肯定是一次成像然后完成检测是最快速的。如果软硬件性能达不到,那就只能分区进行识别。分区的话,效率肯定是下降的,如果不确定产品具体大小和条码位置时,那可能还得要拼图,工业图像处理库的拼图也是比较难搞的,像NI视觉连拼图功能都没有;如果是做固定产品大小的条码位置也是固定的,那就要简单很多,无非多加几个相机镜头,然后分别处理局部的条码,例如分成4区或6区、9区之类的。又或者一个个的飞拍也是可以的。
280mm范围多个条码成像中等亮度
280mm范围多个条码成像较低亮度
280mm范围多个条码成像较高亮度
280mm范围多个条码成像-视野范围
机器视觉光源
本视觉方案中的视野范围已经达到了280mm,从上面的效果来看,这上的亮度已经不如中间的亮度了,因为选择的是条形光源,长度也刚好只有视野这么大的SHI-BLM28238-W,所以边上的均匀性要差一些,不过整体还是可以读取的。当然,这里建议使用更长一些的SHI-BLM32738-W或者是SHI-BLM37238-W:
SHI-BLM32738-W
这里为了节约成本,只使用了一个条形光源。因为产品本身只有一排,位置固定,所以只要固定位置照射时,条码成像还是比较好的。所以上下并不需要考虑太多照明均匀性问题。而如果条码是随机分布在视野范围内,那么建议至少要安装两个条形光源对射的方式,如果成本允许,安装4个条形光源比较理想。其实也增加不了多少钱,但是效果上会好很多。
光源控制器
使用的是常规的低功率的条光源,对控制器的要求不高,可以使用24V模拟控制器、数字控制器等进行供电。SHI-BLM32738-W单个条形光源的功率不超过30W,所以可以考虑使用SHI-APSM2430-2CH;而如果要安装2个,则考虑60瓦的SHI-APSM2460-4CH;安装4个条形光源则考虑120瓦的SHI-APSM24120-4CH:
SHI-APSM2430-2CH
工业相机
产品比较大,视野范围是280*210mm左右,看条码本身的线条其实还是比较粗的,原始拍摄使用了2000万像素的相机MER-2000-5GM。尝试了一下将分辨率降级到500万像素级别MER-500-14GM,这时虽然可以读取到条码,但是稳定性上略有下降,部分条码需要重新设置参数才可以读取到,所以这里建议还是至少需要使用630万的那种宽屏MER2-630-18GM,或者是千万像素级别的MER2-1220-9GM。当然为了保险起见使用MER2-2000-6GM也是可以的,均为卷帘CMOS芯片,成本比较低,一两千块钱一台的相机,成本上差别几百块钱。使用分辨率更高一些的MER2-2000-6GM,则可以适用更大范围的条码检测,按照现有的倍率关系,至少检测400mm是应该可以的。
MER2-2000-6GM
工业镜头
拍摄范围比较大,几百毫米到上千毫米,所以这种情况下基本上没有太多选择空间,尽量选择焦距矩短的FA镜头,如8mm的、6mm的镜头。通常6mm以下的镜头畸变都比较大,所以这里优先考虑8MM的镜头SHI-C0814HJL:
SHI-C0814HJL
图像处理算法
条码识别的算法相对比较简单,只需要做个Read Barcode的函数即可。一般也没有太多的参数可设置,基本上参识别就能识别,识别不到,那基本上也就识别不到。当然,也会因为分辨率、对比度、亮度等问题,部分条码可能存在偶尔能读、偶尔不读的不稳定的情况。如果是这种情况,那么建议提升一下分辨率,或者是提升一下照明环境,改善一下图像质量。另外,NI视觉的条码识别函数相对来说性能一般,如果效果不理想的话,可以考虑换库,如使用Halcon的库来处理。
2000万像素中等亮度- VBAI识别8个条码
2000万像素较低亮度- VBAI识别8个条码-但是有一个是错误位置
当图像对比度较低时,这时使用40的边缘强度时有一个条码位置是有错误的,正确的没有读取到,但是底下的一个条纹被认为是条码了。这时增加将最小边缘强度增加1到41时则又可以正常读取了,所以NI视觉在这些细节上的表现很多时候不如人意。
有条码位置和下面的错误位置对比
从上面的对比来看,有条码的位置的对比度,明显比下面的识别错误位置更理想,但是就是没有读到正确的位置的条码。也是无语的。
调整最小边缘强度后可正确识别
2000万像素较高亮度- VBAI识别8个条码
然后将上面的2000万像素的图像转换为500万像素级别,再使用VBAI来识别:
500万像素中等亮度-VBAI识别8个条码
500万像素较低亮度-VBAI识别7个条码-最小边缘强度=40
500万像素较低亮度-VBAI识别8个条码-最小边缘强度=36
当分辨率降低为500万像素时,在最小边缘强度为40时,也只识别到7个条码,而最小边缘强度降低到36时,则可以读取8个条码。
500万像素较高亮度-VBAI识别8个条码-最小边缘强度=45
而当图像亮度较高时,则需要将最小边缘强度修改为45时,才可以准确读到8个条码。上面的验证可以看到,当分辨率降低时,VBAI识别时的稳定性下降了。不同亮度的图像需要修改最小边缘强度才可以。而且这里比较奇怪的是并不是说你将边缘强度调小了就能识别到,而是要调到某一个值时才可以识别到,这种调整参数的方法,在实际应用中是比较难实现的,总不能读一个图,又去手动调整一下参数吧?当然,对于上面的这种情况,使用一个更小范围的ROI可能稳定性更好一些。那样就需要先定位,然后再框选条码所在的区域。这里也验证一下使用HALCON的库来读取上面的中等、较低、较高亮度的图像,看看识别效果怎么样:
2000万像素中等亮度-HALCON识别8个条码
2000万像素较低亮度-HALCON识别8个条码
2000万像素较高亮度-HALCON识别8个条码
而当使用500万像素级别的图像时,Halcon中只使用读码功能,不优化图像时也有部分情况读取不到条码:
500万像素中等亮度-HALCON识别7个条码
500万像素较低亮度-HALCON识别7个条码
500万像素较高亮度-HALCON识别7个条码
而如果打开锐化功能,掩模宽度和掩模高度设置为7,系数设置为0.9,并且将最小元素大小调整为1(也就是最小条宽为1像素),则效果要好很多,这时各种亮度的图像均可读取8个条码:
500万像素中等亮度-HALCON打开锐化最小元素大小为1-识别8个条码
500万像素较低亮度-HALCON打开锐化最小元素大小为1-识别8个条码
500万像素较高亮度-HALCON打开锐化最小元素大小为1-识别8个条码
在Halcon中使用500万像素级别的图像时,如果仅使用条码函数,也是有部分码读不到的,但是使用了锐化技术来增强图像后,则使用统一的参数可以有效的读取各种亮度的图像中的所有条码,稳定性要好于NI视觉的读码。
机器视觉项目实现难度
★★
项目相对来说难度较低。当然,这里的较低是针对当前的图像和样品的。实际的条码读取中,其实也是有比较难搞的,那些条码磨损严重的或者有污渍、有褶皱等,都可能会造成不能读取的可能。