中国石油大学毕业论文马成好.docx
《中国石油大学毕业论文马成好.docx》由会员分享,可在线阅读,更多相关《中国石油大学毕业论文马成好.docx(24页珍藏版)》请在冰点文库上搜索。
中国石油大学毕业论文马成好
中国石油大学(北京)远程教育学院
毕业设计(论文)
基于深度学习的车牌号识别系统
姓名:
马成好
学号:
183997
性别:
男
专业:
计算机科学与技术
年级:
2019春
学习中心:
北京
指导教师:
刘梦雪
2021年3月15日
基于深度学习的车牌号识别系统
摘要
近年来,随着科学技术的发展,处理器的性能也在一次次飞跃,更小的体积、更高的主频,更快的网速,赋予了PC和手机更多的使命;PC结合强大的显卡,不仅可以体验炫丽的游戏,也可以结合新的技术,实现更多功能,而手机AI引擎的加入,也带来了更多的新奇体验,本文结合PC与手机的各自优点,论述了基于深度学习的、可移动的、离线的车牌识别系统。
本文主要分为两大模块:
一、机器学习模块,主要阐述了核心识别算法的原理与训练方法,本算法基于开源算法:
Hyper-LPR高性能开源中文车牌识别框架①,进行数据集的训练与提取,并封装为SDK库,供Android调用。
二、识别模块,主要描述了对算法的运用,基于Android系统的App加载车牌识别SDK,进行图像识别;其特性有:
1、传统的Camera相机采集识别;2、通过WiFi连接只能眼镜获取数据并识别;3、通过USB连接视频采集设备并识别,实现可移动的,多元化的车牌识别系统,并可以根据需求,将实时识别的数据,上传到云端数据库,进行其它业务操作。
关键词:
Android;Opencv;FFmpeg;神经网络;车牌识别
第一章前言
1.1绪论
随着国民经济的发展,近年来,特别是2010年以来,中国乘用车销量以每年超过两千万的数量增长,稳居世界第一,车辆的迅速普及,随之带来的问题也愈发显现,交通拥堵、乱停乱放、尾气污染等负面新闻越来越多;与此同时,对车辆的管理,政府与企业也在出谋划策,比如交通灯、路口与路上违法拍照摄像头、道路两侧智能收费摄像头、停车场智能收费摄像头等各种基于识别设备的加入,给道路交通减少了很大的压力,也减少了道路的拥堵,在以上固定摄像头的基础上,本文将另辟蹊径,在固定摄像头无法触及的地方,加入移动智能执法,省去繁琐的部署,只需一人一机,即可实现移动快速执法,为有序畅通的交通环境,注入新的力量。
1.2目的
本文要实现的,是基于机器学习的车牌识别系统,确切来说,是将模型训练为为ARM架构(也可以训练为X86架构)的嵌入式设备可用的模型,并打包成SDK,用于移动端Android(或IOS)调用,来进行离线识别的车牌识别系统,支持调用手机摄像头、接入外置USB摄像头、接入带有WiFi功能的智能眼镜的摄像头、AR眼镜接入等,实现多种模式的移动AI识别,并且在有AI引擎加持的处理器,可以实现更快速的识别(<100ms,总体平均<200ms),不受网络限制,多种展现方式的识别,致力与解决道路最后一百米的科学管控。
第二章背景与开发环境介绍
2.1项目背景
每个人都有属于自己的身份证,同样,车牌号作为汽车上明显可见的唯一标识,既为汽车的身份证号。
汽车从上牌、上险、在道路上行驶、停车场收费、出入小区等等每一个场景都有车牌识别的需求,车牌识别的应用甚至比人的身份证识别使用频次更高,如果车牌乱改、遮挡等,属于严重违反交规行为。
日常我们常见的车牌有蓝色、绿色、黄色等。
蓝底白字白框线的蓝牌最为常见,小型汽车号牌,用于中型以下载客、载货汽车和专项作业车。
绿底的为新能源汽车专用号牌,严格来说,不完全为绿底,常见小客车新能源号牌为渐变绿色,大型新能源号牌为黄绿双拼色(地区代码部分为黄色,号码部分为绿色)。
大型汽车号牌黄底黑字黑框线,用于中型(含)以上载客、载货汽车和专项作业车、半挂牵引车、电车等。
如图(2-1),(2-2),(2-3),(2-4),(2-5),(2-6)。
图2-1常见蓝牌、新能源牌、大型车牌
图2-2大型新能源和普通新能源乘用车牌
图2-3常见的警用车牌
图2-4常见的领馆使馆车牌
图2-5港澳双车牌
图2-6教练车牌
2.2算法背景
本篇论文算法是基于开源的基于深度学习算法--HyperLP,HyperLP是高性能的中文车牌识别库,由北京智云视图科技有限公司开发并开源,与较为流行的其他开源框架相比,它的检测速度、鲁棒性和多场景的适应性都要好于目前的开源框架,HyperLPR可以识别多种中文车牌,包括单行蓝牌,单行黄牌,新能源车牌,白牌(白色警用车牌),武警车牌,使馆车牌,港澳车牌,教练车牌等。
HyperLRP支持的开发语言有:
PHP、C/C++、Python,操作系统平台有:
Windows/Mac/Linux/Android/IOS,基本涵盖了目前常用的开发语言和操作系统平台,易于上手。
2.3应用背景
本应用基于我司警用智能眼镜系列App开发,并加入识别算法,可进行车牌、OCR等其它识别功能,目前主要运用在Android系统上,基于模块化方式,方便功能增减,未来根据需求变化,也可以增加其它功能,或运行在IOS或其它系统。
2.3.1Android系统介绍
AndroidInc.于2003年10月由安迪·鲁宾、利奇·米纳尔、尼克·席尔斯、克里斯·怀特在加州帕罗奥图创建。
于2005年7月11日AndroidInc.被美国科技企业Google收购,并成立开放手持设备联盟持续领导与开发。
2007年11月,Google与84家硬件制造商、软件开发商及电信营运商成立开放手持设备联盟来共同研发Android,随后,Google以Apache免费开放源代码许可证的授权方式,发布了Android的源代码,开放源代码加速了Android普及,让生产商推出搭载Android的智能手机,Android后来更逐渐拓展到平板电脑及其他领域上。
2010年末数据显示,仅正式推出两年的Android操作系统在市场占有率上已经超越称霸逾十年的诺基亚Symbian系统,成为全球第一大智能手机操作系统。
在2014年GoogleI/O开发者大会上Google宣布过去30天里有10亿台活跃的Android设备,相较于2013年6月则是5.38亿。
2017年3月,Android全球网络流量和设备超越MicrosoftWindows,正式成为全球第一大操作系统。
2.4环境介绍
环境主要指开发与运行环境,主要涉及两大块内容,算法环境和应用环境,俗话说,工欲善其事必先利其器,开发环境的完善,是工作的良好开端。
2.4.1算法环境
HyperLPR算法库,可以运行在Windows/Linux/IOS多端,但主流平台,都是选择Linux,Linux有着非常强的扩展性,灵活,方便,同时,机器学习算法需要依赖较强的性能,否则,数据的训练将是一项非常之耗时的工作,具体如下:
处理器:
Intel8代i5及以上
显卡:
Nvidia-1080Ti
内存:
32GB
系统版本:
Ubuntu18.04
Python:
2.7/3.4
Keras:
>=2.0.0
Theano:
>0.9orTensorflow>1.1.x
Numpy:
>1.10
Scipy:
>0.19.1
Scikit-image:
0.13.0
PIL:
1.1.x
Opencv:
3.4(需要DNN框架)、
2.4.2应用环境
早期Android开发环境较为复杂,需要Eclipse和NDK等多项配合,随着Android的迭代,开发工具也基本由Eclipse转为AndroidStudio,它界面友好,调试方便,为官方首推工具:
系统版本:
Ubuntu18.04
工具版本:
Androidstudio4.0.2
JDK:
1.8
NDK:
14b
手机版本:
HuaweiMate20-980Ai处理器
第三章算法设计流程
3.1算法特性
HyperLPR是基于端到端的Sequence模型,无需进行字符分割,识别速度更快,比如:
720P,单核Intel2.2GCPU的平均识别时间<=90ms,识别率较高,仅仅针对车牌ROI在EasyPR数据集上,0-error达到95.2%,1-error识别率达到97.4%(指在定位成功后的车牌识别率),可识别的类型有常见的蓝牌、黄牌、新能源车牌等,具体如下图(3-1),并根据算法不断优化,可识别种类也在持增加中。
图3-1当前可至此车牌种类
3.2设计流程
第一步.使用opencv的HAARCascade检测车牌大致位置
第二步.Extend检测到的大致位置的矩形区域
第三步.使用类似于MSER的方式的多级二值化+RANSAC拟合车牌的上下边界
第四步.使用CNNRegression回归车牌左右边界
第五步.使用基于纹理场的算法进行车牌校正倾斜
第六步.使用CNN滑动窗切割字符
第七步.使用CNN识别字符
3.3数据整理
由于用于训练车牌数据涉及到法律隐私等问题,本项目对外展示使用开源数据集。
传统车牌检测和识别都是在小规模数据集上进行实验和测试,所获得的算法模型无法胜任环境多变、角度多样的车牌图像检测和识别任务。
为此,中科大团队建立了CCPD数据集,这是一个用于车牌识别的大型国内停车场车牌数据集。
该数据集在合肥市的停车场采集得来,采集时间早上7:
30到晚上10:
00。
停车场采集人员手持AndroidPOS机对停车场的车辆拍照并手工标注车牌位置。
拍摄的车牌照片涉及多种复杂环境,包括模糊、倾斜、阴雨天、雪天等等。
CCPD数据集一共包含将近30万张图片,每种图片大小720x1160x3。
一共包含8项,具体如下表(3-1):
表3-1CCPD数据集说明
类型
图片数
说明
ccpd_base
199998
正常车牌
ccpd_challenge
10006
比较有挑战性的车牌
ccpd_db
20001
光线较暗或较亮
ccpd_fn
19999
距摄像头较远或较近
ccpd_np
3036
没上牌的新车
ccpd_rotate
9998
水平倾斜20-50°,垂直倾斜-10-10°
ccpd_tilt
10000
水平倾斜15-45°,垂直倾斜15-45°
ccpd_weather
9999
雨雪天或雾天的车牌
总共:
283037张车牌图像
部分照片示例如下:
CCPD数据集没有专门的标注文件,每张图像的文件名就是对应的数据标注(label)。
例如:
026-95_112-154&383_386&473-286&473_177&454_153&383_363&402-0_0_22_27_27_33_16-37-16.jpg
由分隔符'-'分为几个部分:
1)026为区域
2)95_112对应两个角度,水平95°,竖直112°
3)153&383_386&473对应边界框坐标:
左上(153,383),右下(386,473)
4)386&473_177&454_154&383_363&402对应四个角点坐标
5)0_0_22_27_27_33_16为车牌号码映射关系如下:
第一个为省份0对应省份字典皖,后面的为字母和文字,查看ads字典.如0为A,22为Y....
具体省份对应标签如下:
{
"皖":
0,
"沪":
1,
"津":
2,
"渝":
3,
"冀":
4,
"晋":
5,
"蒙":
6,
"辽":
7,
"吉":
8,
"黑":
9,
"苏":
10,
"浙":
11,
"京":
12,
"闽":
13,
"赣":
14,
"鲁":
15,
"豫":
16,
"鄂":
17,
"湘":
18,
"粤":
19,
"桂":
20,
"琼":
21,
"川":
22,
"贵":
23,
"云":
24,
"西":
25,
"陕":
26,
"甘":
27,
"青":
28,
"宁":
29,
"新":
30
}
字母和数字对应的标签如下:
{
"a":
0,
"b":
1,
"c":
2,
"d":
3,
"e":
4,
"f":
5,
"g":
6,
"h":
7,
"j":
8,
"k":
9,
"l":
10,
"m":
11,
"n":
12,
"p":
13,
"q":
14,
"r":
15,
"s":
16,
"t":
17,
"u":
18,
"v":
19,
"w":
20,
"x":
21,
"y":
22,
"z":
23,
"0":
24,
"1":
25,
"2":
26,
"3":
27,
"4":
28,
"5":
29,
"6":
30,
"7":
31,
"8":
32,
"9":
33
}
3.4模型训练
3.4.1粗定位方法
车牌定位的方法有很多种,在学术界它其实是属于场景文字检测的一种特定情况。
考虑到字符间垂直边缘比较密集,有基于边缘的方法,考虑到字符个体间的特征,有基于个体字符特征发的方法,考虑到车牌这种共性特征比较强烈的目标,有基于目标检测的方法。
有学者对这些方法做了一一的评判。
下面引用表格截图说明,如图(3-2),(3-3)是这些方法的各个表现能力对比。
不过由于每篇论文采用的数据集不同。
其准确率并不能比较。
HyperLPR用了使用了基于目标检测的方法进行车牌粗定位,总体而言获得了不错的效果。
图3-2不同检测方法对比
图3-3不同检测方法对比
3.4.2训练方法
本算法使用的目标检测器是基于OpenCV的Haar级联分类器。
其速度也达到了不错的效果,对于移动端的大车牌基本可以实时定位。
我们使用了大概4700张正样本车牌车12000张负样本进行了分类器训练。
我们使用了OpenALPR的Train-Detector,来进行训练Opencv的Haar级联分类目标检测器。
正样本可以通过手动crop或者使用easypr或者hyperlpr的模块进行crop裁剪。
负样本在traindetector目录下已经包含了一些基本的负样本,我们在多次训练后发现,使用这些负样本训练出来的检测器在垂直边缘密集的地方误检特别高。
这时候我们就要使用类似于HardSampleMining的策略将这些部分的误检区域crop出来。
加入到分类器中训练。
3.4.3使用训练完的检测器
检测器的使用很简单。
使用opencv中的cascadeclassifier进行多尺度检测即可。
检测结果展示如下图(3-4):
图3-4检测样本
3.5车牌初识
传统的车牌识别过程往往是这样的:
车牌定位->车牌判断->车牌字符的分割->车牌字符的识别
这种方法有个好处就是,仅仅需要较少的字符样本即可用于分类器的训练。
在光照,相机条件好的情况下也能取得较好的效果。
现在大多数商业车牌识别软件采用的也是这种方法。
但是在某些恶劣的自然情况下,车牌字符的分割和识别变得尤其的困难,传统的方法并不能取得很好的结果。
这时候我们就能考虑下是否能整体一起识别。
当然我们注意到车牌字符的数量是固定的,对于中国车牌而言,车牌一直是7个字符(传统普通蓝牌)。
我们就可以采用多标签分类的方法直接输出多个标签,如图(3-5)。
图3-5
多标签分类
注意:
由于训练的时候样本存在一些不均衡的问题,一些特殊车牌存在一定识别率低下的问题,如(使馆/港澳车牌),会在后续的版本进行改进。
基于训练完毕的模型,我们进行最简单demo小试牛刀,为保持格式完整采用截图方式,见下图(3-6):
图3-6调用识别样例
运行结果,见下图(3-7):
图3-7
样例识别结果
第四章App架构及运行流程
4.1App架构
我们初步的Demo工程,采用传统单工程+MVC架构,随着时间推移,发现并不能满足需求,每次代码的改动,就会牵一发而动全身,导致后期维护成本加大,面临重构,重构后代码采用组件化方式架构,具体优势有很多,这里不在赘述,整体架构如下图(4-1):
图4-1
模块化架构基本模型
4.2G10智能眼镜介绍
G10警用智能眼镜,为我司设计生产的移动可穿戴设备,可单独作为执法记录工具,通过按键控制,独立使用,实现拍照和录像功能,并通过USB或WiFi导出数据;若连接App端,可在手机完成3个功能:
1.查看实时拍摄画面;2.查看拍摄过的视频/照片;3.可控制眼镜拍照/录像;本论文中,主要使用眼镜作为视频输入设备,采集数据流,进行车牌识别,可以解放双手,快速、隐蔽记录。
G10眼镜设计图与功能介绍如下图(4-2)所示
图4-2眼镜主要功能介绍
4.3数据采集模块
数据采集模块为程序各项功能的主入口,数据的入口,根据不同Button,跳转不同采集模式。
1.首先需要输入激活码,进行程序激活认证,否则以下连接选项不可选择。
2.WiFi连接
手机可以通过WiFi热点,直接和眼镜建立连接,
3.USB连接
4.本机连接,既为直接调用手机自带摄像头进行识别,此功能为备选项,若急需快速识别,可以使用此选项,省去连接步骤,快速识别。
图(4-3)为程序选择页面截图
图4-3激活及选择入口
下面将依详细介绍各接入方式方法。
4.3.1WIFI连接方式
WiFi连接主要是连接智能眼镜G10,首先需要眼镜设置为热点模式,此时通过App操作手机,连接到G10热点,并将手机自己的热点信息发送给眼镜,眼镜收到热点信息,自动切换为WiFi模式,去搜索手机热点,同时,手机端App引导用户,将手机切换到热点模式,眼镜搜索并连接到手机热点,完成信息交换,建立连接,此时眼镜作为RTSP-SERVER,手机通过RTSPLibrary库,去获取流数据,并将回调数据返回,识别。
下图(4-4)为具体连接流程图。
图4-4手机/眼镜配对流程图
4.3.2USB连接方式
WiFi热点接入为我们App主要推荐方式,但在眼镜没电时,或者有其它摄像头需求接入,也可以选择USB连接模式接入,点击USB连接进入等待页,此时插入USB摄像头或者眼镜(眼镜连接到手机会自动切入USBCamera模式),手机提示USB授权,允许后,进入主页,拉取USBCamera数据,开始识别。
4.3.3手机直连方式
手机直连,顾名思义就是直接调用手机摄像头进行识别,此方式传统且快速,适合在有限时间内进行抓怕,或者简单演示使用等。
4.4识别模块
识别模块,将Prj-Linux项目下model中的模型文件全部copy到Android中assets的pr目录下,并在程序启动画面,进行预加载到缓存,初始化识别模型。
其中,识别模块中主要依赖Opencv模块,Opencv对拿到的AndroidBitmap或者byte字节流数据进行预处理、转换成识别接口所需数据格式,进行处理。
在程序中,上接4.2,数据连通后,会有实时采集数据不断接入到回调数据中,回调数据根据当前识别模式(本程序已集成车牌识别、车型识别、人脸识别等多项识别,此项目着重介绍车牌识别模块),进行相应识别,识别结果实时显示到屏幕控件。
4.4.1数据处理与识别
将4.3章中,传入的Bitmap数据,经过Opencv转换为Mat数据并传入已写好的JNI接口,返回识别的图像信息,既为我们所需要的车牌信息结构体,包含车牌的位置、类别、牌号等信息,将结果解析并排列到屏幕展示,如图(4-5),点击每个识别结果,可进入大图展示当时识别详情,包含时间、地点、图片等详细信息。
注:
因为训练的新能源车牌数据集有限,识别结果较蓝牌略差,但如果数据集充分,可得到同样的效果。
图4-5通过App识别并展示结果
在设置菜单中,可通过设置高中低三种阈值,进行不同模式识别,高阈值时,识别准确率高,速度100ms左右,中阈值时,准确率与速度均衡,低阈值时,准确率有所降低,识别速度提升一倍,适合初步筛查,筛查后切换高阈值,适合精准定位。
第五章思维拓展
5.1PC端用途
1.将算法和程序根据需求部署到PC端,可以安置到小区、酒店、商场、路边收费等公共场所,服务器性能高、容量大,可以进行大量数据学习与比对,进行实时识别并统计数据,或者加入车型、人脸识别,更加精确、准确,服务大众。
5.2移动端用途
移动端,结合现有的多种连接方式,可更加发散,接入更多设备,比如AR识别,将程序安装到带有Android系统的AR设备,结合算法,将实时识别的信息:
车牌合法性、是否办证、是否违章等信息投射到AR显示,科幻感满满,并实时与后台同步,省去执法记录仪烦恼,提供交警工作效率,更好、更快服务大众,监督管理交通,让执法更加透明、精准,让出行环境更加通畅。
5.3算法其它用途
根据现有的训练方法和模型,可以推导出其它模型,比如农作物识别,程序部署到无人机,大规模实时识别农作物生长情况,病虫害等,大大提高工作效率;比如花卉识别,根据健康花卉,识别现有花卉的营养情况,所以,只要有明确的需求和数据,就可以训练出更多有意义的模型,供我们使用。
第六章结论
通过本次项目,让我从一个单纯的应用开发,明白了更多和机器学习相关的知识,并产生浓厚的兴趣;本文通过两大部分:
算法和应用,展示了一种新颖的、多元化的车牌识别系统,不但算法上,区别于传统分割式车牌识别,效率更高更精准,同时不同的接入方式,更展现了其灵活性、易用性,适应性。
同时,由于新能源及其它稀少车牌的数据量不足,识别准确率明显不如传统车牌,这也是使用学习方法的弊端,要想准确率高,必先数据先行,同时前期不同数据的准备,也是需要做大量工作。
通过思维拓展,机器学习还可以为我们带来更多意想不到的用途,让AI更加人性,让生活更加便捷,让我们一起为未来加油吧!
参考文献
[1]王晓华.《OpenCV+TensorFlow深度学习与计算机视觉实战》[M].北京:
清华大学出版社.
[2]安德里安.凯勒(美)著.《学习Opencv3》[M].刘昌祥,译.北京:
清华大学出版社.
[3]刘歧,赵文杰.《FFmpeg从入门到精通》[M].机械工业出版社.
[4]郭霖.《第一行代码Android第3版(图灵出品)》[M].人民邮电出版社.
[5]姚蕾.《车牌识别系统法规的软件设计与实现》[A],上海交通大学硕士学位论文,2009.12.
[6]刘丽丽.《车牌识别中的图像分割技术研究》[J].科技通报,2017,第33卷(4):
125-129.
[7]王梦伟.《基于深度学习的车辆特征识别系统研究与实现》[A].电子科技大学硕士论文,2016.
[8]冯慧娜.《车牌识别系统中车辆定位与字符分割技术的研究》[D].电子科技大学,2010.
[9]曾荻清.《视觉无人机高速公路违章识别技术的研究及实现》[A].南京邮电大学硕士论文,2020-12-16.
[10]秦丽娟,魏巍.《基于ssd的车牌检测算法》[J].电子世界,2020-11-15.
致谢
时光飞逝,又一次大学生涯接近毕业,虽然全程是线上教学,但也能感受到各位老师都是在用心讲解,虽然不同与讲台,但也能将知识传授给大家,疫情当下,大家也都在倡导这种线上教学的方式,零接触,我们一直在践行。
在此,由衷感谢学校的各位老师,为我们在后台默默的辛勤付出,每次考试的数据维护,一次次群里的通知、打电话,以及帮我们批改作业