车牌检测与识别技术研究与实现毕业论文
2020-03-12 10:26:35
摘 要
车牌识别系统在智能交通系统中扮演着重要的角色,广泛应用于车辆流量监测、高速公路车辆视频采集与识别以及停车场智能系统管理等。因此,对车牌识别系统的研究不仅有较高的理论价值,而且有一定的实用价值。
从车牌的识别过程来划分,可将车牌识别系统划分为3个主要模块,本文对各个模块的相关的算法进行了深入的学习和研究,并基于这3个模块开发了一个车牌识别系统。具体工作有以下几个方面:
1)车牌定位算法的实现。研究比较了常用的几种车牌定位算法,利用python opencv实现了一种基于Canny边缘检测算子的车牌定位算法。
2)车牌字符分割算法的实现。研究比较了常用的车牌字符分割算法,利用python opencv实现了基于投影的车牌字符分割算法。
3)车牌字符识别算法的实现。学习了卷积神经网络,实现了基于卷积神经网络的车牌字符识别,利用三个神经网络来分别识别省份简称、发牌机关代号以及车牌序号。
4)车牌识别系统的实现。利用本文之前实现的车牌识别的基本模块,使用PyQt开发了一个车牌识别系统。该系统应用了之前实现的几个模块,可以较好地完成车牌识别任务,并能展示车牌识别的3个步骤。
关键词:车牌识别;车牌定位;车牌字符分割;车牌字符识别;卷积神经网络
Abatract
The license plate recognition system plays an important role in the intelligent transportation system, widely used in vehicle traffic monitoring, vehicle video acquisition and recognition, and intelligent system management of parking. Therefore, the study of license plate recognition system not only has high theoretical value, but also has a certain value of use.
From the recognition process of the license plate, the license plate recognition system can be divided into 3 main modules. In this paper, the related algorithms of each module are studied deeply, and a license plate recognition system is developed based on these 3 modules. The specific work has the following aspects:
1)The realization of the license plate location algorithm. The research compares several common license plate location algorithms, and implements a license plate location algorithm based on the Canny edge detection operator using the Python OpenCV.
2)The realization of character segmentation algorithm of license plate. Research and comparison of common license plate character segmentation algorithm, using Python OpenCV to realize the segmentation algorithm of license plate character based on projection.
3)The realization of the license plate character recognition algorithm. Learning the convolution neural network, realizing the license plate character recognition based on the convolution neural network, and using three neural networks to identify the province, the licensing organs code and the license plate number respectively.
4)The realization of the license plate recognition system. Using the basic module of the license plate recognition before this paper, a license plate recognition system is developed with the application of several modules implemented before, which can complete the license plate recognition task and display the 3 steps of the license plate recognition.
Keywords:license plate recognition;license plate location;character segmentation;character recognition;convolutional neural network
目录
摘要 I
Abatract II
第1章 绪论 1
1.1 研究目的及意义 1
1.2 国内外研究现状 1
1.3 论文的研究内容 2
第2章 车牌定位算法的实现 3
2.1 国内车牌的规格和特征 3
2.2 Canny边缘检测车牌定位算法 3
2.3 车牌定位算法的实现 4
第3章 车牌字符分割算法的实现 9
3.1 常用的车牌字符分割算法 9
3.2 基于投影的车牌字符分割算法 9
3.3 车牌字符分割算法的实现 10
第4章 车牌字符识别算法的实现 12
4.1 卷积神经网络的介绍 12
4.2 卷积神经网络结构 13
4.3 卷积神经网络的训练 14
第5章 车牌识别系统的实现 15
5.1 PyQt介绍 15
5.2 车牌识别系统的实现 15
第6章 总结 19
参考文献 20
致谢 22
第1章 绪论
研究目的及意义
随着改革开放以来我国经济的迅速发展,我国面临着城市交通拥堵,交通事故发生频率高,交通环境的恶化等问题,因此迫切的需要智能交通系统的发展与进步,其中车牌识别在智能交通系统中扮演着重要角色。近年来,车牌识别技术发展迅速,从识别方法来看,可分为两类,基于IC卡鉴别(RFID)或基于条形码的识别系统、基于图像的车牌识别系统。
基于RFID或条形码的识别是指通过识别存储在IC卡或安装在车辆上的条形码中的车牌信息来识别车牌号码和相关信息[1]。IC卡识别技术精度高,操作可靠,可随时操作。然而,整套设备太贵,硬件设备比较复杂,不适合远程操作。条形码识别技术具有识别速度快、精度高、可靠性强、成本低等优点,但对扫描仪器的要求太高[2]。另外,既需要建立一套国家标准,又不能检查汽车与条形码是否匹配,这也是一个技术缺陷。
基于图像的车牌识别系统是一种智能的被动车牌识别方法。实时采集和识别移动或固定车辆的车牌号码。与间接识别系统相比,该系统节省了设备配置和大量资金,提高了经济效益。其次,由于使用了先进的计算机技术,识别速度也得到了很大的提高。实时问题得到了很好的解决。第三,基于图像识别,可以手工解决系统辨识误差,而其他方法难以与人交互。
本文研究的车牌识别系统,就是一个基于图像的车牌识别系统,通过采用最新的深度学习技术,使得车牌字符识别成功率有了提高,最终使得车牌识别系统有了不错的效果。
国内外研究现状
当前,交通问题是所有国家都需要面对的问题,各个国家都需要智能交通系统的帮助,因此,作为智能交通系统的重要组成部分,许多发达国家都在研究开发自己国家的车牌识别系统。比如英国IPI公司的ANPR系统、以色列HI.TECH公司的SEE/CAR System系列等[3]。但是,不同国家车牌的特点不同,并且其他国家的车牌大都不包含中国大陆车牌特有的汉字符号,因此国外的车牌识别系统并不能用来识别中国大陆车牌
我国车牌识别的研究也取得了令人瞩目的成果,拥有几款比较成熟的产品。主要是中科院自动化研究所汉王公司研究开发的“汉王眼”和臻识科技旗下品牌研究开发的“火眼臻睛”。“汉王眼”系统主要应用在收费车道、智能停车场、治安卡口和智能安防监控等应用场景。“火眼臻睛”系统专门适用于停车场或类停车场出入口等应用场景,其车牌综合识别率达到了98.5%。除此之外国内的亚洲视觉科技有限公司的VECON产品成功识别超过20个国家及地区车牌号码字符。
论文的研究内容
本文以“车牌检测与识别技术”为研究对象,严格按照研究流程,首先是对车牌识别系统进行了分析,在这基础上提出了这次研究的意义。然后将车牌识别系统分为了几个部分并分别编码实现了它们,并在编码完成之后对其进行了测试。本文分成六章来介绍有关内容:
第一章开篇描述了此次研究的目的及意义,并通过对国内外的研究现状进行分析来引出此次课题。
第二章描述了车牌定位算法的原理及实现
第三章描述了车牌字符识别算法的原理与实现
第四章描述了车牌字符识别算法的原理与实现,主要介绍了本系统所采用的卷积神经网络(CNN)
第五章描述了将三个模块合并起来作为同一个系统组件的过程以及对三个模块算法的测试,还有最终系统的实现
第六章总结本次的课题研究,在完成主要功能的基础上分析还有待完善之处。
第2章 车牌定位算法的实现
2.1 国内车牌的规格和特征
我国大陆地区小型机动车辆的号牌使用的是《中华人民共和国机动车号牌》标准[4],如图2.1所示为我国大陆地区小型汽车的前后车牌结构示意图,也是本文构建的车牌识别系统的目标研究对象。
图2.1 国内小型汽车车牌结构示意图
2.2 Canny边缘检测车牌定位算法
论文所采用的是近几年车牌定位算法研究的热点——基于车牌边缘特征的车牌定位算法。该算法的主要思路是将车牌的字符及边缘的信息突出,利用输入的车牌图像经过灰度化之后结果来进行车牌定位操作,这种定位算法在实际的使用中取得了比较好的效果。图2.2是本文采用的算法的各个步骤。
图2.2 算法各个步骤
2.3 车牌定位算法的实现
首先,对输入的彩色图像进行灰度化以及二值化操作。灰度化处理是因为彩色图像包含信息过多,直接对彩色车牌图像进行处理的话,系统的运行时间会加大,需要的内存空间也过大。彩色图像的灰度化操作在图像处理领域是一种比较常见的操作,在模式识别领域有着广泛的应用,对车牌图像信息的提取工作以及后续处理有很大帮助,节省了内存空间并且使得系统的运行速度得到了提高。二值化处理是为了减少车牌图像的噪声对车牌定位操作的影响,属于阈值化操作中的一种。由于全局阈值化操作简单,因此本文采用全局阈值化来进行二值化处理,如图2.3为对彩色图像进行了灰度化与二值化操作之后的车牌图像。
本文使用了python opencv库来实现对车牌图像的灰度化及二值化处理,关键代码如下:
grayimg = cv2.cvtColor ( srcimg , cv2.COLOR_BGR2GRAY )
# srcimg为车牌彩色图像,返回结果为车牌灰度图像
ret , threshedimg = cv2.threshold ( grayimg , x , 255 , cv2.THRESH_BINARY )
# img为灰度图像,x为阈值,在这里我们取图像中像素最大值与最小值的和除以2,255为在二元阈值THRESH_BINARY和逆二元阈值THRESH_BINARY_INV中使用的最大值,第四个参数为二值化处理使用的阈值类型。第一个返回值为阈值,第二个返回值为经过二值化处理后的图像。
图2.3 灰度化与二值化操作之后的车牌图像
然后,对经过上一步中灰度化与二值化处理之后的车牌图像进行边缘检测,边缘检测的方法是检测车牌图像的像素在某个区域内灰度的变化水平,将车牌图像中亮度变化明显的点做出标识,在对车牌图像进行边缘检测之后可以减少车牌图像占用的内存空间,并且去除车牌图像中的无关信息,保存车牌图像重要的结构属性[5]。本文采用的是canny边缘检测算子,如图2.4所示为经过边缘检测处理之后的车牌图像。使用opencv提供的官方函数来实现这个功能,关键代码如下:
cannyimg = cv2.Canny(binaryimg, binaryimg.shape[0], binaryimg.shape[1])
# binaryimg为经过第一步处理后的车牌图像,后面两个参数为车牌图像的长和宽,返回值为经过边缘检测后的车牌图像。
图2.4 边缘检测处理之后的车牌图像
第三,在对经过边缘检测处理的车牌图像中选出候选区域进行搜索,这需要对车牌图像进行图像形态学操作[6],基本的形态学转换主要包括膨胀与腐蚀,这两者可以实现很多功能,比如去除车牌图像噪声。本文采用的形态学运算是开运算和闭运算,这两个操作包括了膨胀和腐蚀操作,经过图像形态学操作后,车牌图像中的车牌就会变成一个长方形连通区域,将其作为车牌候选区域之一。本文使用opencv来实现这步操作操作,先对车牌图像进行开运算,然后对其进行闭运算,如图2.5所示为经过图像形态学运算之后的车牌图像。关键代码如下所示:
kernel = np.ones ( ( 5 , 19 ) , np.uint8 )
#定义进行开运算与闭运算的卷积核
closingimg = cv2.morphologyEx ( cannyimg , cv2.MORPH_CLOSE , kernel )
#调用库函数对经过前两步操作处理之后的图像进行闭运算,第一个参数值为源图像,第二个参数值为进行的形态学运算类型,此处为闭运算,第三个参数为指定的卷积核,返回经过闭运算操作后的图像。
openingimg = cv2.morphologyEx ( closingimg , cv2.MORPH_OPEN , kernel )
#调用库函数对经过前两步操作处理之后的图像进行开运算,第一个参数值为源图像,第二个参数值为进行的形态学运算类型,此处为开运算,第三个参数为指定的卷积核,返回经过开运算操作后的图像。
图2.5 图像形态学运算之后的车牌图像
最后,在车牌候选区域中去除伪车牌,然后定位出车牌区域,本文所采用的方法是根据颜色来过滤伪车牌,我国目前小型汽车的前后车牌都为蓝底白字,因此我们通过判断车牌所有候选区域的颜色来去除伪车牌,最终定位出车牌区域。
使用opencv来实现去除伪车牌的操作,如图2.6所示为本算法的定位结果,关键代码如下:
def locate_license ( img , orgimg ) :
# 找到经过数学形态学操作之后的车牌图像的轮廓
Img, contours, hierarchy = cv2.findContours ( img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE )
# 找出最大的三个区域
blocks = []
for c in contours :
# 找出轮廓的左上点和右下点,由此计算它的面积和长宽比
r = find_retangle ( c )
a = ( r[2] - r[0] ) * ( r[3] - r[1] )
s = ( r[2] - r[0] ) / ( r[3] - r[1] )
blocks.append ( [r, a, s] )
# 选出面积最大的3个区域
blocks = sorted ( blocks, key = lambda b: b[2] ) [-3:]
# 使用颜色识别判断找出最像车牌的区域
maxweight, maxindex = 0, -1
for i in range ( len ( blocks ) ):
b = orgimg[blocks[i][0][1]:blocks[i][0][3], blocks[i][0][0]:blocks[i][0][2]]
# RGB转HSV
hsv = cv2.cvtColor ( b, cv2.COLOR_BGR2HSV )
# 蓝色车牌范围
lower = np.array ( [100,50,50] )
upper = np.array ([140,255,255] )
# 根据阈值构建掩模
mask = cv2.inRange ( hsv, lower, upper )
# 统计权值
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: