时间:2024-05-04
汤冲 张冉 蔡平 王小刚 沈文波
(1.常州信息职业技术学院 江苏省常州市 213164 2.苏州科大讯飞教育科技有限公司 江苏省苏州市 215002)
汽车车牌识别(License Plate Recognition)已经越来越受到人们的重视。特别是在智能交通系统中,汽车车牌识别发挥了巨大的作用。汽车车牌的自动识别技术是把图像处理方法与计算机软件技术相结合,以准确识别出车辆车牌的字符为目标,并将识别出的车辆车牌数据传送至交通实时管理系统,从而实现高效、准确的交通监管功能。汽车车牌识别对于维护交通安全和城市治安,防止交通堵塞,实现交通全自动化管理具有重要的现实意义。
车牌自动识别要求实现从汽车图像的获取到车牌字符的处理,是一个复杂的过程,主要分为图像获取、车牌定位、字符分割以及字符识别等阶段。由于对车牌的拍摄角度不同以及拍摄环境光线的强弱变化等外界因素,严重影响对车辆车牌的正确识别,需要进一步完善车牌自动识别系统的性能,尤其是提高系统的抗外界干扰的能力。
目前,车牌自动识别系统的开发平台较多,但基于开源计算机视觉开发包OpenCV 以及深度学习框架TensorFlow 成为开发设计车牌自动识别系统的主流技术。OpenCV 的优势在于它有400 多个免费的图像处理函数,函数功能包括从图像处理到模式识别、从静态图像到运动视频、从二维平面到相机的三维坐标以及三维重建,几乎覆盖了机器视觉的大部分应用领域。TensorFlow 是由谷歌提供,现已形成强大的人工智能平台社区,其工作流程相对容易,提供的API 具有较好的稳定性和兼容性,还能实现与Python 编程语言的对接。因此,本文选用基于OpenCV 与TensorFlow 技术,设计开发了抗环境干扰的车牌自动识别系统,系统可被灵活部署在各种类型的机器上,具有部署简单,抗环境干扰能力强,车牌识别率高的特点。
车牌自动识别是以计算机视觉处理、数字图像处理、模式识别等技术为基础,对摄像机所拍摄的车辆图像或者视频图像进行处理分析,得到每辆车的车牌号码,从而完成识别的过程。在此基础上,可实现停车场出入口收费管理、盗抢车辆管理、高速公路超速自动化管理、闯红灯电子警察、公路收费管理等各种交通监管功能。
车牌自动识别系统的设计包含车辆图像获取、车牌区域定位、车牌特征轮廓提取和车牌内容识别环节。系统处理流程如图1所示。
图1:车牌自动识别系统的处理流程
图2:调整灰度级前的车辆图像
图3:调整灰度级后的二值灰度图像
图4:车牌区域的形状特征
车牌图像获取是进行车牌识别的首要环节。车牌图像可以从摄像机拍摄的车辆图像或者视频图像中进行抽取。车牌图像的获取也可由用户手机拍摄后传入车牌识别系统。
摄像机拍摄的含有车牌信息的车辆图像是彩色的,为了提高车牌识别的抗外界干扰的能力,先将彩色车辆图像生成二值的灰度图像,实现基于色调的车牌区域定位。由于国内的车牌往往是蓝底白字,因此,可以利用图像的色调或者色彩饱和度特征,生成二值灰度图像,从而实现更加准确地定位车牌位置。
系统设计时,先把获取的图像转化成HSV 图像,进而获取V通道的图像明度信息。二值灰度图像中每个像素的灰度级别采用0-255 之间的整数表示。先计算灰度直方图,然后根据灰度直方图设置坐标轴范围,调整灰度级以提高图像的对比度。灰度直方图是图像灰度级的函数,用于描述每个灰度级在图像矩阵中的像素个数或者占有率。
图2 为调整灰度级前的车辆图像,图3 为调整灰度级后的二值灰度图像。
调整灰度级能提高图像的对比度,使亮的地方更亮,暗的地方更暗。在形态学处理中,顶帽操作往往用来分离比邻近点亮一些的板块,尤其对于具有大幅相似背景而微小物品的规律性又较强的图像,使用顶帽运算可以有效提取背景信息。计算车辆图像直方图的核心算法如下:
车牌区域的定位采用基于形状的方法。由于车辆图像背景比较复杂,所以应该根据车牌的特征进行初次筛选。车牌的特征可以选择中国车牌的大小、比例特征,因为车牌都是固定的矩形形状,通过首先寻找图像上拥有矩形特征的区域,然后再抽取这些区域,再结合车牌的长宽的比例特征可以筛选出相应的矩形区域,从而实现对车牌的准确定位。
读取HSV 图像时,根据我国车牌的标准,基于图像大小设定的面积、长宽比例定位车牌的字符区域,首先转换宽度和高度,车牌区域的大小只能为13*5,行数为1。然后创建掩膜和背景模型,采用单通道浮点型,创建前景模型并分割图像。图4 为车牌区域的形状特征。
图5:特征轮廓提取对比图
通过选用高斯滤波函数并正确设置参数,将bgdModel 参数设为零,表示不计算y 方向的梯度,因为车牌上的数字在竖直方向较长,重点在于得到竖直方向的边界。先采用闭运算将车牌数字部分连接,再利用开运算将不是块状的或是较小的部分去掉。采用具有二维卷积算子的高斯滤波可实现图像的模糊化处理,即去除细节和噪声,提高车牌识别的抗干扰能力。
由于部分图像得到的轮廓边缘不整齐,因此需要再进行一次膨胀操作以获取车牌的轮廓。通过测试边框识别结果,将轮廓调整为长方形,并用颜色识别出车牌区域。
基于车牌形状实现车牌图像分割定位的核心算法如下:
OpenCV 与Python 的接口中使用cv2.findContours()函数来查找检测物体的轮廓。该函数提供3 个主要参数。参数1 表示寻找轮廓的图像;参数2 表示轮廓的检索模式,共有四种类型,分别是cv2.RETR_EXTERNAL 表示只检测外轮廓,cv2.RETR_LIST 检测的轮廓不建立等级关系,cv2.RETR_CCOMP 建立两个等级的轮廓;cv2.RETR_TREE 建立一个等级树结构的轮廓。参数3 表示method 为轮廓的近似办法。
cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1,cv2.CHAIN_APPROX_SIMPLE 设定压缩水平方向、垂直方向和对角线方向的元素,只保留该方向的终点坐标。
系统实现特征轮廓提取的核心算法如下:
图6:OpenCV 的代码结构
图7:TensorFlow 的代码结构
在获取轮廓过程中,通过传入定义好类,获取根据轮廓矩形的面积、长宽等值,为以后计算做准备。图5(a)、(b)分别展示了特征轮廓提取前后的效果对比。根据前期获取的候选车牌区域,遍历轮廓数组实现对图像的筛选。
车牌内容识别时,通过计算候选车牌区域蓝色数值(均值)的最大值,确定最终的车牌区域。对于选定的车牌轮廓,首先进行粗定位,即对车牌进行左右边界回归处理,去除车牌两边多余的部分,然后进行精定位,即将车牌送入CRNN 网络进行字符识别,利用左右边界回归模型,预测出车牌的左右边框,进一步裁剪,进行精定位。基于文字特征的方法是根据文字轮廓特征进行识别,经过相应的算法解析,得到结果。
车牌内容识别的核心代码如下:
通过getRectSubPix将获取的图像进行分离,获取blue通道图像,计算图像的均值并保存在list 中。
我们预定义InsurProvider 类,包括车牌中的所有字符和字母。通过将已获取的list 中数据与预定义的数据进行对比,选取相似度最高的字符或者字母作为最终识别的结果进行输出。
车牌内容识别的核心算法如下:
系统采用OpenCV 的图像处理与TensorFlow 来构建卷积神经网络的模型训练。OpenCV 的代码结构如图6所示。
图8:导航栏
图9:车牌测试效果
TensorFlow 的代码结构如图7所示。
为了检验所开发系统的实际效果,系统实现时采用Python 进行编程识别,车牌识别结果通过Web 页面进行展示。具体的展示代码在index.html 中予以实现,Web 代码结构以及车牌识别系统的导航首页代码结构如图8所示。
对所开发的车牌识别系统进行了实际部署和测试。系统测试的效果如图9所示。
测试结果表明,系统能在各种环境干扰的情况下,正确识别车牌。所设计开发的系统具有部署简单,抗环境干扰能力强,车牌识别率高的特点。
随着车辆的普及,车辆的增多也加大了对车辆的管理,车牌识别也变得越来越重要。针对因拍摄角度、环境光线等因素增大对车牌的识别难度等突出问题,本文提出了基于我国车牌自身特点进行车牌识别的方法,即先对车牌进行有效区域分割,再通过预定义车牌信息数据库进行比对识别的思路,并采用主流的OpenCV 与TensorFlow 技术设计并实现了车牌识别系统,有效提高了车牌识别的抗干扰能力。今后,将针对不同国家车牌的不同样式,进一步拓展车牌区域分割和定位方法,提高系统的通用性。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!