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)
未完》》》待续
Number plate recognition with Tensorflow的更多相关文章
- 《Mastering Opencv ...读书笔记系列》车牌识别(II)
http://blog.csdn.net/jinshengtao/article/details/17954427 <Mastering Opencv ...读书笔记系列>车牌识别(I ...
- 《Mastering Opencv ...读书笔记系列》车牌识别(I)
http://blog.csdn.net/jinshengtao/article/details/17883075/ <Mastering Opencv ...读书笔记系列>车牌识别(I ...
- opencv 视觉项目学习笔记(二): 基于 svm 和 knn 车牌识别
车牌识别的属于常见的 模式识别 ,其基本流程为下面三个步骤: 1) 分割: 检测并检测图像中感兴趣区域: 2)特征提取: 对字符图像集中的每个部分进行提取: 3)分类: 判断图像快是不是车牌或者 每个 ...
- 车牌识别1:License Plate Detection and Recognition in Unconstrained Scenarios阅读笔记
一.WHAT 论文下载地址:License Plate Detection and Recognition in Unconstrained Scenarios [pdf] github 的项目地址: ...
- OpenCV+TensorFlow图片手写数字识别(附源码)
初次接触TensorFlow,而手写数字训练识别是其最基本的入门教程,网上关于训练的教程很多,但是模型的测试大多都是官方提供的一些素材,能不能自己随便写一串数字让机器识别出来呢?纸上得来终觉浅,带着这 ...
- TensorFlow 一步一步实现卷积神经网络
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! TensorFlow 从入门到精通系列教程: http://www ...
- 交警也觉得妙——Python 识别车牌
车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下 车库门禁也会用到,基本上凡是需要对车辆进行身份检测的地方都会用到. 一些背景: 车牌 ...
- Analysis of requirement specification of parking management system
Analysis of requirement specification of parking management system PURPOSE OF THE SYSTEM The parking ...
- 目标检测---搬砖一个ALPR自动车牌识别的环境
目标检测---搬砖一个ALPR自动车牌识别的环境 参考License Plate Detection and Recognition in Unconstrained Scenarios@https: ...
随机推荐
- 看StackOverflow如何用25台服务器撑起5.6亿的月PV(微软的架构)
问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 ...
- ORA-25153: Temporary Tablespace is Empty
在一测试环境做测试的时候发生以下错误: SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'TT',me ...
- Markdown 语法和 MWeb 写作使用说明
---恢复内容开始--- # Markdown 语法和 MWeb 写作使用说明 Markdown 的设计哲学 Markdown 的目標是實現「易讀易寫」. 不過最需要強調的便是它的可讀性.一份使用 M ...
- Oracle常用操作-----(二)
Oracle主要类型函数: 单行函数:只能输入一行结果,返回一个结果.常见的单行函数有: 字符函数 数字函数 转换函数 日期函数 2.聚合函数:同时可以对多行数据进行操作,并返回一个结果.(AVG.S ...
- background-clip,background-origin
开门见山,简单来说 background-origin定义了background的绘制区域(就是从什么地方开始绘制),三个属性 padding-box 背景图像相对于内边距框来绘制border-box ...
- url.py中的配置问题
urlpatterns = [ url(r'^add$', calc_views.add, name='add'), url(r'^admin/', admin.site.urls), ...
- jquery mobile界面数据刷新
JQM里面当我们更新了某些页面标签(如: listview, radiobuttons, checkboxes, select menus)里的数据时,必须做refresh操作. 为什么必须做refr ...
- iOS 开发笔记-AFNetWorking https SSL认证
一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探 其实这么做的话还是不够的 . 我们还需要防止中间人攻击(不明白的自 ...
- vs2010下编译osip2和eXosip2的4.0.0版的静态库及搭建开发环境
转载于:http://blog.csdn.net/lbc2100/article/details/48293911 本文为参考网上的动态库的方式,进行静态库的实现,在此对动态库的作者表示感谢. 第一步 ...
- javax.servlet.ServletException: com.ibatis.sqlmap.client.SqlMapException: There is no statement named...问题
可能存在3种情况: 1.在xxx.xml文件中有两个标签的id命名相同: 2.DAO实现类方法中没有写对应xxx.xml的id名称: 3.实体映射文件xxx.xml未加入到sqlMap-Config. ...