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实现bitmap数据结构详解
Feb 17 Python
python下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
python中函数传参详解
Jul 03 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
python爬取微信公众号文章
Aug 31 Python
python实现一个简单的ping工具方法
Jan 31 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
May 11 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
Python3.10的一些新特性原理分析
Sep 15 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
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php简单的会话类代码
2011/08/08 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
微信支付扫码支付php版
2016/07/22 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
Vue渲染函数详解
2017/09/15 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
Python检查ping终端的方法
2019/01/26 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
水电工岗位职责
2014/02/12 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
小学语文教学反思范文
2016/03/03 职场文书