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. jqGrid使用记录

    一.要引用的文件 要使用jqGrid,首先页面上要引入如下css与js文件. 1.css <link href="/css/ui.jqgrid.css" rel=" ...

  2. RML-怎样的语句会被归纳为同一类型(Unique Batches)

    我们知道使用RML工具分析跟踪数据(.TRC),其中的"Unique Batches",就是一个关于Batch级别的报表,Batch级别的报表针对的是存储过程或是一个TSQL Ba ...

  3. PRML读书笔记——2 Probability Distributions

    2.1. Binary Variables 1. Bernoulli distribution, p(x = 1|µ) = µ 2.Binomial distribution + 3.beta dis ...

  4. Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted

    1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...

  5. ubuntu15.04安装Chrome浏览器

    首先到: https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 下载最新的安装文件. 然后: sudo a ...

  6. GDB调试多线程

    先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID. 前面有*的是当前调试的线程. th ...

  7. calico docker 应用实例

    在上一篇文章<quay.io/coreos/etcd 基于Docker镜像的集群搭建>中,介绍了ETCD集群的搭建.在此基础上,我们进一步实践calico docker的应用. PaaS ...

  8. Hadoop之hive的drop table恢复

    一.引言: 快下班的时候我开发同事问能不能将hive中drop掉的数据恢复过来,我记得是有开回收站的,当时我回答说可以恢复的. 二.恢复过程: 在之前我有对hadoop的回收站有过了解,就是将hdfs ...

  9. Mac下安装LNMP(Nginx+PHP5.6)环境

    [转自:http://avnpc.com/pages/install-lnmp-on-osx] 安装Homebrew 最近工作环境切换到Mac,所以以OS X Yosemite(10.10.1)为例, ...

  10. xcode 创建项目 勾选 git 出现警告

    1. 解决方法: 在mac机上找到终端工具  >> 这里先介绍下使用Command-line. 1,下载Git installer,地址:http://git-scm.com/downlo ...