基于机器视觉的条形码及二维码识别系统的设计
2018-11-22杨勇
杨勇
(襄阳职业技术学院 电子信息工程学院, 襄阳 441050)
0 引言
传统的条形码或二维码识别系统是通过手持式读码器,对准条形码或二维码来读取,常常由于扫描位置问题或识别率影响了读取效率。该系统针对这些问题,选用500万像素工业相机拍摄产品标签,从图像中自动提取条形码或二维码,基于C语言开发了一套集工业相机连接、图像采集、图像分析与处理、结果处理与一体的系统,该系统可以识别图像中的条形码或二维码信息。
1 条形码及二维码识别系统硬件结构
本系统用安装在计算机中的PCI运动控制卡,驱动两个伺服电机,带动图像采集系统及LED照明系统,实时运动,实现到达精准拍照测量。图像采集系统中的工业相机选用瑞士Baumer相机EXG50千兆网相机,分辨率为2592×1944,帧率为13fps。照明系统使用纬朗光电科技公司制造的24 V红色LED穹顶光源,计算机软件是基于Window7系统,使用C语言进行编程开发,开发工具为NI公司的Labwindows,图像处理系统基于NI Vision Assistant。
系统的硬件组成,如图1所示。
图中的X/Y轴运动系统带动图像采集系统和照明系统移动到被检测产品上方,为提高检测效率,一盘中放置12个产品,通过运动系统移动12次来分别检测。到达某个产品上方后,打开穹顶光源,工业相机开始拍摄图像并将图像通过GigE千兆网将数据传输到计算机,计算机处理软件基于NI Vision Assistant的一些图像处理函数,对采集到的图像进行处理和识别,识别条形码或二维码中的信息,最终从此信息中提取检测产品的SN。
图1 条形码及二维码识别系统结构图
2 基于NI平台的视觉系统软件设计
本条形码及二维码识别系统的软件设计是整个系统的核心,此系统是基于C语言开发,开发工具为Labwindows CVI,负责程序框架编写与计算机软件操作界面设计,运动系统硬件采用NI-PCI运动控制卡,使用NI-Motion开发包进行运动控制程序开发。工业相机连接与图像采集使用NI-Vision开发包对工业相机进行二次开发,包括连接相机,设置曝光参数,采集图像并将图像传输到计算机。采集到的图像通过NI Vision Assistant提供的图像处理函数,首先进行图像预处理,然后进行条形码及二维码识别,从读取到的字符中获取SN信息,其中条形码读取到的字符就是SN信息,但二维码读取到的字符包含多个信息,从中读取固定一段字符为SN信息。最后将读取到的SN信息显示在程序界面上。
检测流程,如图2所示。
图2 条形码及二维码识别系统处理流程图
系统软件设计分为四大模块,包括产品管理模块、运动控制模块、LED光源照明模块、工业相图像采集模块、图像处理模块。其中各系统之间紧密联系,协同工作,共同完成产品上的标签图像采集与条形码及二维码识别功能。
系统功能模块,如图3所示。
图3 系统功能模块划分
2.1 产品管理模块
本系统可识别多类条形码及二维码,适用于多种产品。此模块可进行产品的管理和参数的配置,通过保存ini配置文件的方式,将各类产品参数进行区分和管理。软件界面上,提供可供选择产品类型的控件,在进行测试时选择相应的产品,软件加载对应的ini配置文件读取参数,然后进行此产品的检测。不同产品类型的检测位置、摄像系统曝光时间、条形码或二维码类型、检测结果处理评判等参数是不同的,通过ini配置文件的管理,实现系统灵活检测的特性。
2.2 运动控制模块
本设计的运动控制系统为NI的PCI运动控制卡,使用发送正反向脉冲模式控制Panasonic伺服驱动器,驱动器连接到电机,电机按脉冲量转动实现X/Y方向精准运动。计算机软件基于NI-Motion开发库,使用C语言进行二次开发,程序功能包括原点复位,正反向运动和紧急停止等功能。通过两个方向运动轴控制,实现二维方向灵活运动,同时软件设计中提供可手动调试的运动控制界面,供用户在系统搭建前期,手动调节运动轴,测试并设定良好的拍照位置参数。
2.3 LED光源照明模块
照明系统采用Mightex光源控制器控制24V穹顶光源的方式。Mightex通过USB与电脑通讯,计算机软件基于Mightex厂家提供的开发包进行二次开发,功能包括初始化光源控制器,设置光源控制器输出电流,设置光源控制器开关状态等。为优化系统的运行速度,在照明系统的软件设计中,采用运动轴开始运动时提前打开LED光源的方式,提高运行效率。
2.4 工业相机图像采集模块
使用千兆网线连接GigE工业相机后,对工业相机进行IP地址配置,完成后使用NI-Driver max软件对工业相机进行连接和参数配置,计算机软件开发使用NI-Vision完成相机采集和传输图像的控制。软件中通过配置相机的曝光时间来实现采集图像亮度的调节,曝光时间越长,采集到的图像亮度越高。工业相机工作过程包括连接图像、采集图像、传输图像等。
2.5 图像处理模块
拍摄到的产品标签的图像,由于产品固定位置略有偏差,首先使用NI Vision Assitant中的PatternMatching工具,识别产品标签在图像中的位置,进而确定出条形码或二维码在图像中的位置,为了降低图像处理的复杂性,缩短图像处理时间,针对条形码或二维码设置图像感兴趣区域(ROI),此函数的参数ROI为库中预定义的ROI变量,传入的矩形区域左上顶点坐标及高度和宽度。
进行计算机软件开发时使用NI Vision Assistant库中函数识别区域中的条形码信息。函数返回值BarcodeInfo*类型的结构体指针包类条形码检测信息,从此结构体指针中提取出结果字符,即为检测产品的SN。读取二维码时,使用NI Vision Assistant库中函数识别区域中的二维码信息,函数返回值DataMatrixReport*为结构体指针,包含二维码检测信息,从中提取出结果字符。由于产品差异,二维码检测信息中的字符包含产品类型、产地、SN等各类信息,结果字符中取固定字符段即为产品的SN信息。
使用的主要NI Vision Assitant库函数如下:
1) PatternMatch* imaqMatchPattern:模板匹配,用于标签位置定位。
2) ContourID imaqAddRectContour:设置感兴趣区域。
3) BarcodeInfo* imaqReadBarcode:读取条形码信息。
4) DataMatrixReport* imaqReadDataMatrixBarcode:读取二维码信息。
3 图像测量结果及性能分析
3.1 条形码识别结果
在感兴趣区域中进行条形码识别,检测的条形码类型为Code128,设置好类型及检测信息后,根据区域中灰度差进行图像处理分析,读取条形码中的字符信息。如图4所示。
3.2 二维码识别结果
与条形码类似,在感兴趣区域中进行二维码识别。检测二维码类型为Data Matrix,设置好类型及检测参数,二维码尺寸范围等,读取二维码中的字符信息。读取到的二维码字符信息,取某个固定字符段即为所需要的SN信息。如图5所示。
图4 条形码识别
图5 二维码识别
3.2 检测结果与性能分析
在产品标签上,有条形码或二维码图,也有对应的SN字符,由于读取条形码或二维码速度快,且计算机处理识别条形码或二维码过程比字符识别准确性更高。为了提高检测效率,在检测时依次检测12个产品并显示结果。单个产品的图像处理时间在90ms以内,识别速度可以达到设计要求。
测试12组条形码和二维码识效果,如表1所示。
表1 条形码及二维码测量结果
本组条形码及二维码识别系统识别率跟图像质量关系很大,照明系统的稳定性尤为重要。外界光线的稳定性对识别率也有影响,考虑到此问题,设计时增加挡光结构,保证光亮度的稳定性。
为提高程序执行效率,软件开发时采用了多线程控制的方式,包括运动控制线程和图像采集处理线程,线程之间通过全局变量作为标志位,这样就可以实现在程序控制工业相机运动时,还能进行图像处理工作,提高了程序执行效率,保证系统的运行速度。
4 总结
本系统基于NI平台,选用NI Motion运动控制卡和Baumer工业相机,使用NI Vision Assistant图像开发库,基于C语言平台Labwindows进行计算机软件开发,在经过多次试验验证后,设置最佳照明效果,保证条形码及二维码识别率。程序框架采用多线程方式提高运行效率。该系统由自动扫描识别代替手动扫描并输入条形码及二维码中的字符,提高了条形码及二维码的识别效率。通过对测量结果的分析,本文的条形码及二维码识别原理、图像算法是实际可用的。该系统对提高生产管理系统效率也有很大帮助。