入门CV街道字符识别
入门CV街道字符识别
赛题解读
1.本赛题是以街道字符为赛题数据集,该数据集来自于收集的SVHN街道字符,并进行了匿名处理。
2.该数据总共包含了训练数据集3万张,验证数据集1万张,每张图片包含了颜色图像,对应的编码类别和具体的位置信息,测试集数据test_A有4万张图片,测试集数据集有4万张图片。
3.对于训练集数据编码标签和字符具体位置如图
字符样例
4.从原始图片来看,图片是以0-9的数字组成,可以看出我们任务是判断图片中的数字,总共分类为10类,是一个多任务学习,可以将每个街道字符切分成单个数字,如图:
5.由于街道字符数字长度不一样,所以我们要对街道字符进行预设方案:a.使用定长字符进行识别,将缺失的字符用某一个符号代替,让街道字符变成定长。b.不定长字符识别,直接把街道字符看做一个整体来进行识别,如用CRNN模型。c.目标检测再识别,先将每个字符数字识别出来,然后再进行识别,如SSD模型或者YOLO模型。
6.评价指标
accuracy=预测识别正确的图片/测试集图片数量
7.读取图片数据
import json
import matplotlib.pyplot as plt
train_json=json.load(open(r"F:\input\mchar_train.json"))
#<div STYLE='page-break-after:always;'></div>
#数据标注出来
def parse_json(d):
arr=np.array([d['top'],d['height'],d['left'],d['width'],d['label']])
arr=arr.astype(int)
return arr
img=cv2.imread(r"F:\input\train\000000.png")
arr=parse_json(train_json['000000.png'])
# img_bgr = cv2.imread(image_dir)
# print(img_bgr)
# plt.imshow(img_bgr)
plt.figure(figsize=(10,10))
plt.subplot(1,arr.shape[1]+1,1)
plt.imshow(img)
plt.xticks([]);plt.yticks([])
for idx in range(arr.shape[1]):
plt.subplot(1,arr.shape[1]+1,idx+2)
plt.imshow(img[arr[0, idx]:arr[0, idx]+arr[1, idx],arr[2, idx]:arr[2, idx]+arr[3, idx]])
plt.title(arr[4,idx])
plt.xticks([]);plt.yticks([])
8.个人心得,以前从事过多个纯数字型的数据挖掘赛事,从未涉及过图像分类识别这块,觉得这次学习是一个很好的机会,以往自己也是学过深度学习的基础,这次终于可以派上用场拿来实践了,也感谢团队,大家相互学习,不知道的知识查阅资料,检索文档,还有出错的地方大家都能够相互帮助。