包装条码计算机视觉识别系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
包装条码计算机视觉识别系统设计
作者:冯阔
来源:《数字技术与应用》2017年第02期
摘要:随着商品种类的不断丰富和信息化管理手段的应用普及,条形码作为现代生产、物流和销售各环节的重要信息化手段之一,它的应用也日益广泛,而且,随着我国对食品和药品安全问题的重视,条码作为追溯码也开始被用于食品药品追溯领域。如何对条形码中的信息进行提取就变得非常重要了。本文在这样的背景下针对乳品企业的产品可追溯问题,设计了一套可用于乳品追溯的包装条码计算机视觉识别系统。
关键词:条码;乳品包装;条码识别;计算机视觉
中图分类号:TP391.44 文献标识码:A 文章编号:1007-9416(2017)02-0204-02
本系统硬件部分采用面阵摄像机、工控机构成,软件部分采用C#语言和OpenCV软件进行开发,采用EF Model(实体框架)作为程序框架,通过搭建好的视频采集系统,利用外触发启动摄像机采集图像,经过图像预处理、识别区域的检测和定位后,提取出待识别图像,对于待识别图像中的条码和数字,分别采用相似边距离方法进行一维码识别、采用逐行扫描法进行二维码识别,并利用模型匹配进行数字识别。
本系统可综合识别条码以及数字识别,实验表明本系统具有较好的识别效率和识别精度,可以满足一般条件下的包装条码计算机识别,并且已在乳品可追溯方面取得应用。
1 概述
在数不胜数的新型计算机科学技术出现之后,条形码技术俨然已经成为了最为经济实用的一种自动识别技术。随着时代的不断发展和用户需求的不断扩展,各种各样的商品出现在我们生活中[1]。虽然条形码的技术发展的炉火纯青,但是随着条形码的不断变化和创新,识别包装条形码技术已然成为我们现在需要不断研究的课题。
条形码的出现无疑给我们的生活带来了方便,但对于这个快速发展的时代,对其识别的技术的效率还需要我们进行大量的研究和开发。这也是开发本系统的初衷。对于本系统来说,它既要满足对条形码的检测,图像提取,校正等功能的实现,又要实现所有程序自动化的功能。该系统主要应用于对海河食品包装的识别。该系统利用外触发器,实现将视频转化到静态图片的功能,同时通过后台处理快速地找到该静态图片中条形码的位置并对提取的条形码以图片的形式存储,然后对条形码图片进行识别。
2 条形码定位
2.1 图像采集
采集方式是利用相机和触发器采取图像,DirectX以流的方式读取播放视频。
2.2 图像预处理[2]
OpenCV现在利用Mat类来表示图像,在此基础上进行图像的灰度化处理[3],在灰度处理基础上,进行图像梯度化[4]。就是把图像作为二维离散函数。梯度化过程就是对该函数求导的过程。图像边缘的确定大多都是通过图像梯度化处理来实现的。梯度化方向[5],分水平方向梯度计算和垂直方向梯度计算,或者是振幅计算。在进行检测前,还要使用Scharr算子先确定边缘像素[6]的位置。接下来进行图像二值化,所有的像素点的像素值设置为0或者255。最后,采用开运算算法进行形态化处理。
2.3 条码检测
本系统使用Vecor容器用于存放面积;findContours函数对二值图像中的轮廓进行检测;Point用来表示坐标为整数的二维点;Rect方法:用于提取旋转的矩形图案;angle检查这个矩形的偏斜角度;将提取的矩形轮廓标记在图片上并剪截下来进行保存。
2.4 二维码提取
相对应一维码,二维码在译码之前需要先对二维码进行分割,再进行边缘检测。采用区域增长的方法修正边界。二维码是正方形形态,我们也要对其进行图形区域的旋转处理,利用Hough变换来进行处理利用二维图像的投影变换。然后对拍摄的图像进行Hough变换,根据4条边界线进行位置旋转。也可以使用仿射变换。即先对一个向量空间进行一次线性变换并根据该变化做出相对性的平移,使其变成另一个向量空间。该变化方法包括水平的平移、图像的缩放、图像的旋转等功能。
2.5 数字定位方法
商品包装上的条码一般都是预印刷的,许多商品的生成日期和使用日期也需要入库进行保存,但是由于条码印刷成本较高,所以厂家通常采用的方式是以数字形式将商品的生成日期和使用日期印刷在包装袋上。因而,本系统添加了数字识别功能。数字技术识别的主要核心字符分割技术:切割数字区域后,进行字符的切割,由于该图像还是灰度图像,所以我们在切割前还要进行一些图像处理。具体过程:灰度拉伸、二值化、倾斜校正以及字符分割。图像以海河牛奶的包装袋为例。由于信息过多,一个条形码无法将全部信息存储,所以会在包装正面的空白位置加些数字,以此来完善条形码内容不足的地方。
具体分割算法如图1所示。将截取后的整个图片进行自上而下的逐行对比,提取黑色的字符部分,直到整幅图像完毕。已列为高度基准进行扫描,进行从左到右依次排查,直到全部图片扫面完毕。由于印刷问题,数字区域可能有小圆点,采用的是比例方法运算将这些小点清除,把每个切割后的图像的宽度均除以未切割前的图像的宽度,设立一个最小的商值。如果小于该商值,将其以噪声方式清除。最后对字符进行了加框和归一化处理。上述所切割的图像大
小是根据字符的最高和最低的值进行的切割,所以我们得到的结果并不是很准确,我们要将每个字符再进行进一步的确定,所以要多进行几次从第一个步骤到第三个步骤的运算。这样我们得到的才是该字符的准确范围。
3 条形码识别
3.1 一维码识别
一维码储存的信息是由条和空的宽度以及所在的位置来传递的。以EAN-13码为例。一维条形码的条和空的数量越多,它就越宽,储存的数据量就越多,由于一维码是由条和空组成的,将信息变化成二进制或者十进制的数字。
本系统对于一维码识别采用的方法是相似边距离方法,利用相似法识别一维码[6]:根据
算法进行字符的扫描和识别,定义:C1和C3表示相邻条的宽度,C2和C4表示空的宽度,T 表示整个字符的宽度,T1和T2为相似边的距离。用算法取得值JTj(j=1,2)来进行T1与
T2的归一化处理。
3.2 二维码识别
二维码是按照一定的规律在平面上分布的黑色与白色相间的图形记录符号。识别二位码[7]需先定位图案,再是功能性数据,识别由数据码和纠错码共同组成的数据信息。
定位图案:我们通常定位二维码是根据左上角、右上角以及左下角三个位置定位的。以其中一个图形为例,我们可以将其看作分别为7*7、5*5和3*3三个模块。三个之间比例为1:1:3:1:1。扫描:用一个直线逐行扫描二维码,该线被截为1:1:3:1:1时截取。误差在0.5之间在列方向,也用相同的方法进行二维码定位扫描。我们通常定位二维码是根据图上的三个位置定位的。
3.3 数字识别
数字识别[8]部分已经超出了我们图像处理的范围依据了,属于模式识别,由于我们已经
对图片进行了分割,所以我们只需通过其特征进行分类与识别。采用的是逐像素取法方法[9],具体操作就是对图片进行每行每列的依次查找,遇到的黑点时,将其像素值设为“1”,其他为“0”,全部扫描结束后,将提取的个数相同的像素,放在特征矩阵里。将特征信息,输入到分类器中,进行分类处理,从而得出结果。再进行采取模块匹配,事先做好海河包装上的图像中字符的图像采集,然后建立一个图片模板识别库。当我们进行字符识别时,就将模板取出来依次对比,把与字符特征对比的结果的矢量求出加权距离。则最小的结果就是识别的结果。如图2所示。
参考文献