计算机视觉——图像检索

题目理解

题目名称

零基础入门CV之街道字符识别

题目目标

通过这道题走入计算机视觉的世界,主要针对竞赛选手上手视觉赛题,提高对数据建模能力。

题目任务

以计算机视觉中字符识别为背景,预测街道字符编码,题目数据采用公开数据集SVHN。

训练数据

数据标签

对于训练数据每张图片将给出对应的编码标签,和具体的字符框的位置,可用于模型训练:

Field Description top 左上角坐标X height 字符高度 left 左上角坐标Y width 字符宽度 label 字符编码

字符坐标具体如下:

评测指标

具体计算公式如下: Score=编码识别正确的数量/测试集图片数量

读取数据

JSON中标签的读取方式:

import json
train_json = json.load(open(../input/train.json))

# 数据标注处理
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(../input/train/000000.png)
arr = parse_json(train_json[000000.png])

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([])

解题思路

思路分析:题目本质是分类问题,需要对图片的字符进行识别。但题目给定的数据图片中,不同图片中包含的字符数量不等。因为题目数据集中大部分图像中字符个数<=6,所以将题目抽象成一个定长六个字符的识别问题。字符23填充为23XXXX,字符241填充为241XXX。

经过填充之后,原始的题目可以简化为六个字符的分类问题, 在每个字符的分类中会进行11个类别的分类,假如分类为填充字符,则表明该字符为空。

总结

综上所示,本次题目是一个简单的字符识别问题,入门可以先学习定长字符识别的思路,逐渐入门计算机视觉。PS:还是第一次写博客,其实内容很多都是参考了学习手册,和朋友打赌尝试了一下,希望能坚持下来。

经验分享 程序员 微信小程序 职场和发展