TensorFlow基于MNIST数据集实现车牌识别(初步演示版)


Posted in Python onAugust 05, 2019

在前几天写的一篇博文《如何从TensorFlow的mnist数据集导出手写体数字图片》中,我们介绍了如何通过TensorFlow将mnist手写体数字集导出到本地保存为bmp文件。

车牌识别在当今社会中广泛存在,其应用场景包括各类交通监控和停车场出入口收费系统,在自动驾驶中也得到一定应用,其原理也不难理解,故很适合作为图像处理+机器学习的入门案例。

现在我们不妨酝酿一个大胆的想法:在TensorFlow中通过卷积神经网络+mnist数字集实现车牌识别。

实际上车牌字符除了数字0-9,还有字母A-Z,以及各省份的简称。只包含数字0-9的mnist是不足以识别车牌的。故本文所做实验仅出于演示目的。

由于车牌数字是正体,而mnist是手写体,为提高识别率,需要从mnist图片集中挑选出形状比较规则工整的图片作为训练图片,否则识别率不高。作为参考,下图是我挑选出来的一部分较工整数字:

TensorFlow基于MNIST数据集实现车牌识别(初步演示版)

(如果你需要我挑选出来的图片,可以评论或私信我留下邮箱)

出于演示目的,我们从网上找到下面这张图片:

TensorFlow基于MNIST数据集实现车牌识别(初步演示版)

现在我们假设该车牌号为闽0-16720(实际上是闽O-1672Q),暂不识别省份简称,只识别0-16720。

上图经过opencv定位分割处理后,得到以下几张车牌字符。

TensorFlow基于MNIST数据集实现车牌识别(初步演示版)

现在我们通过如下代码,将这几张字符图片输入到上一篇博文《如何用TensorFlow训练和识别/分类自定义图片》中构建的网络:

license_num = []
 for n in range(2,8):
  path = "result/%s.bmp" % (n)
  img = Image.open(path)
  width = img.size[0]
  height = img.size[1]
 
  img_data = [[0]*784 for i in range(1)]
  for h in range(0, height):
   for w in range(0, width):
    if img.getpixel((w, h)) < 190:
     img_data[0][w+h*width] = 0
    else:
     img_data[0][w+h*width] = 1
 
  # 获取softmax结果前三位的index和概率值
  soft_max = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
  result = sess.run(soft_max, feed_dict = {x: np.array(img_data), keep_prob: 1.0})
  max1 = 0
  max2 = 0
  max3 = 0
  max1_index = 0
  max2_index = 0
  max3_index = 0
  for j in range(10):
   if result[0][j] > max1:
    max1 = result[0][j]
    max1_index = j
    continue
   if (result[0][j]>max2) and (result[0][j]<=max1):
    max2 = result[0][j]
    max2_index = j
    continue
   if (result[0][j]>max3) and (result[0][j]<=max2):
    max3 = result[0][j]
    max3_index = j
    continue
  license_num.append(max1_index)
 
  print ("softmax结果前三位概率:%s: %.2f%% %s: %.2f%% %s: %.2f%%"
    % (max1_index,max1*100, max2_index,max2*100, max3_index,max3*100))
 print ("车牌号为: %s" % license_num)

然后运行程序,结果如下:

TensorFlow基于MNIST数据集实现车牌识别(初步演示版)

可以看出,分类结果为016720,是正确的,而softmax计算结果可信度也是可以接受的。

后续将给出包含省份简称和字母A-Z的完整例子。

最后附上本文程序的完整代码(运行之前需要确保你的数据集和待识别图片的位深度都是8,也就是一个像素的颜色值用一个字节(8bits)表示,不然会出错):

PS:支持省份简称和字母的车牌识别程序详见《TensorFlow车牌识别完整版(含车牌数据集)》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中文编码问题小结
Sep 28 Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
使用Python设计一个代码统计工具
Apr 04 Python
详谈python在windows中的文件路径问题
Apr 28 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
三个python爬虫项目实例代码
Dec 28 Python
用python实现一个简单的验证码
Dec 09 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 #Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 #Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 #Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 #Python
Django ORM 查询管理器源码解析
Aug 05 #Python
python实现车牌识别的示例代码
Aug 05 #Python
使用python实现滑动验证码功能
Aug 05 #Python
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
PHP 遍历文件实现代码
2011/05/04 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
php随机显示图片的简单示例
2014/02/15 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
js控制input输入字符解析
2013/12/27 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
利用Python爬取可用的代理IP
2016/08/18 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
审计工作个人的自我评价
2013/12/25 职场文书
钳工实训报告总结
2014/11/04 职场文书
技术员岗位职责范本
2015/04/11 职场文书
年会主持人开场白台词
2015/05/29 职场文书
红歌会主持词
2015/07/02 职场文书
运动会200米广播稿
2015/08/19 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
js Proxy的原理详解
2021/05/25 Javascript
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL