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)

未完》》》待续

Number plate recognition with Tensorflow的更多相关文章

  1. 《Mastering Opencv ...读书笔记系列》车牌识别(II)

    http://blog.csdn.net/jinshengtao/article/details/17954427   <Mastering Opencv ...读书笔记系列>车牌识别(I ...

  2. 《Mastering Opencv ...读书笔记系列》车牌识别(I)

    http://blog.csdn.net/jinshengtao/article/details/17883075/  <Mastering Opencv ...读书笔记系列>车牌识别(I ...

  3. opencv 视觉项目学习笔记(二): 基于 svm 和 knn 车牌识别

    车牌识别的属于常见的 模式识别 ,其基本流程为下面三个步骤: 1) 分割: 检测并检测图像中感兴趣区域: 2)特征提取: 对字符图像集中的每个部分进行提取: 3)分类: 判断图像快是不是车牌或者 每个 ...

  4. 车牌识别1:License Plate Detection and Recognition in Unconstrained Scenarios阅读笔记

    一.WHAT 论文下载地址:License Plate Detection and Recognition in Unconstrained Scenarios [pdf] github 的项目地址: ...

  5. OpenCV+TensorFlow图片手写数字识别(附源码)

    初次接触TensorFlow,而手写数字训练识别是其最基本的入门教程,网上关于训练的教程很多,但是模型的测试大多都是官方提供的一些素材,能不能自己随便写一串数字让机器识别出来呢?纸上得来终觉浅,带着这 ...

  6. TensorFlow 一步一步实现卷积神经网络

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! TensorFlow 从入门到精通系列教程: http://www ...

  7. 交警也觉得妙——Python 识别车牌

    车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下 车库门禁也会用到,基本上凡是需要对车辆进行身份检测的地方都会用到. 一些背景: 车牌 ...

  8. Analysis of requirement specification of parking management system

    Analysis of requirement specification of parking management system PURPOSE OF THE SYSTEM The parking ...

  9. 目标检测---搬砖一个ALPR自动车牌识别的环境

    目标检测---搬砖一个ALPR自动车牌识别的环境 参考License Plate Detection and Recognition in Unconstrained Scenarios@https: ...

随机推荐

  1. Javascript AMD学习

    我们知道在其它编程语言中, 都有包(命令空间)的概念, 帮助我们更好的管理代码结构. 如java中的package, python中的module. 但是在js语言中, 在一个页面执行环境内, 所有引 ...

  2. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布

    (新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...

  3. .Net分布式架构(一):Nginx实现负载均衡

    一:负载均衡简介 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. ...

  4. hadoop datanode启动失败

    问题导读: 1.Hadoop出现问题时,该如何入手查看问题?2.datanode无法启动,我们该怎么解决?3.如何动态加入DataNode或TaskTracker? 一.问题描述当我多次格式化文件系统 ...

  5. JAVA并行框架:Fork/Join

    一.背景 虽然目前处理器核心数已经发展到很大数目,但是按任务并发处理并不能完全充分的利用处理器资源,因为一般的应用程序没有那么多的并发处理任务.基于这种现状,考虑把一个任务拆分成多个单元,每个单元分别 ...

  6. Leetcode: Minimum Genetic Mutation

    A gene string can be represented by an 8-character long string, with choices from "A", &qu ...

  7. Ubuntu文件操作命令

    1.工具栏放下面或者左边的命令 gsettings set com.canonical.Unity.Launcher launcher-position Left gsettings set com. ...

  8. POJ 3683 Priest John's Busiest Day(2-SAT 并输出解)

    Description John is the only priest in his town. September 1st is the John's busiest day in a year b ...

  9. 使用jquery的imagecropper插件做用户头像上传 兼容移动端

    在移动端开发的过程中,或许会遇到对图片裁剪的问题.当然遇到问题问题,不管你想什么方法都是要进行解决的,哪怕是丑点,难看点,都得去解决掉. 图片裁剪的jquery插件有很多,我也测试过很多,不过大多数都 ...

  10. Form 数据库的顺序

    form buidler 中数据库的上下排列顺序也很重要,开发中无心把LINE的数据块放在HEADER数据块之上, 导致在新增数据的时候先去insert  LINE数据块(没有生成HEADER_ID的 ...