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: ...
随机推荐
- Range对象理解,浏览器兼容性,获取鼠标光标位置
一.关于浏览器的兼容性 目前主要有3种关于range的类似的对象,分别是W3C range 对象,Mozzlia selection ,ie TextRange 关于这三种的区别,请查看文档 http ...
- PythonDay02
>三目运算符 简单的if---else---语句 result = 1234 if 1 > 2 else 4321 print(result) >集合 set集合,是一个无序且不重复 ...
- kafka 命令行操作
1.创建主题(topic) bin/kafka-topics.sh --create --zookeeper m6:2181 --replication-factor 1 --partitions 1 ...
- ubuntu 16.04 忘记root密码的处理方法
1.开机按ESC,出现如下界面 2.按回车键进入如下界面,然后选中有recovery mode的选项 3.按e进入如下界面,并找到图中红色框的recovery nomodeset,并在这一行的后面输入 ...
- 检测浏览器是否支持cookie方法
cookie 摘自: http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html Cookie是什么? Cookie 是一小段文本信息 ...
- GDB调试多线程
先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID. 前面有*的是当前调试的线程. th ...
- 使用 Redis 实现排行榜功能 (转载 https://segmentfault.com/a/1190000002694239)
排行榜功能是一个很普遍的需求.使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择. 一般排行榜都是有实效性的,比如"用户积分榜".如果没有实效性一直按照总榜来排,可能榜 ...
- QQ 图片
http://wpa.qq.com/pa?p=2:QQ号码:45 查看QQ是否在线,或者图片,在这里,其他的另行百度. <!-- tencent://message/?uin=763999883 ...
- Linq To Sqlite 一一二二
说在前头 之所以写下这些文字,主要是因为使用LINQ的同志们都觉它的美好(至于有多美好,各位心里知道,我就不在描述了,如果你是你还不了解LINQ,园子里有大把的文章),微软老哥只提供了自家的SQLSe ...
- 04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:以计数器为例学会简单的时序逻辑电路设计 实验平台:芯航线FPGA核心板 实验原理: 时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入 ...