基于机器视觉的食品包装袋喷码字符识别方法
2023-10-09姚勇,吴田
姚 勇,吴 田
(湖北第二师范学院 计算机学院,武汉 430205)
1 引言
食品包装袋的应用非常广泛,在包装袋上印刷着当前商品的生产日期、合格状况、保质期、生产批次等重要信息,这些信息一般是通过喷码机印刷到包装袋上的,字符呈点阵状。喷码大多数用喷墨技术实现的,但是喷码机会出现震动扰乱的情况导致喷码字符会倾斜,或者因为油墨不足导致喷码字符出现残缺,或者因为喷墨不均匀出现喷码模糊等情况。为了不让产品在流通和销售时因为喷码问题产生影响,因此需要在出厂前检测识别产品外包装喷码,筛选剔除喷码有问题的产品。
传统的喷码检测基本都是人工检测,方法是目视法,虽然能检测出一些不合格的产品,但是人会产生疲劳,导致检测精度降低,同时人工检测的速度也较低,因此还会存在部分不合格品流入下道工序,导致需要耗费更多人力资源去进一步筛选,增加了生产成本。因此自动化的喷码检测方法是非常必要的,能够提高识别效率,降低企业生产成本,保障产品安全。
2 相关工作
字符识别的实现分为三个步骤,即字符定位、字符分割和字符识别,首先对字符区域进行定位,然后对该区域进行分割,最后进行识别。对于字符定位,吴慧莹等人采用数学形态学与连通域分析组合的方式对预处理图像进行定位,选取行列位置信息和面积大小作为定位特征。[1]闵锋等提出了基于形态学变换定位的方法,通过腐蚀,膨胀的形态学操作使字符特征,但是该方法适用于字符与背景颜色对比明显的情况。[2]Etemad E 等提出了基于边缘特征定位的方法,利用字符与背景颜色搭配固定的特征以及字符与边缘距离固定的约束条件,对图像进行了多次滤波,使字符区域的边缘点颜色对比突出,以此快速定位出字符区域[3],但是该方法对字符区域颜色的固定搭配限制性比较强。Li H等提出了利用颜色空间定位的方法,对于某种目标颜色,可以通过H、S、V三个分量分别设定范围把其像素分离出来,但是这种过滤对于黑色或者白色区域的效果比较差。[4]Kumuda T等提出了基于纹理特征空间定位的方法,根据图像中像素及其周围的空间邻域的灰度分布来确定字符区域,但是此种方法仅适用于区域内纹理的粗细和疏密程度存在较大差异的情况。[5]Maonan Weng等提出了基于连通域分析定位的方法,首先通过边缘检测对字符区域进行大致定位,然后再筛选连通域结合字符区域模板确定位置。[6]
目前的字符分割方法主要分为三种,第一种是基于投影法的字符分割。Dan等人使用投影法分割图像,对单行的字符有较好的分割效果,但投影法单一统计各个像素点,受噪声的影响较大。[7]焦慧华等人采用垂直投影法分割字符,把二值化后的图像进行垂直方向上的投影,然后确定字符位置,采用此方法的弊端在于分割的区域多为矩形,在正方形条件下效果最好。[8]马永杰等人对双行字符的分割采用了自适应投影法分割字符,利用图像在HSV颜色空间上的特性,进行改进的二值化,然后通过自适应投影把双行的字符分割为单行,再进行单个字符分割,该方法对字符颜色以及背景颜色的局限性比较大。第二种方法是基于连通域法的字符分割方法。[9]姚梦洁等人利用形态学算法对边缘特征进行优化,获取了稳定性更强的边缘特征,然后根据连通域的方法对粘连字符进行分割。[10]朱亚萍等人针对不连通字符干扰和边框干扰提出了基于连通域的改进算法,首先用连通域方法进行粗分割,然后用二分投影法进行第二次分割,不过此种方法对字符区域的尺寸有所限制。[11]路敬祎等人提出了改进的八连通标记法,只需要一次遍历就可以完成标记,降低了连通域算法多次标记的运算量。[12]第三种方法是基于神经网络的字符分割方法。Shi等人提出了一种能够识别日常场景下字符的端到端训练的神经网络。[13]林东婷等人搭建了基于SVM的字符分割模型,可以把字符进行分割后送入ANN分类器进行字符识别。[14]张彩珍等人提出了改进的卷积神经网络和循环神经网络以及联结时间分类的免字符分割的字符识别算法,采用神经网络的方法分割字符准确率比较高,但是需要大量的数据来进行训练,所需时间比较长。[15]
对于字符识别来说,目前主要用到的方法有模板匹配算法,基于机器学习的字符识别方法,基于深度学习的字符识别方法。李强等人用改进的模板匹配方法先进行字符识别,然后通过把字符的差异值累积扩大,通过比较差异值判断识别的准确性。[16]黄志斌等人把SVM算法应用到英文字符的识别,在满足实时性的条件下取得了不错的效果。[17]罗月童等人用深度学习在LeNet-5网络结构的基础上,根据字符检测特点,研究了数据增广的方法,应用到字符识别中,对于相似的字符检测性准确率比较高。[18]
当前针对包装袋喷码的字符分割与识别虽然在一定程度上取得了一定的效果,但是仍然存在以下两个问题:(1)字符区域定位不准确;(2)字符分割准确率低。针对问题(1),目前主要所用到的方法有形态学法和连通域分析法。针对问题(2),目前采用最多的是投影分析法。
针对上述两个问题,本文以面粉包装袋的图像作为实验对象,提出一种基于机器视觉的包装袋喷码字符识别方法,其中字符分割用了一种二次分割的方法来提升喷码字符分割的准确率。首先对图像进行灰度化、阈值分割、滤波处理和形态学处理等预处理后,进行连通域分析以便提取字符特征,实现字符定位。由于喷码字符整体是在包装袋上占据一块区域,因此第一次分割是依据连通域分割出字符区域,在第二次分割中先对字符进行外接矩形绘制,然后用等间距分割分割出单个字符,进行字符提取,之后采用模板匹配法进行字符识别。
3 研究方法
本研究分三部分:字符定位、字符分割、字符识别。字符定位采用的是连通域分析法来实现字符区域的定位以及特征提取,字符分割采用的本文提出的二次分割法,先用连通域分割法进行第一次粗分割,然后二次分割中用等间距分割的方法进行细分割提取出字符,最后的把提取到的字符采用模板匹配法进行识别。总体算法流程如图1所示,下面分别对这些部分进行介绍。
图1 系统整体算法流程图
3.1 字符定位
包装袋上的喷码具有图像背景复杂,字符不明显,字符倾斜等特点。由于包装袋喷码字符的尺寸,颜色都是相同的,所以采用连通域分析的方法可以很好地通过筛选字符特征实现定位。具体流程如图2所示。
图2 字符定位流程
3.1.1 图像预处理
图像的预处理的主要目的在于消除图像中与所需要检测目标无关的信息,把目标的信息特征更加明显地展现出来,便于下一步的处理。在本次实验中,图像预处理包含四个步骤,图像灰度化、阈值分割、滤波处理、形态学处理。
3.1.1.1 图像灰度化
图像灰度化就是把彩色图像转换为灰色图像,使其RGB三个通道的色彩分量相等,灰度图像中的每个像素都只具有一种样本颜色,灰度值大的地方会比较亮,其他的就相反,为之后的图像处理做基础。由于人的眼睛对绿色的敏感度比较高,对蓝色的敏感度低,所以本文采取的灰度化方法是加权平均法。此方法的效果比较合理,公式如下:
其中RGB 为某点的颜色组成,分别为红色、绿色、蓝色分量,对这三种分量以上式中的权值进行加权平均。灰度化后的效果如图3:
图3 灰度化图像
3.1.1.2 阈值分割
阈值分割的主要目的是从数字图像中提取出目标物体,通过设定合适的阈值,把图像数据分为两部分。一部分是大于设定阈值的,一部分是小于设定阈值的。经过阈值分割后可以得到黑白的二值化图像,适用于目标灰度对比强烈的情况,可以得到封闭连通区域的边界,为之后的连通域分割做准备。本文用到的阈值分割方法公式如下:
公式中设置了一个最佳阈值,大于此阈值的图像背景部分,以此可以很好地把目标与图像分割出来,效果如图4所示。
图4 阈值分割图像
3.1.1.3 滤波处理
经过阈值分割后的图像还存在着许多噪声,因此需要用到滤波来去除噪声,使图像变得更加平滑。这里需要用到高斯滤波,其主要原理是,使用高斯核与输入图像中的每个点作卷积运算,然后对卷积结果求和,从而得到输出图像。二维高斯函数如下公式所示。
通过上述函数,就可以计算每个像素点的权重,对邻域内像素进行平均时,给予它们不同的权重。经过高斯滤波后的图像如图5所示。
图5 高斯模糊处理
3.1.1.4 形态学处理
由于经过处理后的图像中还存在着许多干扰,字符区域仍无法与其他区域具有大的差异化,不能很好地分离出来,因此需要用到形态学处理来增大字符区域的特征,或者是根据干扰因素的特征将其抹除。这里用到了膨胀的处理方法,能够加长或者加粗二值图像中的对象。膨胀操作的公式如下:
经过膨胀操作后可以让字符粘连起来,把字符之间的空隙填满,形成连通域,从而实现与干扰区域的区分。经过膨胀操作后的图像如图6所示。
图6 膨胀处理
3.1.2 连通域分析
对形成连通域的区域进行连通域分析,把图像中的连通域找出并进行标记,是一种比较常用的图像区域提取方法,这里采用二次遍历法。第一遍扫描对图像中像素值相等且位置相邻的前景像素点进行标记,同一个连通域的像素点可能会有一个或者多个不同的标记,记录像素点之间的相等关系;第二遍扫描就是将具有相等关系的不同标记像素点赋予相同的标记值并将其合并得到完整的连通域,从而实现连通域分割。由此可以把不同的连通域标记出来,接下来就可以根据字符区域的特征进行筛选。连通域标记后的效果如图7 所示。
图7 连通域分析
3.1.3 特征提取
把连通域部分进行填充,填充为矩形后可以计算连通域的坐标以及面积,由于喷码字符的区域比较固定,所以设定一个阈值范围,把连通域的坐标和面积特征与阈值进行比较,能够提取出合适的连通域,从而实现字符定位。
3.2 字符分割
在对字符定位后,就可以分割字符。把字符区域内的字符单个地分割出来,常用的方法有投影法和连通域分割法。由于喷码字符具有粘连性,因此单一的分割方法并不适用于喷码字符的分割;由于喷码字符的尺寸都是确定的,所以这里采用二次分割的方法。在第一次连通域分割出字符区域的基础上,对字符区域用等间距分割的方法进行细分割提取出字符,具体是对需要检测图像中的单个字符绘制外接矩形,然后把外接矩形与设定字符的尺寸大小进行对比,以此与原图取交集,分割出粘连字符。步骤如下:
(1)连通域分割。首先对定位好的字符区域进行膨胀操作找出连通域,然后进行连通性分析,对字符进行第一次分割,结果中有的连通域分割并不完全。效果如图8所示。
图8 连通域分割效果图
(2)绘制外接矩形。对第一次分割的图像绘制外接矩形,并计算外接矩形的长,宽以及面积。绘制外接矩形后的效果如图9所示。
图9 外接矩形图
(3)等间距分割。把绘制好的外接矩阵尺寸与设定好的尺寸进行对比,长和宽分别进行对比,若最小外接矩形比设定的矩形尺寸大1.5倍,则进行等间距分割,分割出单个字符。
(4)字符提取。经过二次分割后的图像与原图像对比取一个交集,可获得单个字符区域,然后进行分割。
3.3 字符识别
由于喷码字符的类型比较单一,由字母以及数字组成,因此这里采用简单的模板匹配法来进行字符识别,设立字库,即26个字母和10个数字,把分割好的字符进行归一化,然后与字库中的字符进行比较,就可以得到字符的结果。
模板匹配算法就是在图像中寻找特定的目标,设定一个模板T,遍历图像区域S,看哪些地方与模板相似,若相似度比较高,则找到目标,计算相似性的公式如下:
其中i,j为图片中像素点的坐标,通过逐个像素点的对比,把相似度最高的字符显示出来。
4 实验
4.1 实验平台及数据
本实验的喷码字符图片来源于益海嘉里(郑州)食品工业有限公司采集的面粉包装袋图像,图像样如图10所示。样本数为67,每个图像中包含19个字符,由数字“0-9”,字母“A-Z”组成,操作系统是Windows10,编译器是Visual 2017,开发包包含OpenCV。
图10 样本图像
4.2 实验结果及分析
实验中采取了字符定位、字符分割、字符定位三步进行实验。首先通过图像灰度化、二值化,再进行去噪来处理图像,然后进行膨胀处理,再建立连通域进行连通域分析。根据特征提取出字符位置,然后通过连通域分割与等间距分割的二次分割方法分割出字符。最后进行模板匹配,识别字符。字符分割后效果如图11所示,分割后提取识别结果如图12所示。可以看出准确率为94.8%,误检率为3%,表明此方法对于喷码字符识别比较适用。
图11 字符分割结果
图12 字符识别结果
为了进一步验证本文方法的有效性,实验还与传统的分割方法进行了对比,分别是垂直投影法、连通域分割法、投影二分法。单使用垂直投影法,如果字符粘连则不能分割出字符区域。连通域分割法,由于字符都在一个连通域,因此无法分割出粘连字符对于投影二分法,它根据字符固定宽度,在垂直投影法的基础上进行分割,比单使用垂直投影法效果要好。本文采用分割准确性来对比本文提出的字符分割的方法,具体为正确分割的字符数与图像中字符总数的比值,实验结果对比如图13所示,明显优于其他三种方法,可用于面粉包装袋喷码字符的分割。
图13 不同方法分割准确率比较
5 结论
本文主要研究了对食品包装袋上的喷码字符的分割识别问题,主要研究问题是针对喷码字符的定位及分割问题。本文用了二次分割的方法,首先对图像进行预处理,然后利用连通与特征提取定位字符区域,再进行字符分割。为了解决字符分割不完全的问题,首先根据连通域采用第一次分割,然后根据字符的大小进行第二次细分割,然后根据与原图像对比分割出单个字符。从实验结果可以看出,此种方法的准确率还是比较高的。但是,对于喷码字符的识别研究仍比较少,因此准确率还有很大的提升空间,未来可以引入深度学习,通过深度学习提高字符分割识别的准确率。