在前几天写的一篇博文《如何从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]>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)
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。