• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 19次浏览 已收录 0个评论

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

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

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

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

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

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

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

现在我们通过如下代码,将这几张字符图片输入到上一篇博文《如何用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]&g<strong>本文来源gao@daima#com搞(%代@#码网</strong>t;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)

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

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

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:TensorFlow基于MNIST数据集实现车牌识别(初步演示版)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址