APP下载

基于改进的CNN 的啤酒瓶盖字符识别

2020-09-30王炳琪吴则举

关键词:字符识别啤酒瓶字符

王炳琪,吴则举

(青岛理工大学信息与控制工程学院,青岛266520)

随着人们生活质量的提高,食品和饮品质量安全越来越被重视,而人们最关注的便是其生产日期[1],所以产品生产日期等标识的识别将是质检的重要一环。本文中啤酒瓶盖的识别来自于某啤酒生产厂家的实际需求,啤酒在大批量生产中采用人工识别与记录,工作量极大,浪费人力物力,所以基于光学字符识别技术的啤酒瓶盖字符识别将是解决这一问题的有效方法。光学字符识别(Optical character recognition,OCR)是通过数字化图像处理的手段,进行文字检测与识别的技术。OCR 技术起源于1929年,由德国科学家Tausheck正式提出并取得专利。1951年,第一台电子计算机的诞生使OCR 理论变成现实[2]。1965年,IBM 公司展出的光学字符识别产品使OCR 技术得到了实际运用。Guillevic等[3]结合了K 临近算法[4]与隐马尔科夫模型[5]对单词进行识别,算法较为简单,识别率差强人意。Li等[6]设计了一种自然场景中的车牌识别算法,利用9层神经网络进行快速检测,4层神经网络进行准确识别,该方法缺点在于检测速度慢,无法达到实时性的要求。Shi等[7]提出了一种将卷积神经网络(CNN)与递归神经网络(RNN)相结合的卷积递归神经网络(CRNN),该网络将特征提取、序列建模和识别集成到统一框架中,但是其网络结构复杂,难以实现。为解决上述问题,本文通过U-Net语义分割网络对字符区域进行快速定位,再经过二值化、旋转矫正和字符分割过程提取出清晰的单个字符,最后利用加入批标准化(Batch Normalization,BN)生成的改进的卷积神经网络对字符进行识别。本文算法在保证识别率的前提下满足了实时性要求,具有一定的工程应用价值。

1 提出的方法

啤酒瓶盖的喷码图像如图1所示,由于环境光复杂,瓶盖边缘出现反光现象,产生高亮圆环,且不同生产线环境光差异较大造成瓶盖图像明暗不一。不同批次产品底纹存在差别,提升了底纹滤除的复杂度。除此之外,生产中字符区域存在偏转,字符间存在粘连现象。因此本文旨在设计一种准确高效的算法对啤酒瓶盖中的字符进行识别。

本文的方法流程,如图2所示。首先运用U-Net语义分割网络对字符位置进行定位,然后利用基于迭代的最佳阈值获取方法确定每幅图像的最佳阈值,对图像进行二值化操作,滤除底纹。应用几何原理对字符区域旋转矫正。使用投影法和轮廓法相结合的方法分割字符,对粘连字符也有很好的分割效果。最后使用改进的卷积神经网络对字符进行识别,识别正确率满足本文要求且训练时间更短。

1.1 U-Net语义分割网络

U-Net[8]发展于全卷积网络(Full convolutional network,FCN)[9]之上,是一个语义分割网络,由一个收缩路径和一个拓展路径组成。其中收缩路径用于获取图像信息,扩展路径用于实现精确定位,由于网络结构类似于大写的字母U 而得名U-Net。如图3所示,收缩路径包括两个重复的3×3卷积,每个卷积后面跟一个整流线性单元(Re LU)以及一个2×2最大池化操作,而扩展路径的每一步都包括对特征图进行上采样,然后进行2×2卷积,将特征通道数减半,与来自收缩路径的特征图串联。

U-Net语义分割网络被应用在医学图像处理行业中,分割出物体的轮廓,处理的图像是单通道图像,具有训练集数量要求较少、分割速度快的优点。所以U-Net非常适合在啤酒自动化生产线这种实时性要求很高的环境下应用,本文使用该网络对字符区域进行定位。

1.2 图像二值化

字符定位后的灰度图像经二值化操作后可以去除底纹,得到字符的二值化图像。由于不同生产批次的瓶盖底纹不同,以及不同生产线的光照环境不同,导致每一个瓶盖图像进行二值化操作时的阈值存在区别,本文将采用迭代法确定每一幅瓶盖图像的最佳阈值。迭代法基于逼近思想,能够根据每一幅图像的灰度值分布逼近一个最佳的阈值。所得的阈值能够更容易区分图像的前景和背景,可以很好地去除底纹。本文图像二值化过程为:

步骤一:设定图像灰度值的中值作为初始的阈值记为T0,利用初始阈值T0将图像分为灰度值大于T0的部分和小于等于T0的部分,分别记为A1和A2;

步骤二:分别计算A1和A2两部分的归一化灰度直方图和归一化累计直方图,分别记为h(t)和H(t) ,可以表示为

其中,t和t′都表示像素的灰度级,n (t) 表示灰度级为t的像素点的个数,M 和N 分别代表图像像素的行数和列数。

步骤三:利用式(1)和式(2)分别计算出A1和A2两部分灰度值的均值,分别表示为X1和X2

步骤四:通过X1和X2计算更新的阈值为

步骤五:计算T1和T0的差值,若小于某一定值,T0便是最终的阈值,若大于等于这一定值则重复步骤二到步骤四,直到输出符合要求的最佳阈值。

1.3 字符旋转

本文中利用最小外接矩形来辅助计算,使用几何原理寻找字符区域的旋转中心、确定旋转角度。最小外接矩形的中心点 (x0,y0) ,即为字符区域的旋转中心

其中,X、Y 分别为最小外接矩形的横纵坐标。

确定旋转中心后,需要确定旋转角度。啤酒从瓶盖喷码完成到采集系统拍照之前在自动化生产线中传送时会产生小角度的自旋转,字符区域出现顺时针或者逆时针的偏转,偏转角度在 (- 90°,90°) 范围内。本文选取外接矩形的长边为参考线,矩形的长边与x 轴之间的夹角即为字符区域的偏转角度,计算过程如下:

步骤一:按顺序选取最小外接矩形的相邻三个顶点,假设记为 (x1,y1) ,(x2,y2) ,(x3,y3) ;

步骤二:分别计算 (x1,y1) 和 (x2,y2) 以及 (x2,y2) 和 (x3,y3) 间的欧氏距离,并选取欧式距离较大的两个顶点即矩形长边顶点作为参考点,假设为 (x1,y1) 和 (x2,y2) ;

步骤三:通过 (x1,y1) 和 (x2,y2) 判断旋转方向和旋转角度,分为a)、b)、c)、d)、e)五种情况:

a)当y1>y2且x1>x2,字符存在顺时针偏转,偏转角度为θ=

b)当y1>y2且x1<x2,字符存在逆时针偏转,偏转角度为θ=

c)当y1<y2且x1>x2,字符存在逆时针偏转,偏转角度为θ=

d)当y1<y2且x1<x2,字符存在顺时针偏转,偏转角度为θ=

e)当y1=y2,字符不存在偏转。

确定旋转中心、偏转方向和偏转角度后,令字符区域绕旋转中心反向旋转特定角度后便可获得矫正后的字符图像。

1.4 字符分割

本文的字符分割算法的流程图如图4所示。本文数据中,每幅图像中的字符为2×8排列,共计16个字符。因此首先将字符区域分割为上下两排,对图像求竖直方向上的投影,每一行像素的灰度值之和为S(i),其中i为行序号,取一阈值Z0

利用Z0对图像进行逐行分割,找出符合条件的行数i

在第i行处进行上下切分,完成竖直方向上的行切割,然后分别对每一排字符进行单个字符的分割。

由于水平方向上相邻两个字符间存在着字符粘连的情况,本文提出了一种投影法和轮廓法相结合的字符分割算法,能准确分割出无粘连图像与粘连图像。首先对图像求水平方向的投影,每一列像素的灰度值之和记为S′(j),其中j为列序号。为了能够准确的寻找到分割点,本文将设定一个阈值Z1,令

此时S(j)=1的左右边界便是分割点的左右边界,分别记为L和R,可以根据左右边界确定精确的分割点,分割点的列序号记为F,表示为

每排有8个字符,如果字符间存在粘连,根据投影法计算出的分割点个数就会少于7个,这时需要根据轮廓法对粘连字符进行分割。

本文对字符上轮廓进行检测,与投影法寻找分割点的方式相似,寻找一个合适的阈值Z1对轮廓函数大于阈值的部分置0,小于阈值的部分置1,再寻找出函数值为1的左右边界,最后根据左右边界值确定精准的分割点,依据分割点就可以分割出相邻两个粘连的字符。

1.5 改进的CNN 识别网络

字符识别的卷积神经网络(CNN)共有7层结构,如图5所示,其中C1为卷积层,有6个大小为5×5的卷积核;S2是池化层,有6个大小为2×2的池化窗口;C3为卷积层,有16个大小为5×5的卷积核;S4是池化层,有16个大小为2×2的池化窗口;C5为卷积层,有120个大小为5×5的卷积核;F6为全连接层。

为了减少训练时间,加快训练速度,本文在C1和C3后加入批标准化(Batch Normalization,BN),得到改进的CNN 识别网络。其通过减少数据内部协变量的变化,减轻深层学习模型训练的问题,可以使用较大的学习率来训练网络,提高网络的泛化能力。在卷积神经网络中,输入通道数为N的卷积滤波器的响应y

其中,w i是第i个输入通道中的权重矩阵,x i是第i个输入通道的输入,b表示偏移。当加入BN 层后,b被替换为BN 层中的β移位因子。BN 层

其中,μ是均值,σ2是方差,ε是数值稳定系数,γ是比例因子,β是小批量和每个输入通道上计算的偏移量,是多通道卷积的响应,是BN 层输出。

2 实验与分析

2.1 U-Net字符区域分割

由于啤酒瓶盖底纹不同、光线强度不统一、喷码位置不同等原因,使字符难以定位,本文使用U-Net语义分割网络对字符区域进行分割。该网络训练集由图像注释工具Labelme[10]得到,如图6所示。图6(b)中,黑色部分表示本文需要分割的字符区域。

U-Net语义分割网络具有训练集数量少、分割速度快的优点,测试结果如图7所示。对于不同情况下的图像,U-Net都得到了很好的图像分割效果。该网络参数如表1所示。

表1 U-Net参数

2.2 图像处理过程

根据U-net字符定位结果,分割出的字符区域,如图8所示。除字符区域外其它冗余信息全部滤除,降低了二值化运算的复杂度,经过二值化处理的结果如图9所示,底纹滤除完全且字符细节保留完整。

由于啤酒在喷码完成到图像采集过程中出现了顺时针或者逆时针的小角度旋转,图像采集时字符区域出现整体偏转,而字符区域的偏转增加了字符分割的难度,所以在进行字符分割前需对图像中字符区域进行旋转矫正。根据字符区域确定最小外接矩形,应用几何法确定旋转中心和旋转角度,如图10(a)所示。利用图像旋转算法进行旋转矫正,结果如图10(b)所示。

在旋转矫正完成后利用最小外接矩形进行切割,彻底分离出字符区域。本文数据字符为2×8排列,字符分割过程可分为行分割和列分割。根据竖直投影法对上下两排字符进行分割,分割结果如图11所示。

进行列分割时,需要判断字符是否存在粘连。不存在字符粘连时利用水平投影的方式进行分割。首先利用阈值确定水平投影函数波谷,然后确定波谷的左右边界,即分割点的左右边界,如图12(a)所示,圆点和菱形分别代表分割点的左右边界,利用左右边界得到准确的分割点,即可完成水平方向上的字符分割。如果存在字符粘连则需利用轮廓法进行分割,后续分割过程与无粘连图像基本相同,通过左右边界确定准确分割点,如图12(b)所示。根据得到的分割点对字符进行分割结果如图13所示,可以分割出清晰的单个字符,符合识别网络的要求。

2.3 改进的CNN 字符识别

本文利用加入BN 的改进的CNN 对字符进行识别,当损失函数值下降且趋于0 时表示网络收敛。CNN 的loss曲线如图14(a)所示,存在震荡现象,而改进的CNN 的loss曲线平稳,如图14(b)所示。可以看出,改进的卷积神经网络收敛更快,只需迭代80次,提高了训练速度。

改进的CNN 的识别正确率如表2所示,单个字符的识别正确率为98%左右。

表2 改进的CNN 字符识别精度

结合本文所有处理过程,对500幅啤酒瓶盖图像进行字符识别,经统计,其正确检测率达97%,平均检测一副图像只需0.8秒,可以达到工程中精度和实时性的要求。

3 结论

本文解决了位于啤酒瓶盖上的字符识别问题。首先使用U-Net语义分割网络对字符区域进行定位提取,该网络对目标区域的定位精确。利用基于迭代的二值化方法滤除底纹,应用几何原理对字符区域旋转矫正,然后通过投影法与轮廓法相结合的分割算法对图像进行单个字符的分割,分割结果清晰,符合识别网络的要求。最后使用卷积神经网络对字符进行识别,加入BN 层得到的改进的CNN 以提升网络性能,加快训练速度,得到了理想的识别率。实验表明,本文算法对啤酒瓶盖图像的识别正确率达97%,平均识别一幅图像仅需0.8秒,充分满足工程应用中的要求。

猜你喜欢

字符识别啤酒瓶字符
一种优化的手写字符自动分割算法
论高级用字阶段汉字系统选择字符的几个原则
字符代表几
图片轻松变身ASCⅡ艺术画
会喘气的硬币
融合字符及字符排列特征的铭牌识别方法
一种基于OpenCV的车牌识别方法
基于MATLAB的图片中字符的分割与识别
恼人的啤酒瓶盖
换啤酒