APP下载

基于Python的车牌识别系统实现

2023-01-31刘馨茹易博文李玲香

大众科技 2022年11期
关键词:字符识别车牌字符

刘馨茹 易博文 李玲香 江 华

基于Python的车牌识别系统实现

刘馨茹1易博文1李玲香1江 华2

(1.湖南科技学院,湖南 永州 425199;2.惠州学院,广东 惠州 516000)

车牌识别技术主要是以图像分割理论和图形识别理论为基础,通过对采集到的车牌图像进行预处理、车牌定位,并将车牌部分的图像截取后,进行矩形校正,然后进行字符分割归一化处理,最后可以通过神经网络或者模式识别技术识别出车牌上的字符。文章在分析并参考现有车牌识别技术的基础上,运用Python+Open CV技术,选取合适的图像处理方法实现了的车牌识别功能。系统除了具有车牌识别的信息处理功能,且有较高的识别正确率和较快的识别速度,还能进行批量车牌的识别处理,并生成识别记录Excel文件上传至云服务的数据库中,为进一步实现车牌识别系统智能化提供支持。

Python;车牌识别;字符分割;SMV

引言

汽车牌照号码是车辆的“身份”标识,牌照自动识别技术可以在汽车不做任何改动的情况下实现汽车“身份”的自动登记及验证,该技术已经应用于公路收费、停车管理、称重系统、交通诱导、交通执法、公路稽查、车辆调度、车辆监测等各种场合。

车牌识别系统是计算机视频图像识别技术在车辆牌照识别中的一种应用,通常一个车牌识别系统主要包括以下这四个部分:车辆图像获取、车牌定位、车牌字符分割、车牌字符识别[1]。截至今日,国内外对于车牌自动识别系统技术的研究已经取得了较为巨大的进步,并且其中较为成熟的产品已经投入使用,而且目前最新的技术水平为字母和数字的识别率可达到99.7%,汉字的识别率可达到99%[2]。本文系统旨在保证较高的识别准确率的基础上,实现简单的车牌管理功能。系统可适用于大规模港口、仓库、大型商场、居民小区、高校和政府部门的停车场管理。

1 相关算法简析

车牌识别系统一般的处理步骤:车牌采集→车牌预处理→车牌定位→车牌校正→字符分割→字符识别→结果输出。

1.1 车牌定位

车牌定位是车牌识别的首要环节,精确的车牌定位能够直接对后续的车牌校正、分割和字符识别功能产生重要影响。常用的定位方式有基于纹理和基于颜色两种方式。

基于纹理定位方式的原理是利用车牌的规格固定、字符位置统一的特征。由于车牌的规格是固定的,二值化后的图像可以通过投影的办法来筛选车牌的位置。

基于图像颜色定位方式的原理是根据车牌的颜色特征来定位车牌区域。该方法首先是将RGB图像转换为HSV(Hue Saturation Value,HSV)空间中,然后根据所有的像素点限定来确定像素点是否保留。该方式从原始图像中过滤掉与标准车牌底色颜色不同的像素,尽量只保留与车牌的背景颜色相近的像素,因而过滤掉背景中的干扰成分。

基于纹理定位方式相比于基于颜色定位方式有以下不足:(1)基于纹理定位车牌方式操作方法比较复杂,计算速度缓慢;(2)当图像中的车牌是倾斜的时候,基于纹理定位车牌方式对车牌进行扫描确定车牌范围的时候会存在比较大的偏差;(3)基于纹理定位车牌方式的抗噪能力比较弱,当车牌出现较多污点或者采集到的车牌图像颜色偏差较大的时候,采用投影的方法进行车牌定位会产生比较大的影响。所以基于颜色定位车牌,准确率会相对较高[3],要求的条件也比较少。

1.2 车牌矫正

车牌矫正能使车牌模糊的图像、倾斜图像的识别效果得到改善。车牌倾斜校正算法主要有Hough变换法和Radon变换法以及仿射变换法[4]。

基于Hough变换的车牌图像倾斜校正的原理主要是利用Hough变换检测车牌的边框,确定边框直线的倾斜角度,根据倾斜角度旋转,获得校正后的图像。

基于Radon变换的车牌倾斜校正的原理是将采集到的车牌图像进行多方向投影,进而通过分析各方向的投影特性确定车牌的倾斜角度,具体步骤和Hough变换类似。

仿射变换是从二维坐标到二维坐标之间的线性变换,它保持了二维图像的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图像之间的相对位置保持不变,平行线依然是平行线,且直线上点的位置顺序保持不变),任意的仿射变换都能表示为乘以一个矩形(线性变换)再加上一个向量(平移)的形式,效率较高。

Hough变换和Radon变换对于直线的检测速度比较慢,不能做到实时控制,同时精确度也不高,甚至因为得不到期望的信息而做出错误的判断,这将导致产生较多的冗余数据。而仿射变换可以通过一系列原子变换的复合来实现,包括平移、缩放、翻转、旋转和剪切。空间变换对应矩阵的仿射变换,一个坐标通过函数变换的新的坐标位置。仿射变换操作简单,效率高,优于其他校正算法。

1.3 字符分割

字符分割是车牌识别中的关键一环,不仅需要精确的车牌定位和准确的车牌校正对其进行条件准备,同时自身也要为后续的字符识别做好准备工作。目前常用的字符分割算法有基于聚类连通分割法、基于模板匹配的分割法和投影法[5]。

基于聚类连通分割法的原理是利用车牌字符的连通性,将车牌各个连通的字符形成一个个整体的区域。

基于模板匹配的分割法原理是利用车牌本身固有特性,比如说车牌字符的几何特性、位置特性设计出具有一定字符宽度和字符间隙的模板,之后再将模板在要分割的车牌区域内循环滑动,计算出模板中车牌字符区域内的像素和字符间隔区域内像素的差值或者比值。当差值和比值在一定的范围内最大时为字符的分割点,但是当模板设计得不合理或者存在误差时就会出现字符分割的位置不准确的情况。

基于投影法分割法的原理是利用车牌字符之间存在的固定的间隙从而对字符进行分割。由于其操作简单、计算量小的特点,投影法是目前车牌识别中字符分割算法最常用的方式之一。

车牌中存在汉字,会有左右结构和上下结构的字符出现,导致使用聚类连通的方式分割字符会出现将一个字符分割为两个字符的情况。采用模板匹配的方式对字符进行分割需要精确的模板设计,操作过于复杂。所以采用基于投影法的车牌字符分割,由于其操作简单、计算量小,用投影法对车牌进行字符分割,只需要对车牌区域进行两次不同方向的投影,通过水平投影可以大致判断车牌中字符的上下边界,通过垂直投影可以大致判断车牌中一个字符的左右边界。

1.4 字符识别

字符识别是车牌识别系统的核心环节,车牌字符识别的准确率是衡量车牌识别系统的一个很重要的指标。常用的字符识别算法有模板匹配字符识别算法、神经网络字符识别算法、支持向量机。

模板匹配字符识别算法是图像识别中的经典算法之一,模板识别通过提取大量模板的字符特征,在获取到目标样本的字符特征后和模板的特征进行比对,从而选出该字符。但是这种方法对不规则字符的鲁棒性差,且抗干扰能力也较差。

神经网络字符识别算法的主要思想和模板匹配类似。其主要通过神经网络的学习和记忆功能来实现。但是过于依赖初始样本,并且容易陷入局部最优,收敛速度慢,因此采用神经网络识别字符的算法仍需要改进。

支持向量机的主要思想和前两者相似,都是先得到样本特征,进行训练,然后再分类。SVM[6](Support Vector Machine,SVM)是用得最多的分类方法,一般大多适合于二分类问题。

在车牌字符识别过程中,当出现字符变形、扭曲的情况时,采用模板匹配字符识别法容易出现结果偏差,而采用神经网络算法会过于依赖初始样本的选择,条件过于复杂,学习成本较高。相比神经网络算法,SVM的运算效率更高,更能处理小样本的识别中的困难,因此SVM被广泛地运用于字符识别中。

2 系统总体设计

本文在国内外成功的车牌识别系统案例基础上,采用Python以及OpenCV实现一款自动车牌识别系统。该系统能识别并记录车辆的牌照号码、出入的具体时间,还可与自动门、栏杆机等控制设备相结合,从而实现车辆的自动管理。系统也能将指定的牌照信息上传至系统,利用系统自动识别进出口车辆的车牌信息并对数据库进行查询,被认证的车辆可以自动放行。本文系统主要由车牌识别模块、车牌搜索模块、车牌比对模块和车牌数据库搜索模块构成,其系统总体框图如图1所示。

图1 车牌识别系统总体框架

车牌识别模块是车牌识别系统核心部分,其主要功能是能够读取系统中的车牌图像或能调用摄像头设备进行车牌识别,输出识别的结果,并将识别记录存入后台数据库系统。

车牌搜索模块是用户将采集到的车牌图像在本地存储的车牌库中进行车牌搜索,判读该车辆是否被本车牌系统记录过,以便于统计车辆数据。

车牌比对模块是将需要比对的车牌图像分别输入系统,判断是否为同一辆车。

车牌数据库搜索模块主要功能是用户通过登录后台数据库,对上传的数据进行批量输出,能对后台数据进行简单的管理,实现关键字查询等操作。

3 系统功能模块实现

3.1 系统界面实现

车牌识别系统可以从整体上分为前端和后端部分,前端部分主要是用户界面部分,界面部分主要采用Tkinter ,Tkinter是Python的GUI框架,Tkinter内置于Python库中,无需安装相关依赖,其基本空间能够满足本系统所有需求。Python采用Tkinter可以快速地创建GUI应用程序,前后端同时采用Python开发能够节省开发成本。Tkinter实例代码如下:

运行结果如图2所示。

图2 Tkinter实例

3.2 车牌识别模块功能实现

车牌识别模块能对不同方式采集到的车牌图像进行图像信息处理,最后输出处理结果,其信息处理过程如下:将不同方式采集到的车牌图像在本地读取后,先对图像进行预处理,包括对图像进行尺度变换、高斯去噪、图像变平滑;接着将预处理好的图像以颜色定位算法为主,纹理定位算法为辅结合的方式进行定位车牌,在获取到车牌位置后,将截取出来的图像进行倾斜识别,若存在角度倾斜时,需采用仿射变换对其进行矩形校正;然后对无倾斜的图像采用投影法进行车牌字符分割;最后将分割好的字符图像采用双线性插值法进行归一化处理[7],使之变为尺寸一致的图像,便于后续的字符识别,将SMV字符识别的结果通过界面进行输出,同时将识别记录存入后台数据库。其流程图如图3所示。

图3 车牌识别处理流程图

批量识别的文件夹中的图像是循环读取文件中的文件名称,将文件名称传入车牌识别系统。系统自动读取文件路径开始循环进行车牌识别,每识别一条数据就将数据同时在本地生成Excel以及在后台数据库生成对应记录,便于后续数据库搜索系统对数据进行查询操作。

3.3 车牌搜索模块功能实现

车牌搜索模块的主要实现方式是先将获取到目标车牌图像进行识别,得出结果,再批量识别本地车牌库中的车牌图像,将结果进行循环比对,当两者结果相同时,停止识别,进行结果输出。车牌搜索流程图如图4所示。

图4 车牌搜索流程图

3.4 车牌比对模块功能实现

车牌比对模块主要用于当车的位置被跟踪,当同一辆车经过不同的摄像头时,采集到的车牌图像因此不同,可以根据车牌比对系统对不同摄像头采集到的数据进行车牌比对,当出现相同的车牌时对结果进行输出。这便于在智能城市系统中对某一车辆进行追踪定位,其实现流程和车牌搜索流程类似。

3.5 车牌数据库搜索模块功能实现

车牌数据库搜索系统主要是将先前识别过的车辆的识别时间、识别结果、识别方式存储的结果进行查询,支持批量查询和关键字查询,这便于准确地搜索某一车辆进入营地的时间和位置,同时便于对历史数据进行管理。用户在界面内进行数据库登录后,便可直接输出所有车辆的出入记录,同时支持关键字查询。车牌数据库搜索流程图如图5所示。

图5 车牌数据库搜索流程图

4 系统测试

本系统使用黑盒测试方法进行功能测试。通过摄像头采集的车牌图像时,由于在Window下调用摄像头时会出现采集到的视频出现屏闪现象,但不影响识别结果。测试结果如图6所示,图6的结果输出能够准确地识别出车牌的位置的图像。

图6 车牌识别测试效果图

车牌搜索、比对、数据库系统进行测试时,基本无问题出现,能够准确地得到预期结果,其测试结果如图7、图8、图9所示。

图7 车牌搜索效果图

图8 车牌比对效果图

图9 车牌数据库搜索效果图

5 结论

本文在分析并参考现有的车牌识别技术基础上,选取颜色定位法、仿射变换法、直射投影法、SMV等合适的图像处理方法实现车牌的定位、字符分割和字符识别,并通过实例验证了所用方法的有效性。车牌批量识别是本系统的创新点,该功能便于系统的功能扩展,为进一步实现车牌识别系统智能化提供支持。

[1] 代武杰. 基于数字图像技术的车位识别方法的研究与应用[D]. 桂林: 广西师范大学,2018.

[2] 陈晨. 智能停车场管理系统的研究与设计[D]. 青岛: 青岛科技大学,2017.

[3] 么立宝. 基于Zynq的车牌识别系统的研究[D]. 大连:大连海事大学,2014.

[4] 张玉祖,罗素云. 倾斜车牌识别方法的研究[J]. 计算机与数字工程,2021,49(12): 2643-2657,2653.

[5] 焦慧华. 基于垂直投影分割法的车牌图像的字符分割研究[J]. 安徽电子信息职业技术学院,2021,20(117): 17-20.

[6] WANG D, TIAN Y, GENG W, et al. LPR-Net: Recognizing Chinese license plate in complex environments[J]. Pattern Recognition Letters, 2018, 11(1): 21-25.

[7] 毕波,邵永谦,孙冬军,等. 基于OpenCV的车牌识别[J]. 电子设计工程,2019,27(1): 37-41.

Implementation of License Plate Recognition System Base on Python

License plate recognition technology is mainly based on image segmentation theory and pattern identification theory. Through preprocessing the collected license plate image, locating the license plate, intercepting the image of the license plate, correcting the rectangle, and then normalizing the character segmentation. Finally, the characters on the license plate can be recognized through neural network or pattern recognition technology. On the basis of analyzing and referring to the existing license plate recognition technology, this paper uses Python + Open CV technology to select the appropriate image processing method to realize the license plate recognition function. In addition to the information processing function of license plate recognition, the system has high recognition accuracy and fast recognition speed. It can also recognize and process batch license plates, generate recognition record Excel files and upload them to the cloud service database, providing support for further intellectualization of license plate recognition system.

Pyhton; license plate recognition; character segmentation; SMV

TP27

A

1008-1151(2022)11-0016-05

2022-08-09

教育部社科规划项目(20YJAZH040);湖南省自然科学基金项目(2020JJ4327);湖南省社会科学成果评审委员会课题(XSP22YBZ054);福建省自然科学基金项目(2019J01751);湖南科技学院2022 年校级教学改革研究重点项目(XKYJ2022010)。

刘馨茹(2001-),女,湖南科技学院学生,研究方向为通信工程。

猜你喜欢

字符识别车牌字符
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
数字图像处理技术在车牌识别系统中的应用
HBM电子称与西门子S7-200系列PLC自由口通讯
第一张车牌
基于MATLAB 的车牌识别系统研究
融合字符及字符排列特征的铭牌识别方法
一种基于OpenCV的车牌识别方法
基于MATLAB的图片中字符的分割与识别