前言
此博客仅记录自己摸索的过程中的一些基本过程,后续优化后的最终的结果:识别率达到99%以上,集成定位+识别模型移植到Android端的单张测试速度32ms,完全达到了商用级别,这个就不公开了。
一字符识别
本节的任务是识别车牌字符,前提是已经定位好了车牌。至于车牌定位见系列一
本节我就不详细讲了,
先看看数据长啥样的
讲讲思路:
1.首先还是要生成tensorflow训练的tfrecord文件。运行gen_tfrecord.py
.其中我们提取每张图像和对应标签保存下来(这里涉及到字符与数字标签的一个对应字典)
部分代码如下:通过classText_to_classLabel函数将字符处理成数字标签
classes = ['皖', '沪', '津', '渝', '冀', '晋', '蒙', '辽', '吉', '黑', '苏', '浙', '京',
'闽', '赣', '鲁', '豫', '鄂', '湘', '粤', '桂', '琼', '川', '贵', '云', '藏', '陕', '甘',
'青', '宁', '新', '警', '学', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',
'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X','Y', 'Z',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'O']
classes_index=dict(zip(classes,range(len(classes))))
def classText_to_classLabel(text_label):
text_label=list(text_label)
label=[classes_index[i] for i in text_label]
return label
2.有了输入数据后,就考虑网络模型的搭建。网络输入为56*224的大小。输出为68。其实就是一个多分类的CNN。不过是用的深度卷积+点卷积的方式代替传统cnn。网络结构在mobilinet_v2.py
中。代码是在以前的基础上改的,所以名字没改,里面也有多余的部分(我太懒了,忽略即可)。
3.运行train.py训练。7W数据训练了一个小时,实在是难等。
4.运行evauate.py预测结果。代码中写了两个函数。一个随机选了一张测试,另一个计算测试集准确率。(这里的准确率是一个车牌所有字符都预测对才算对)