Number plate recognition with Tensorflow

2015年5月 

在此处  http://matthewearl.github.io/2016/05/06/cnn-anpr/#rd

寻觅出 使用TenserFlow的车牌号识别 技术。

感觉很有必要看看。于是我把作者的这个翻译了一下。

Created byMatthew Earlon May 06, 2016.Discuss on reddit! 

(104 points / 13 comments)

Introduction

在过去的一段时间里,我深深的陷入了深度学习之中,尤其是卷积神经网络(convolutional neural networks)。最近一篇论文脱颖而出---google发布的“来自街景的数字识别”(Google’sMulti-digit Number Recognition from Street View.)。这篇论文表述一个用于提取街景的数字的系统。该系统使用了一个端到端的神经网络。然后作者继续解释相同的网络如何可以用人类层面的准确性 打败Google自己的CAPTCHA system 。(原句:The authors then go on to explain how the same network can be applied to breaking Google’s own CAPTCHA system with human-level accuracy.)

为了实现神经网络中获取实践经验,我决定设计一个系统用于解决相似的问题:汽车的车牌识别(识别美国的车牌)。我做这件事情的理由有三 :

1. 我应该使用与google论文 相同或者相似的网络架构。google的架构被证明同样可以很好的解决CAPTCHAs , 这就有理由去假设它在识别车牌方面表现的也很好。拥有一个很好的网络架构会极大的简化。我把这看作学习的绳子。

2. 我可以很轻松的生成训练数据。在训练神经网络的时候,主要的问题是: 要求对大量数据进行标签。成千上万的标签过的图像往往需要一个合适的训练网络。幸运的是英国车牌的统一性标志着我可以合成训练数据。

3.好奇心。传统的ANPR系统依靠手写体算法对车牌进行定位、归一化、分割、字符识别等。这些系统趋向于成千上万条线长。这很有趣。我可以用最少的专业领域知识、最少的代码来开发好的系统。

对于这个progject , 我使用了 Python , TensorFlow ,openCV 和Numpy 。源代码在这里(https://github.com/matthewearl/deep-anpr)

Inputs, outputs and windowing

(输入、输出和加窗)

为了简化(simplify) 生成的训练图像和减少计算消耗,作者决定神经网络的操作对象是128*64的灰度图像。

128*64是作为输入分辨率(resolution)。这是允许的训练时间和适度的资源下,所允许的最小的分辨率。但同时也是车牌号最大可读性的分辨率:(图像大小如下)

使不同尺度的滑动窗口的方法探测较大图像的车牌号(原句:In order to detect number plates in larger images a sliding window approach is used at various scales)


右侧的图像大小是128*64 , 这是在神经元中见到的输入。而左侧显示的是原始图像的滑动窗口的输入。

网络的每一个窗口应该输出:

1. 输入图像中可能是车牌的窗口图像(就像上图动画中绿色边框标记的那样。)

2.每一个数字可能出现的位置。 即:在这7字符(PS:车牌号有7位)的每一个位置上返回一个36字符的概率分布。(对于这个project,我们假定车牌刚好只有七位数字,这与大多数的英国车牌一样)

以下是当且仅当车牌存在的情况(A plate is considered present if and only if:):

1.车牌完全落在图像里面。

2.图像中车牌的宽度要小于图像的80% ,而且车牌的高度要小于图像的87.5%。

3.车牌的宽度要大于图像宽度的60%, 车牌的高度要大于图像宽度的60%。

我们可以用一个滑动窗口每次移动8个像素,并且放大 图像,每次方法的级别在√2 (根号2)倍内,这样不会错过任何车牌而且在同时不会产生多余匹配的车牌。(PS:原文:With these numbers we can use a sliding window that moves 8 pixels at a time, and zooms in2√2times between zoom levels and be guaranteed not to miss any plates, while at the same time not generating an excessive number of matches for any single plate.)所出现的副本会在后序的步骤中做出解释。

Synthesizing images(合成图像)

训练任何一个神经网络都需要提供合适的训练集合。在本案例中,将会输出像素为128*64大小的图像集合。以下是为project的训练数据中的几个训练数据的例子:

预计输出:HH41RFP 1.

预计会输出: FB78PFD 1.

预计会输出:JW01GAI 0(这是因为车牌没有完全在图像中)

预计输出 AM46KVG 0(这是因为车牌太小)

预计会输出  XG86KIO 0 (这是因为车牌太大)

预计会输出 XH07NYO 0 (这是因为没有车牌)

预计的输出由两部分组成(如上所示)。第一部分是网络中应该(should)产生的输出,第二部分是代表删除结果是否存在。对于已经标签的数据却被视为不存在的原因,我已经在上面的括号里面描述了这些情况。

以下是产生案例图像的过程:

车牌号的文本选在和调色板都是随机选择的,但是文笔的颜色一定会比体哦啊色斑的颜色深。之所以这样做,是为了木房现实世界中光纤的变化。“噪声”是在最后一个阶段添加的,不仅仅考虑到了实际的生活中传感器中存在的噪声,而且还避免了神经网络过度依赖大幅边缘定义,而将其看做一片输入。(原文but also to avoid the network depending too much on sharply defined edges as would be seen with an out-of-focus input image)

未完》》》待续

posted @ 2016-05-17 20:11  修雨轩陈  阅读(972)  评论(0编辑  收藏  举报