目标检测搬砖一个自动车牌识别的环境的烂笔头

1. 引入新颖的CNN,可以检测和纠正单一图像中的多个失真的车牌,将纠正后的车牌图片送入ocr方法中,得到最后的车牌文字

2. 对来自不同区域的车牌进行了人工标注:使用一个由真是数据和人工生成的数据组成的车牌进行训练, 并使用与目标区域相似的字体类重新训练ocr网络

3.扩展了现有的OCR方法,针对巴西车牌进行开发。

结果: 不仅仅在巴西车牌上的准确率很高,在欧洲和台湾车牌生也获得了很高的召回率和准确率

PS: 台湾车牌和欧洲车牌是由数组和字母构成的,其实和巴西车牌的构成是一样的,唯一所有不同的是车牌图像的比例可能会有所不同。但这种图像预处理的时候统一设置图片就好了

常见的商业软件大多是在场景受限的情况下对车牌进行识别的,例如停车场、收费站的监控,这些场景都很固定,摄像的角度和车牌 但是对于宽松的场景,比如执法人员手中的相机或者是智能机拍下的图片,照片的倾斜度可能会很高,对于这些商业软件而言,识别起来就很困难。

因此,本论文提出一个完整的ALPR系统,可以在多变的场景下表现良好。

总的来说就是: 目前很多ALPR系统对正面拍摄车牌照片识别效果良好,但是在多变的角度和场景(光线)下车牌往往是倾斜的,导致识别的效果并不如意。因此,本论文提出一个完整的ALPR系统,可以在多变的场景下表现良好。

数据集中存在的倾斜车牌

1. 介绍了一种新颖的神经网络,能够检测出不同场景环境下的车牌;并在OCR之前对变形的进行校正。

2. 利用真实数据合成多样的车牌,用于训练。手动标注的样本了少于200个,并且是从头开始训练网络。

ALPR 的主要任务是 在图像中找到并识别车牌(license plates );通常情况下会分为4个子任务序列:

而子任务3和4可以看做OCR;  所以一共有3个子任务:vehicle detection, license plate detection, OCR.  这篇文章也是按照这三个子任务的顺序进行展开的,如下图所示。

具体的说就是:基于YOLOv3 的车辆识别 --> 车牌的检测和校正--> 车牌的OCR识别:

示例流程

根据经验,较大的输入图像上是可以检测较小的物体,但是这会增加了计算量。车牌属于小目标的检测,通常情况下在有车的图片上,往往会伴随着车牌,(即:有车牌的地方一定能检测出车辆),所以可以先检测车辆。

这是因为在正视图上,车牌的大小和车辆的bounding box的比例较大;而在斜视图或者侧视图上,车牌大小和车辆的比例较小。因此,需要将倾斜的视图调整到正面的视图上,以保持车牌区域的可识别性。简而言之就是:倾斜视角的车牌面积较小,将车牌变成正视图的视角后,车牌面积会增大,从而增加车牌的识别率。

倾斜视角的车牌面积较小,将车牌变成正视图的视角后,车牌面积会增大,从而增加车牌的识别率。

在车牌校正方面,虽然3D姿态估计是方法可以确定校正的尺寸和调整的尺度,但是本文提出了一种基于车辆boundingbox的纵横比(aspect ratio)的一种方法,简单又高效。首先需要设置resizing factor,即当boundingbox的aspect ratio接近于1的时候,影响因子会较小;当aspect ratio 增加的时候,影响因子也会增加。

缩放因子的计算方式如下:

(1)中,Wv和 Hv是识别车辆后的图像大小, Dmin和Dmax是常量,分别是288和608

其中:Wv和Hv是车辆的bounding box的宽度和高度。

注意: 由于Dmin ≤ fsc min(Wv, Hv) ≤ Dmax,所以Dmin和Dmax为调整车辆图片的维度大小划定了范围,经过尝试之后最佳的值是Dmin=288; Dmax=608

fsc代码实现如下:

缩放因子用于计算后期的图像的宽高:

使用 YOLOv3的主要原因是:

1 . 检测速度很快(大约是70 FPS );

2. 识别的准确率较高,在PASCAL VOC数据集中的测试结果是76.8% mPA.

PS :

Yolov3 相比于Faster RCNN 确实很快,但是也有致命的缺陷: 不能识别出特别小的物体。如果在实际应用中需要在一张很大的图像上识别很小的车,建议重新训练

另外,YOLOv2 中具有车牌的物体不仅仅是cars, 还有bus和truck;这两个类别在程序中确被忽略的。

使用YOLOv2 用于车辆检测:本文没有对YOLO进行更改和改进,只是将网络该网络作为车辆检测的工具,将汽车和公交车这两类进行合并,忽略了yolo里面的其他类别。

将检测出的车辆图片裁剪并且进行调整,作为车牌识别的输入。

测出的正样本(车辆),将会被resized ,送入车牌检测模块。resize 因子已经在上一节给出,通过这种缩放计算以后,包含有车辆的图片会被统一成大小为 288*608大小的图片;

车牌本质上是附加在车上的矩形平面物体。为了充分的利用车牌的形状优势,本文提出了一种 扭曲平面检测网络(Warped Planar Object Detection Network., WPOD NET)。该网络可以学习识别不同扭曲程度的车牌,并学习回归仿射变换的系数,将就扭曲的车牌unwarps成正面视图下的矩形形状。WOPD的检测流程如下图所示。

经过WPOD网络之后是一个8通道的特征图(图片中显示的是6通道,应该是8)

在特征图上提取扭曲的车牌,首先会设置固定大小的单元(m, n)

如果该单元的目标概率大于给定的阈值(threshold),那么部分回归参数用于构建放射变换矩阵,将虚拟正方形区域转换成车牌的区域

该网络的结构总共21层卷积,其中14层是内部残差块(ResBlock);所有的卷积核大小均为固定大小的3*3;除了识别块(Detection)以外,其他的激励函数全部是ReLu;包含有4个2*2大小的max pooling,stride=2,这样可以使得输入的维度减少了16倍(2*2*4);最后在识别模块有两个并行的卷积层

具体结构如下图(fig4)所示,左侧是网络的整体结构,右侧是ResBlock和Detection块的结构。

可以看出来,在检测出车牌以后,还会对倾斜的车牌进行校正;现在需要关注的部分有两点:1. WPOD是如何设计的?2. 如何进行车牌校正的?

3. 为什么会在最后一层使用两个并行的卷积层?

检测车牌的整个流程

好,回答第一个问题: WPOD的设计:

网络结构如下,可以看出:整个网络是Conv( 包含res-block ) +Maxpooling +DETECTION构成的; 一共有21个卷积层,其中14个是residualblocks,所有的卷积层的filter/kernal大小都是3*3;并且每个Conv操作都会使用到ReLu;另外有4个Maxpooling的,kernel=2*2, stride=2,

DETECTION上是两个并行的网络(粉红色的区域); 第一个是使用softmax函数去推断概率; 第二个是回归仿射参数,而不需要激活,使用恒等式F(X)=x作为激活函数

WPOD net 结构详情

res_block的实现:

如下图所示,WPOD Net本身是没有纠正车牌的能力;

作者是构建仿射矩阵,将虚拟方框(白色的方框)转换为lp区域。 WPOD net会输出一个8-channel的feature map,以及编码对象的概率和放射变换的参数。为了能够获取扭曲的车牌,首先在box的中心设置一个固定大小的虚框。如果以(m,n)单元为中心的虚框的目标概率大于检测的阈值,说明白色方框覆盖的区域里 有车牌,同时为扭曲的车牌进行仿射变换。

对扭曲车牌检测的效果图:

问题3. 为什么会在最后一层使用两个并行的卷积层?

到现在为止,我们还没有回答这个网络的最关键的问题:文中提到的warp net放射变换参数是从哪里得到的?

网络最后的并行卷积层有着不同的使命:

第一个卷积模块是:用于计算物体的概率的,使用了softmax作为激励函数。

第二个卷积模块是:用于获取仿射参数的,没有使用激励函数

两个卷积学习的目标是根据Loss function 而定的,因此还需要知道loss function 是如何实现的。

第一个卷积模块是:用于计算物体的概率的,使用了softmax作为激励函数。

第二个卷积模块是:获取仿射参数的,没有使用激励函数

假设

问题4. 如何实现仿射变换的?仿射变换恢复的扭曲图片和3D恢复的扭曲图片有什么区别?

1.解释仿射变换

2. 解释仿射变换实现的车牌校正

3. 解释仿射变换与3D扭曲图片之间的区别

这部分字符分割和识别是使用改进的YOLO模型。

数据集是通过使用合成和扩增数据来处理世界各地不同区域的LP特征,在该工作中大大地扩大了训练数据集。 人工创建的数据包括将7个字符的字符串粘贴到纹理背景上,然后执行随机转换,如旋转、平移、噪声和模糊。

车牌数据集的制作流程如下图所示:

制作好的数据如下入所示:

这种综合数据的使用极大地提高了网络的泛化能力,使得完全相同的网络对世界不同地区的LPs都有很好的应用效果。

这部分涉及OCR  , 后期会专门设置一个专题阐述OCR的识别算法

这篇论文的实用性应该较高;但就创新性而言,并没有太多改进。值得一提的是对扭曲的车牌进行了仿射变换,使得车牌可以恢复正常矩形的形状 。

在论文的最后,作者给出测试的结果,通过对比5中不同的车牌检测数据集可以看出这篇论文的综合测试的正确率较高。

输出的日志:

最终的识别结果:

-------------------------------------------------------------------------------------------------------------------------------------

THE END
0.训练车牌数据集(umpy.ndarray格式数据)实现车牌照片字符识别并利用CNN-OCR算法训练车牌数据集评估模型并实现车牌照片字符识别,训练中的车牌数据集是Numpy.ndarray格式数据,当然也可以进一步生成图片,方便直接查看。 输出结果 gen_sample之后 1、训练感悟 22:58训练记录:我勒个去,跑了半天,准确度还没上来,啊啊啊,要疯了…… jvzq<84yyy4489iqe0ipo8hqpvkov87312?3:86:19=27A569a?:9>55357/uqyon
1.CNN——基于CNN的车牌号识别cnn车牌识别CNN——基于CNN的车牌号识别 本文介绍了一个基于卷积神经网络(CNN)的车牌识别系统。该系统将车牌识别任务分解为省份、发牌单位及字母数字识别三个子任务,并详细描述了数据集构建、图像预处理、CNN模型设计与训练过程。 car-board-reg 基于CNN的车牌号识别jvzquC41dnuh0lxfp0tfv8ooj3?:88ftvkimg8igvcomu8=:;778;@4
2.构建高效中文车牌识别系统的全面数据资源简介:车牌字符集是开发和优化车牌识别系统的关键资源。本文探讨了包括数字、英文字母和中国各省份简称在内的最全中文车牌字符集的内容和用途,以及如何利用这些数据进行模型训练和车牌识别。介绍了数据集格式、训练深度学习模型的方法、模型评估与优化过程,以及中文车牌字符集在智能交通系统等领域的广泛应用。 jvzquC41dnuh0lxfp0tfv8|gkzooa<:977;748ftvkimg8igvcomu866466::<<
3.Python+Tensorflow+CNN实现车牌识别的示例代码python在噪声干扰情况下,车牌字符分割较困难,此次车牌识别是将车牌7个字符同时训练,字符包括31个省份简称、10个阿拉伯数字、24个英文字母('O'和'I'除外),共有65个类别,7个字符使用单独的loss函数进行训练。 (运行环境:tensorflow1.14.0-GPU版) 二、生成车牌数据集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 jvzquC41yy}/lk:30pku1jwvkerf1:<3847/j}r
4.36个省车牌名称和字母国内并没有36个省,而是34个省级行政区,包括23个省、5个自治区、4个直辖市、2个特别行政区;其34个行政区的车牌简称和字母代表如下: 1、北京市(京) 京A(含公交)、京B(出租车)、京C、京D(警车)、京E、京F、京G、京H、京J、京K、京L、京M 、京N、京P、京Q(城区)、京Y (远郊区) jvzquC41yy}/{xtlkc4dqv4cum5266637;967;=:23:97>7;454ivvq
5.TensorFlow基于MNIST数据集实现车牌识别(初步演示版)python现在我们不妨酝酿一个大胆的想法:在TensorFlow中通过卷积神经网络+mnist数字集实现车牌识别。 实际上车牌字符除了数字0-9,还有字母A-Z,以及各省份的简称。只包含数字0-9的mnist是不足以识别车牌的。故本文所做实验仅出于演示目的。 由于车牌数字是正体,而mnist是手写体,为提高识别率,需要从mnist图片集中挑选出形状jvzquC41yy}/lk:30pku1jwvkerf1:;8;68/j}r
6.t83cv101出入口车牌识别网络一体化摄像机操作手册.pdft83-cv101出入口车牌识别网络一体化摄像机操作手册.pdf,T83-CV101 出入 口车牌识别高清网 络一体化摄像机操 作手册 T83-CV101 出入口车牌识别高清网络一体化摄像机操作手册 非常感谢您购买我司产品,如您有任何疑问或需求请随时联系我们。 本手册适用于以下产品: 序号 产品jvzquC41oc~/dxtm33>/exr1jvsm1;5431633>4:2861996582642=<0ujzn
7.56个省车牌简称,全国车牌号识别地区大全车牌号是由省的简称+各个地级市的字母代码+5位车牌号组成。车牌号的第一位就是省的简称,以上就是各个省的简称。车牌号的第二位是英文字母,代表的是该车辆所在的地级市。地级市会根据排名来划分ABCDEFG等,5位车牌号是有三种规则来进行编码的,全部都使用阿拉伯数字、2位英文字母加3位阿拉伯数字,但是O和I不可以jvzquC41yy}/{xtlkc4dqv4cum54/B8966943?7947925:5;0jznn
8.TensorFlow车牌识别完整版(含车牌数据集)车牌字符数据集博主分享了如何使用TensorFlow进行完整的车牌识别,包括省份简称和字母,提供了车牌数据集(约4000张图片)及训练识别代码,通过训练可以实现高准确率的车牌号码识别。 在之前发布的一篇博文《MNIST数据集实现车牌识别--初步演示版》中,我们演示了如何使用TensorFlow进行车牌识别,但是,当时采用的数据集是MNIST数字手写体,只能分类jvzquC41dnuh0lxfp0tfv8XjcfuxP:ljv1gsvrhng1jfvjnnu1=97@63:9
9.【南京车牌识别停车场系统丨车牌识别道闸机丨车牌识别收费系统它是一个以特定目标为对象的专用计算机视觉系统,能从一幅图像中自动提取车牌图像,自动分割字符,进而对字符进行识别,它运用***的图像处理、模式识别和人工智能技术,对采集到的图像信息进行处理,能够实时准确地自动识别出车牌的数字、字母及汉字字符,并直接给出识别结果,使得车辆的电脑化监控和管理成为现实。 图为:车牌识别原理 识别核心汲取 jvzquC41yy}/eqnpc0io1lmwtwqpwsn15:>27A>;674ivvq
10.使用深度学习进行自动车牌检测和识别这可以通过人工代理或特殊智能设备实现,这些设备将允许在真实环境中通过车辆牌照识别车辆。在智能设备中,,提到了车辆牌照检测和识别系统。车辆牌照检测和识别系统用于检测车牌,然后识别车牌,即从图像中提取文本,所有这一切都归功于使用定位算法的计算模块,车牌分割和字符识别。车牌检测和读取是一种智能系统,由于其在以下jvzquC41yy}/gnuy0eun0ls1|j{bpufp14654B;0jvsm