复杂场景中机动车行驶证快速检测与识别
2019-05-10林涵阳詹永照陈羽中
林涵阳,詹永照,陈羽中,3
1(江苏大学 计算机科学与通信工程学院,江苏 镇江 212013)2(江苏实达迪美数据处理有限公司,江苏 昆山 215332)3(福州大学 数学与计算机科学学院,福州 350108)
1 引 言
机动车行驶证是车辆管理的主要证件,随着社会信用体系不断完善,行驶证的应用范围不再局限于交通领域,还能作为个人信用凭证,应用到保险、银行等部门.但是传统的人工录入行驶证信息存在效率低、易出错的问题.随着模式识别技术的进步,行驶证的自动识别成为可能,但是直接从图像识别出证件信息仍然面临一系列挑战.首先,拍摄行驶证图像时的光照条件存在巨大差异,容易造成图像偏暗或偏亮的现象产生,给背景分割造成很大困难.其次,拍摄的行驶证图像通常具有一定程度的倾斜、偏移,算法需要确定行驶证的轮廓区域,并进行校正,在校正的过程中,还需要排除拍摄背景和行驶证上覆膜的影响.此外,行驶证上的底纹,在光照偏暗的场景下,易误判为文字边缘,对文字识别准确率就有一定影响.
针对上述问题,本文对机动车行驶证识别算法进行了进一步研究:基于背景校正技术,通过背景模板匹配的区域提取算法对行驶证边缘轮廓的位置进行定位以完成倾斜校正,再使用关键区域的多尺度检测定位算法对校正结果进行正确性评判,再经模板分割以及融合OTSU和自适应局部的二值化算法,得到区域二值化图像,最后通过基于深度神经网络的识别引擎进行识别,得到行驶证中的文本信息.实验结果表明,算法在识别效率以及多角度、复杂背景、不同光照条件的识别鲁棒性等方面具有优势.
2 相关工作
对于证照识别的研究,相关工作可以分为图像预处理、字段分割和文字识别几个方面.
其中,图像预处理一般经过以下的步骤:
1)倾斜校正:主要采用水平投影法、直线统计法、轮廓提取法.水平投影法通过计算图像投影直方图的峰值变化梯度,来估计图像旋转的角度.直线统计法统计边缘图像中各个直线的倾斜角度,来估算整张图像的倾斜角度.轮廓提取法通过目标物体的边缘得到透视变换矩阵,并用该矩阵校正原图像.吴一全等人提出基于投影坐标p次方差及粒子群优化的车牌倾斜检测算法,根据边缘点水平投影纵坐标值的最小p次方差准则确定车牌的倾斜角,并利用改进的带极值扰动的粒子群算法寻找或直接计算最优倾斜角[1].苗立刚提出使用Radon变换统计车牌的倾斜角度,该方法在车牌校正上取得较好的效果[2].
2)二值化:分为全局和局部二值化两种.全局二值化包括最大类间方差法(OTSU)、迭代最佳阈值法等;局部二值化包括Bernsen、Niblack、Taxt等算法.田破荒等人提出的文字二值化算法,通过检测重线获取文字像素关键点,结合启发式规则完成二值化[3].S Milyaev等人针对自然图像中端对端文本的二值化问题,提出基于全局优化框架的二值化方法,提高了OCR识别准确率[4].
3)去噪:常用中值滤波、高斯滤波等方法.Escande P等人提出以变分模型来移除结构噪声,通过分析噪声的相似性信息,具有较好的去噪效果[5].
针对字段分割,一些学者采用最大稳定极值区域(MSER)、笔画宽度变换(SWT)等算法提取文字区域.而对于行分割和版面分析,一般使用水平和垂直投影相结合的方法,适用于已经倾斜校正过的图像中.段露等人为解决问卷图像的版面分析问题,提出一种连通域和神经网络相结合的分析算法,可以准确地识别各种问卷图像中的信息填写区域[6].
文字识别需从连通域分析、字符切割步骤开始,再到字符识别、语义校正,最后得到文字识别结果.Achint Kaur等人使用SVM对字符密度特征进行训练,能较好识别多语言交叉混用文本[7].C.Y.Lee等人提出的循环神经网络模型可对图像中的文字进行提取识别,并取得了较好的效果[8].
3 行驶证识别算法
3.1 行驶证字段区域定位
3.1.1 背景模板匹配的区域提取算法
基于背景模板匹配的区域提取算法通过行驶证图像与模板图像的匹配结果计算透视变换矩阵,利用该矩阵对目标图像进行倾斜校正.常用的特征匹配算法有ORB、SIFT、SURF等,其中SURF算法在图像处理应用中取得较好的效果[9,10].但是通过实验发现,SURF算法应用于行驶证检测时存在检测时间较长、准确率偏低的问题.
针对上述不足,本文提出以FAST算法为核心的改进算法.FAST算法提取特征点的速度快,但存在不能同时生成特征描述子的问题,需要在提取特征点后选取合适的特征描述子进行匹配.行驶证图像中汉字字体的局部梯度特征明显,不同汉字之间梯度变化有所不同,而HOG特征能够描述局部梯度的变化[11],因此本文使用HOG特征作为特征描述子进行特征匹配,算法步骤如下:
步骤1.创建模板图像,模板图像去除了行驶证中各个字段的文字内容,只保留标题和字段标题等行驶证图像共有的部分.
步骤2.利用FAST算法从模板图像获取特征点;根据每个特征点的中心位置,截取16×16像素大小的图像作为HOG计算窗口.如果该区域超过图像的范围,则适当调整区域,保证其包含在图像范围内,调整过程中该区域一直保持16×16像素的大小.设置HOG特征参数,对该区域进行HOG特征提取,得到HOG特征向量.组合所有特征向量,得到特征矩阵,即特征描述子.
步骤3.利用FAST算法提取目标图像的特征点及特征描述子.
步骤4.将模板图像和目标图像的特征描述子输入到FlannBasedMatcher匹配器中,得到匹配结果,统计匹配结果中欧式距离的最小值dmin,遍历匹配结果,若当前匹配的欧氏距离di满足di≤λdmin,则将当前匹配结果放入最佳匹配集合中.
步骤5.根据最佳匹配集合,进行透视变换估计,得到透视变换矩阵.估计过程使用随机采样算法(Random Sample Consensus,RANSAC)[12]找到最佳单应性矩阵,提升匹配精度.
步骤6.使用透视变换矩阵对目标图像进行变换,得到正对的行驶证图像.
上述特征提取算法的具体实现如算法1所示:
算法1.FAST+HOG的特征提取算法输入:行驶证图像I,FAST的阈值τ,HOG窗口大小s,块元大小b,块滑动距离t,胞元大小c;1)Igray=0.299IR+0.587IG+0.114IB2)M=FAST(Igray, τ)3)mat=[]4)for m in M {5) roi=rect(m.x-s.width/2, m.y-s.height/2, s.width,s.height)6) if roi.x<0 {roi.x=0}7) if roi.br.x≥I.width {roi.x -= roi.br.x - I.width + 1}8) if roi.y<0 {roi.y=0}9) if roi.br.y≥I.height {roi.y -= roi.br.y - I.height + 1}10)feature=HOG(roi,b,t,c)11)mat.append(feature)12)}13)return [M, mat]输出:特征点集合M及其描述子矩阵mat
其中,Igray表示使用常规灰度化方法得到的灰度图像,FAST函数的参数为灰度图像和阈值,输出为特征点集合M.遍历M中的每个特征点m,根据该点坐标和HOG窗口大小计算得到感兴趣区域roi,并对roi进行调整,防止其大小超出图像边界.HOG函数的参数为感兴趣区域和其他三个HOG参数,返回感兴趣区域的HOG特征描述值向量feature,feature将添加到特征矩阵mat中.
本文提出的区域提取算法不依赖于边缘分析,可以克服行驶证图像存在的边缘不连续、多边缘干扰的问题.同时,该算法不需要亮度信息,对光照不均匀的情况也具有一定的适应性.此外,由于特征匹配考虑的是全局特征,局部光照的剧烈变化对算法不会产生影响,对光照具有良好的鲁棒性.
3.1.2 字段分割模板微调
理想情况下,经过倾斜校正后的行驶证图像,各个字段的位置均处于图像中的某个固定位置,可以直接对各个字段进行模板分割.如图1(a)所示,矩形框表示定位到的行驶证字段的区域,可以看出每个字段对应的矩形的顶点坐标是相对固定的,只需要提取该区域内的图像,就能得到行驶证各个字段对应的内容.但是在实际应用中,行驶证图像中的字段位置常存在较严重的偏差,需要对模板进行微调.微调算法步骤如下:
步骤1.取行驶证中的第一个区域“号牌号码”字段作为参照对象,对其进行二值化,得到二值化图像.
步骤2.累计图像中各行的像素点值为0的像素个数,得到一个向量.
步骤3.对于向量的每一行ri,若ri>τ,则标记ri为文字的开始行,跳转到步骤4,否则继续遍历下一行.
步骤4.若i≥h/2(h为区域高度),说明字段位置整体偏下,将模板整体向下移动φ(i-h/2),再进行字段的分割提取.
图1(b)展示了字段存在偏差的行驶证图像及字段分割模板微调的过程.观察“号牌号码”字段,如果按照固定的坐标进行分割提取,将得到偏上的矩形,该矩形的下边缘穿过号牌号码的内容,说明该分割并不准确,需要进行微调操作.根据上述算法,其i值大于h/2,也就是说分割区域中至多h/2高度的内容是文字,其余都是无关的内容,同时也说明了其正确的分割区域应该在偏下的位置.所以将所有的模板矩形的顶点坐标向下偏移一定长度,例如“号牌号码”字段偏上的矩形移动到偏下的矩形的位置.经过微调后的矩形完整包含了文字内容,都能做到准确的分割.
图1 字段分割模版微调Fig.1 Template fine adjustment
3.1.3 关键区域的多尺度检测定位算法
从上述区域提取算法获得的校正结果,需要进行校正准确性评估.本文提出一种关键区域的多尺度检测定位算法,通过检测关键区域是否存在来判断校正是否准确.
由于行驶证标题和各个字段的标题不会发生变化,可以通过检测这些区域的相对位置确定校正是否正确.这些区域就称为行驶证检测的关键区域.如图2中的四个文字区域所示,设定关键区域为行驶证标题中“华”、“证”两字以及“品牌型号”、“发证日期”两个字段标题.这四个位置分别确定了行驶证的上下左右部分,还可以根据“品牌型号”这个中间位置,对行驶证字段分割做进一步微调,得到正确的分割.该算法不依赖于行驶证的轮廓确定字段的相对位置,对倾斜和光照不均匀的图像也能检测出关键区域的位置.算法具体步骤如下:
步骤1.采集各个区域的正负样本,构成训练样本库.
步骤2.计算训练图像的HOG特征,生成HOG特征矩阵,使用SVM进行学习,得到HOG检测器[13].
步骤3.对于各关键区域,对原始图像进行感兴趣区域分割,以减小HOG的扫描范围,避免为了检测单个关键区域而遍历完整图像,降低检测时间.感兴趣区域分割如图2中的矩形区域所示.
步骤4.在缩小范围的区域中,对关键区域进行多尺度检测.多尺度检测使用滑动窗口,通过设置合理的窗口大小,能提高检测的性能和准确率.本文算法根据不同关键区域的情况,通过实验设置合理的窗口大小以及滑动间距.多尺度检测对窗口内的图像进行多个比率的缩放,对各个尺度的图像进行适应性检测,从而解决不同图像中关键区域大小不一致的问题.
本文的关键区域多尺度检测定位算法不依赖于行驶证的轮廓,对于行驶证图片边缘缺失的情况也可以正常定位.多尺度检测则解决了拍摄的行驶证偏小或偏大的特殊情况下对关键区域的检测问题,保证了检测的正确性.
图2 关键区域检测Fig.2 Key area detection
3.2 融合OTSU和自适应局部的二值化算法
完成行驶证字段分割后,需要对字段区域进行二值化操作,只保留文字信息用于文字识别.由于行驶证图片背景存在底纹,常用的二值化算法难以满足要求[14,15].本文根据融合二值化[16]的思路,提出了结合OTSU和自适应局部的二值化算法.
通过分析OTSU的实验结果发现,利用OTSU进行二值化,保留的像素点较多,容易产生笔划粘连.对于某些文字区域,利用OTSU对该区域的灰度图像进行二值化的效果较差,但使用RGB颜色空间下的G通道的灰度化图像,则能取得不错的效果.同样的情况,也会发生在HLS颜色空间下L通道和LAB颜色空间下的L通道,说明使用不同的灰度化方法,对于OTSU算法有着较大的影响.
与OTSU算法的实验结果相比,自适应局部算法保留的像素点较少,但易产生笔划缺失.自适应局部算法对参数阈值较敏感,包括邻域大小b以及阈值偏移量C,且难以在保留文字细节的同时降低背景噪声.
为达到既过滤大部分背景信息,又同时保留文字细节的目标,本文融合OTSU和自适应局部算法,以二者在不同通道或参数下的二值图像为基础,以统计得分的方式生成新的二值图像.算法先利用自适应局部算法去除大部分背景像素点,但该过程会丢失文字的细节,为了减少文字细节的缺失,再使用OTSU进行二值化,并通过设置两种算法的权重,使OTSU算法带来的背景信息受到自适应局部算法的抑制,获得更好的二值化效果.算法步骤如下:
步骤1.利用OTSU算法,对常规灰度化图像、RGB颜色空间的G通道、HLS颜色空间的L通道、LAB颜色空间的L通道以及黑帽操作后的图像进行二值化,得到二值化图像I1~I5.
步骤2.利用自适应局部算法,使用三组不同的参数对HLS颜色空间的L通道进行二值化,得到二值化图像I6~I8.
步骤3.设置I1~I8的权重系数为{w1,w2,…,w8}.对于图像中的一个像素点fx,y,计算其目标分值Sx,y,公式如下:
(1)
(2)
目标分值表示fx,y为目标像素点的可能性,分值越高,该像素点越有可能就是文字,反之该像素点越可能是背景像素.
步骤4.设定阈值τ,若Sx,y≥τ,将fx,y标记为目标像素点,灰度值设置为0.否则将fx,y标记为背景像素点,灰度值设置为255.得到新的二值化图像I′.
上述二值化算法的具体实现如算法2所示.
算法2.融合OTSU和自适应局部的二值化算法输入:行驶证图像I,黑帽操作迭代次数n,自适应局部算法的邻域大小[b1,b2,b3],阈值偏移量[C1,C2,C3],二值权重[w1,w2,…,w8],得分阈值τ;1)I1=OTSU(GRAY(IR,IG,IB)); I2=OTSU(IG)2)I3=OTSU(HLS(I)[′L′]); I4=OTSU(LAB(I)[′L′])3)I5=OTSU(Blackhat(I,n)); I6=AL(HLS(I)[′L′],b1,C1)4)I7=AL(HLS(I)[′L′],b2,C2); I8=AL(HLS(I)[′L′],b3,C3)5)Ib=zeros(I.width,I.height)6)for i in I {7) score=08) for index=1 to 8 {9) sign=Iindex(i.x,i.y)==0?1:-110) score+=sign∗windex11) }12) if score≥τ{Ib(x,y)=0}13) else {Ib(x,y)=255}14)} 15)return Ib输出:二值图像Ib
其中,GRAY函数表示常规灰度化处理.HLS函数表示对原图像进行RGB到HLS颜色空间的转换,其索引值表示某个通道.同理,LAB函数表示RGB到LAB颜色空间的转换.OTSU和AL函数分别表示OTSU和局部二值化算法.算法遍历二值图像I1~I8,根据OTSU和局部二值化两种算法的二值化结果计算每个像素点的分值,根据分值标记为目标像素点或背景像素点,产生新的二值图像Ib.
3.3 行驶证文字识别
本文使用Tesseract文字识别引擎进行字段内容识别.由于本文主要解决行驶证检测定位以及区域二值化问题,因此未对文字识别做进一步优化.
4 实 验
本文所有实验均使用Intel Pentium CPU G3260@3.30GHz.由于行驶证属于个人隐私数据,目前没有公共测试数据集,本文利用收集的行驶证图像构建测试集.
4.1 背景模板匹配算法实验
本节实验将760张的行驶证图片随机分为10组测试集,每组76张图片,比较本文提出的结合FAST算法和HOG特征的匹配算法与SURF算法的性能,实验结果如表1所示,本文算法简写为HF.
表1 特征匹配算法实验结果
Table 1 Experimental results of feature matching algorithms
分组透视变换准确率(%)字段分割准确率(%)平均运行时间(s)SURFHFSURFSURFHFSURF178.9594.7475.3293.261.630.59282.8992.1180.5490.381.720.61390.7998.6888.9797.851.660.64481.5896.0579.6695.331.620.64582.8992.1180.8290.261.620.57678.9592.1175.7391.061.750.62776.3297.3774.2596.351.790.60881.5894.7478.2694.131.650.62984.2192.1182.1991.641.750.591086.8496.0584.2895.271.730.63Avg82.5094.6180.0093.551.690.61
从表1可以看出,本文方法的透视变换准确率明显高于SURF算法,平均准确率提高约12%,且运行时间比SURF减少约63%.原因在于HOG特征为梯度特征,更适合描述文字内容;且FAST算法的提取效率高于SURF算法,计算HOG特征也快于SURF的特征生成方法.因此,本文算法能够获得优于SURF算法的变换准确率和运行性能.
图3(a)-图3(b)显示了行驶证图像较完整时透视变换的结果.图3(a)为透视变换前图像,图3(b)为透视变换后图像.可以看出,原来向里倾斜的行驶证图像经过透视变换后,变为正对的行驶证图像,从标题和“住址”字段等内容可以看出倾斜校正的效果良好.
图3(c)-图3(d)显示了行驶证图像中字段标题存在缺失时透视变换的结果.图3(c)中,“号牌号码”、“所有人”等字段标题均有较多缺失,而图3(d)为采用本文算法进行匹配和透视变换后的结果.可以看出,本文算法仍可以完成倾斜校正.原因在于本文算法不依赖于局部的特征点,全局的特征点也能反映行驶证的区域位置,在部分局部特征点无法提取的情况下,通过全局特征点的匹配来弥补局部特征点的缺失,保证透视变换的正确进行.
图3 透视变换和字段分割实验结果Fig.3 Results of perspective transform and field segmentation
图3(e)-图3(f)显示了行驶证图像的背景中包含文字的情况下透视变换的结果.图3(e)中行驶证图像的背景包含文字,算法可能提取这部分区域的特征点,在特征点匹配时易造成错误匹配,而对透视变换结果产生影响.但图3(f)证明本文算法仍能够正确地定位到行驶证的轮廓.原因同样在于算法考虑的是全局特征点,部分局部特征点的错误匹配不会影响整体的定位校正结果.
图3(g)-图3(h)为图3(d)的字段模板定位结果,图中矩形框表示分割的字段区域,可以看出,各个字段均被准确分割,验证了透视变换的正确性,也反映了特征匹配方法的准确性.此外,注意到图3(g)的行驶证图像在透视变换后,左侧出现较大的黑色区域,原因在于行驶证图像在拍摄时左侧区域存在缺失,透视变换本身无法填补缺失区域的信息,但这种情况不会影响对字段的分割.
综合上述实验结果可以看出,本文算法根据全局的特征点计算透视变换矩阵,能够很好地处理局部特征点缺失或者局部特征点错误匹配的情况,具有较好的鲁棒性.
4.2 关键区域检测算法实验
本节实验使用280张行驶证图片,测试关键区域的多尺度检测定位算法的各项性能.测试结果如表2所示.“品牌型号”关键区域准确率较低,由于“品牌型号”所在的感兴趣区域中,文字内容较多,对于HOG检测,容易产生错误的判断,而其他三个区域因文字内容较少,所以准确率均较高.而“品牌型号”关键区域的检测时间较长也与其所在的感兴趣区域范围较大有关.
表2 关键区域多尺度检测定位算法测试结果
Table 2 Results of multi-scale key area detection algorithm
关键区域检测率(%)准确率(%)平均检测时间(s)“华”95.3695.130.16“证”96.4397.410.19“品牌型号”94.6489.060.65“发证日期”97.1495.220.26四个区域92.5089.181.26
图4(a)为行驶证图像色调有较大偏差时的关键区域检测结果.可以看出,算法能够准确定位四个关键区域.原因在于算法考虑梯度因素,对图像色调变化有一定适应能力,对于光照偏暗或偏亮的图片也能较好地完成检测.图4(b)为行驶证图像有一定角度歪斜时的关键区域检测结果,造成歪斜的原因是拍摄时证件左半部分向里倾斜.由于算法是在感兴趣区域内对关键区域进行检测,倾斜的情况对于感兴趣区域以及关键区域都不会造成很大的影响.所以仍然能够准确定位四个关键区域,说明算法能够处理内容倾斜的行驶证图像.
图4 色调偏差和倾斜图像中的关键区域检测结果Fig.4 Results of key area detection in image with hue deviation and skew image
4.3 二值化算法实验
本节实验使用50张行驶证图片,共500个字段区域,对三种二值化算法进行对比测试,并将二值化后文字清晰、笔划无缺失粘连、无较多背景噪声的图像归为良好一类,将背景噪声较多的图像归为一类,将笔划缺失的图像归为一类,分别统计三种二值化算法处理后的图像类别比例.实验结果如表3所示.从表3可以看出,本文算法能获得更好的二值化效果,其中良好区域数量所占比例提升约30%.产生的二值化图像的背景噪声较少,笔划细节保留更加完整,有利于提升文字识别精度.
图5(a)-图5(d)为三种二值化算法对行驶证字段区域进行二值化的结果.对比三种二值化算法的结果可以看出,本文算法处理后的二值化图像中各个字段区域的文字内容笔划清晰,粘连现象几乎不存在,而笔划缺失的情况也得到较好弥补,相比OTSU和局部适应算法,本文算法在保留文字细节和过滤背景噪声上具有较大的优势.
图5 区域二值化结果Fig.5 Result of region binarization
图6(a)-图6(c)为三种二值化算法对单个地址字段区域进行二值化的结果,正确的文字内容为“重庆市大足县回龙镇永兴村4组”.从图6可以看出,OTSU算法产生的二值化图像存在较大的背景噪声,“重庆市”三字完全不能辨识,而其他字如“足”、“回”、“镇”存在笔划粘连的现象,会对文字识别产生较大不利影响;自适应局部算法产生的二值化图像背景噪声较少,但“重”、“镇”等字笔划存在缺失现象,文字的笔划整体偏细,也会影响文字识别;本文算法产生的二值图像,则几乎不存在背景噪声,“重”、“镇”等字缺失的笔划也得到补偿,文字的笔划整体较粗,更接近正常的文字,在进行文字识别时,特征点也会更加明显,更有利于文字识别.此外,由于本文算法进行多次二值化操作,比单次操作更能适应亮度值的强烈变化,对光照不均匀的图像也能正常进行处理,生成较好的二值化图像.
图6 地址字段二值化结果Fig.6 Binary images of address field
表3 三种二值化算法的测试结果
Table 3 Result of three binarization methods
二值化方法背景噪声较多的区域数量笔划缺失较多的区域数量二值化良好的区域数量OTSU算法15972256自适应局部算法86143263本文算法2642406
5 总 结
本文提出了一种基于复杂场景的机动车行驶证快速检测与识别算法.针对行驶证图片存在的背景复杂、角度倾斜的问题,利用FAST算法和HOG特征高效地提取特征点并进行特征匹配,从而计算透视变换对原始图像进行校正;之后使用关键区域的多尺度检测定位算法对校正结果进行正确性评判,避免错误的校正结果对后续识别的影响;针对光照不均和背景底纹问题,提出融合OTSU和自适应局部算法的二值化算法,解决光照和底纹影响以及文字笔划粘连缺失的问题.实验结果证明算法在性能、识别准确率和鲁棒性等方面具有优势,达到实用性的标准.今后将针对更为复杂的拍摄场景进行进一步优化.