基于机器学习的多车牌识别算法应用研究
2018-06-20郑顾平闫勃勃
郑顾平,闫勃勃,李 刚
(华北电力大学 控制与计算机工程学院,河北 保定 071000)
0 引 言
智能交通已经成为生活中必不可少的部分,同时智能小区也成为必然趋势。随着生活质量的提高,汽车已经成为每家每户的必备品。在这个时代,车牌识别系统扮演着越来越重要的角色[1]。公路上超速车辆检测、小区车辆出入管理、停车场管理等都需要车牌识别系统的辅助,也是智能化必不可少的部分。车牌识别发展到现在已经出现了各种各样的算法,并且很多车牌识别系统都号称达到了99%的识别率,事实上这些系统与高清的摄像头做了整合,只是依靠高清的摄像头拍下的图片才达到了很高的识别率。而真正的业内并没有一套成熟的完全适用的方案。如果图片只是生活中随机拍下的,或者在现实中复杂的环境下获取的,那么很多系统的识别率就没那么高了,更比不了人眼。一般的车牌识别系统都由图片预处理、车牌定位、字符分割、字符识别四部分组成,每个部分都是下一个部分的基石。每一部分选择的算法及优化都会影响甚至决定整个系统的识别率。文中利用机器学习对车牌识别进行研究,使用机器学习的思想让系统自动训练,得到适合特定情境下的车牌识别,从而随着不断学习而得到更高的识别率。
1 图像去雾预处理
雾霾天气已经是现在生活中不可抗拒的因素了,采集到的图片在一定程度上都会受其影响。这就要求对图片进行去雾处理,解决因为雾霾天气而使系统识别率下降的问题。文中先用雾霾检测算法对图片进行检测,接着对雾霾环境下拍摄的图片进行处理。采集图像频域信息,采用基于主成分分析(principal component analysis,PCA)和Fisher线性判别分析(linear discriminant analysis,LDA)的分类器,快速检测出图片中是否存在雾霾,然后针对雾霆天气拍摄的图像利用暗原色先验方法进行去雾处理[2]。
采用文献[3]基于PCA和LDA的雾霆检测,PCA和LDA方法常被用于人脸图像识别,而文中用于图像的雾霾检测。雾霾会使图像变得模糊,采用文献[1]提出的方法对图像进行滤波处理,分析图像的功率谱,存在雾霾的图片的频谱在原点附近集中,也就是低频分量较多,正常天气的图片较为发散。对于存在雾霾的图片采用基于暗原色先验[4]去雾处理,采用引导滤波器[5]对透射率进行修正。引导滤波器能够在滤波的同时清晰地保留原图的边缘信息,是一种平滑算子。
实验结果表明,去雾检测耗时只是去雾处理算法的1/7左右,也就说明去雾处理可以一定程度上提高雾霾天气下的车牌识别的准确性,同时还基本不影响车牌识别在正常图片上的识别速度。
2 车牌定位与检测
车牌定位的目的就是找到图像中车牌的所在,是车牌识别系统中的关键。主要思路是寻找车牌中的垂直边缘,这些垂直边缘往往是由车牌字符造成的,加上基于颜色进行定位,就会有很高的定位率。
2.1 灰度化
为了进行垂直边缘检测,先用合适的高斯模糊半径对图像去噪。接下来,需要对图片进行灰度化。OpenCV库中存在现有的灰度化函数,利用灰度化函数对图像进行灰度化,图像像素用0~255表示。
2.2 垂直边缘检测
系统中车牌垂直边缘检测采用Sobel算子,就是对图片求横向与纵向的方向导数,然后根据导数值大于某一阈值来判定为边缘,对车牌块进行一个定位。在上一步的基础上应用Sobel算子,找出垂直边缘,初步对车牌进行定位。
2.3 二值化
图像的像素只用0和1表示,只需要设置一个阈值就可以进行二值化,这样图像像素点只有两个值,对于后面的操作更加方便。二值化后可以看到很多空洞没有连成整体的连通图,接下来要进行形态学处理。
2.4 形态学处理
形态学处理就是对图像中的形态进行一定的改变,操作对象是二值化后的图像。文中就要用到形态学操作中的闭操作,所谓闭运算就是对图像先膨胀,再腐蚀,从而获得一个无突起的连通域[6]。
使用闭运算可以使二值化后的图片中的小白块连接到一起,这样车牌上字符形成的小白块就会形成一个车牌的大致轮廓。因此,首先对二值化图片进行膨胀使白色块扩大,然后通过腐蚀操作将连通域的边缘和突起进行削平,最后得到一个无突起的连通图。对二值化后图像进行闭运算后,可以看出完整车牌区域。
2.5 颜色定位
前面已经介绍了Sobel查找垂直边缘来进行车牌定位,虽然效果不错,但在面对一些车型前面有交叉的垂直边缘的时候,使用Sobel就无法准确地定位出车牌。为了解决这些车型的车牌定位问题,考虑使用颜色进行定位。车牌的颜色可以说是单一的,再和Sobel定位相结合,定位率直接由75%提高到95%。颜色定位将会使用HSV模型[7]并设定阈值进行判断,颜色定位的过程如下:
(1)拍摄的图像的颜色空间为RGB,需要将图片转变成HSV模型,考虑到光照,用直方图均衡对图片进行预处理。
(2)对图像所有像素进行0、1标识,即进行二值化。遍历图像上所有像素,当像素S值与V值在0.4~1.0之间,且H值在200~280之间,标记0,否则为1。
(3)对于第二步得到的二值化图像按照车牌定位的步骤和方法,先进行闭操作,然后取轮廓将车牌的外接矩形截取出来做进一步处理。
2.6 SVM车牌检测
候选车牌将会出现很多,而下一步就是将这些图片依次放到SVM模型中,由训练好的SVM模型检测是否为车牌[8]。如此过程,就会筛选出图片中的车牌,然后放入一个列表等待下一步处理,过程如图1所示。
图1 SVM模型检测结果
简单来说,通过一批候选车牌进行SVM训练,人工标识候选车牌的真假,然后生成一个XML文件的模型。SVM训练过程如图2所示。
图2 SVM模型训练过程
模型的好坏都需要一个评定标准,下面阐述文中的评定过程。首先将大量的候选车牌分为训练数据和测试数据,测试数据是做过标签的,也就意味着已经知道每张图片是否为真正的车牌。然后用训练后的SVM模型来判断这些数据,就会生成新的标签,称之为“预测标签”。这样“预测标签”与“标签”就可以进行一个对比[9-10]。此时就会出现两种误差:标签是真的车牌而预测标签判断不是车牌;标签不是真的车牌,而预测标签判断是车牌。
文中设计两个指标来评测两种情况发生的概率,分别是“准确率”(precision)和“查全率”(recall)。准确率是在预测标签中真正车牌所占的比例,查全率是真的车牌并且预测也是车牌的比例。公式如下:
(1)
(2)
其中,ptrue-rtrue表示真正车牌并预测也是车牌的数量;pfalse-rtrue表示真正车牌而预测错误的数量;ptrue-rfalse表示预测为车牌而实际不是车牌的数量。
3 字符分割
在第二节中已经得到了车牌,接下来就是字符分割。在车牌的定位中为了判断车牌是否为真正车牌已经进行了归一化,所以字符分割的车牌大小是统一尺寸。字符分割就是要分割出车牌中的所有文字,分割出来的字符块将进行字符识别。具体而言,字符分割过程如图3所示。
图3 字符分割过程
3.1 灰度化
车牌定位部分,文中输出的是彩色图片,这是为了下面要用颜色处理一些问题。而在分割算法里要使用灰度化图片,所以要将输出的车牌进行灰度化处理。
3.2 颜色判断
得到车牌的灰度化图片后,接下来要分割字符,这就需要对车牌字符进行取轮廓。常见字符分割有很多方法,例如投影法、滑动窗口判断法等,文中使用取字符轮廓法。取字符轮廓法需要转化为二值化图片,不过,由于蓝色车牌和黄色车牌使用的二值化参数不同,可以判断车牌的颜色。
3.3 取轮廓及外接矩形
取轮廓方法在提取英文字符时效果很好,处理中文字符就会出现问题。中文汉字结构和英文不同,结构笔画会出现断裂,比如图4中的“苏”,英文字符可以完全取出,而“苏”字分成了两个部分。
图4 取轮廓操作
虽然很多中文不会出现上述情形,比如车牌中的“津”字,能够完美地取出轮廓,但直接用取轮廓操作已经不合适了。这种取轮廓的方法可以用于车牌后面的英文字符,例如“苏A88M88”,其中“A88M88”可以得到轮廓。对于中文需要另外的方法进行单独处理。
发现“苏”字后面的“E”字符代表城市代码,这个字符有一个特征,就是与后面的字符中间存在一个符号,这就导致了一定间隔。只要找到这个字符,向左偏移就能找到汉字的外接矩阵。图4就是“城市代码”与被反推得到的“省份简称”的矩形。
对于获取这个“特殊字符”,如图4所示,根据整个车牌发现车牌的1/7到2/7之间就是这个“特殊字符”所在。这样就定位出这个特殊字符的外接矩阵,这种方法简单,并且有很不错的效果。
文中使用提出的中文字符处理方法成功获取了中文字符,这样车牌的所有字符矩阵都已获取出来。
3.4 截取图块
取轮廓之后,把图中的外接矩形分别截取出来,进行归一化处理得到统一尺寸。输出的字符进行字符识别模块处理。归一化后的字符图块如图5所示。
图5 截取并归一化的图块
4 字符识别
车牌字符识别方法有很多,目前比较常见的是模板匹配法[11-12]、特征匹配法[13]和人工神经网络[14]。文中采用人工神经网络进行字符识别,需要对字符进行特征提取,确定神经网络的输入层维数。首先把截取下来的字符归一化为10×10的尺寸,计算10维横向直方图值和10维纵向直方图值,得到20维特征向量。对于10×10的尺寸的字符块得到100个像素块,取每块的值作为特征向量。这样得到一共120维特征向量作为输入层。
图6 字符识别网络
输出层要预测的文字类别为10个数字(0-9)、24个英文字母(除去O和I)、31个省份简称共65类,对于隐藏层的节点数的设计就需要测试选择合适的数目,根据实验,发现数目为40时能够使整个网络的识别效果较好。在设计一个神经网络时,输入层的节点数需要与特征的维度匹配,输出层的节点数要与目标的维度匹配,因此确定神经网络的最终结构为输入层数目120,隐藏层数目40,输出层数目65。字符识别网络如图6所示。
5 结束语
对车牌识别的整个过程进行了阐述,提出了基于SVM的车牌定位方法并进行参数优化,对字符的识别采用基于MLP神经网络模型。对车牌识别中定位方法采用颜色识别和垂直边缘检测, 对于中文字符检测
提出新的方法。对于整个车牌识别系统采用Open CV3.1.0和Visual Studio 2015开发平台实现。选用近万张不同环境的车牌图片进行SVM模型训练,使用大量车牌中所有字符进行ANN字符识别模型训练。测试结果表明,该算法的车牌定位率在复杂环境下的拍摄图像能达到98.25%,而车牌中字符ANN模型的识别率达到99.57%。该方案能够快速准确地识别车牌,对于雾霾天气也能很好的适用,具有很强的实用性。
参考文献:
[1] 朱 菌,唐祯敏,朱 钧.基于机器视觉技术的城市交通预警系统的研究[EB/OL].2003.www.image2003.com.
[2] OLIVA A, TORRALBA A. Modeling the shape of the scene:a holistic representation of the spatial envelope[J].International Journal of Computer Vision,2001,42(3):145-175.
[3] 张 涛,王剑魁,张国山,等.多雾霾天气车牌识别系统图像预处理算法[J].山东理工大学学报:自然科学版,2015,29(1):15-19.
[4] HE Kaiming,SUN Jian,TANG Xiaoou.Single image haze removal using dark channel prior[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2011,33(12):2341-2353.
[5] HE Kaiming,SUN Jian,TANG Xiaoou.Guided image filtering[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2013,36(6):1397-1409.
[6] HUANG Y P,CHEN C H,CHANG Y T,et al.An intelligent strategy for checking the annual inspection status of motorcycles based on license plate recognition[J].Expert Systems with Applications,2009,36(5):9260-9267.
[7] 曾 泉,谭北海.基于SVM和BP神经网络的车牌识别系统[J].电子科技,2016,29(1):98-101.
[8] 常巧红,高满屯.基于HSV色彩空间与数学形态学的车牌定位研究[J].图学学报,2013,34(4):159-162.
[9] 黄社阳,刘智勇,阮太元.基于HSV颜色空间和SVM的车牌提取算法[J].计算机系统应用,2014,23(8):150-153.
[10] 郭荣艳,胡雪惠.BP神经网络在车牌字符识别中的应用研究[J].计算机仿真,2010,27(9):299-301.
[11] 关学忠,张 璐.基于改进的BP神经网络车牌识别的研究[J].自动化技术与应用,2015,34(7):66-68.
[12] 蓝章礼,李益才,李艾星.数字图像处理与图像通信[M].北京:清华大学出版社,2009:179-193.
[13] 张旭兰.基于BP人工神经网络的车牌字符识别优化算法[J].计算机工程与应用,2012,48(35):182-185.
[14] 呙润华,苏婷婷,马晓伟.BP神经网络联合模板匹配的车牌识别系统[J].清华大学学报:自然科学版,2013,53(9):1221-1226.