街景字符识别比赛心得

1 赛题背景

Datawhale与天池联合发起的零基础入门系列赛事,赛题是一个典型的街景字符识别问题。

2 赛题数据

赛题来源自Google街景图像中的门牌号数据集(The Street View House Numbers Dataset, SVHN),并根据一定方式采样得到比赛数据集。其中训练集3W张,验证集1W张,测试集4W张。其中,训练集和验证集的label是json文件,

2.1 数据标签

对于训练数据每张图片将给出对于的编码标签,和具体的字符框的位置(训练集、测试集和验证集都给出字符位置),可用于模型训练:

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

具体表示如下:
在这里插入图片描述

3 评价指标

选手提交结果与实际图片的编码进行对比,以编码整体识别准确率为评价指标。任何一个字符错误都为错误,最终评测指标结果越大越好,具体计算公式如下:
Score=编码识别正确的数量/测试集图片数量

4 读取数据

json格式的label数据以及图片读取

import matplotlib.pyplot as plt
import json
import numpy as np
import cv2
# 读取json文件---》json包读取
train_json = json.load(open('/alidataset/mchar_train.json'))

# 数据标注处理
def parse_json(d):
   arr = np.array([
       d['top'], d['height'], d['left'],  d['width'], d['label']
   ])
   arr = arr.astype(int) # 强制转换类型为int
   return arr

# CV2读取图片,返回类型:ndarray:(height,width,channels)
img = cv2.imread('/alidataset/mchar_train/mchar_train/000001.png') 
arr = parse_json(train_json['000001.png'])
#arr.shape=(5,2)
#img.shape=(83, 199, 3)

plt.figure(figsize=(8, 8)) # 创建画布
# 显示原图的子图,subplot表示将位置划分为1*3的子图,该子图占第一个位置;arr.shape[1] = 1表示图中有一个数字
plt.subplot(1, arr.shape[1]+1, 1) 
plt.imshow(img) # 展示原图,imshow的参数就是img矩阵
plt.xticks([]); plt.yticks([]) # 不显示坐标

for idx in range(arr.shape[1]): 
   plt.subplot(1, arr.shape[1]+1, idx+2) # 为图片中的数字创建画布子图
   # 通过arr中标注好的数字的位置,将img切片并展示为图片形式。相当于是img[top:top+height, left:left+width]
   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([])#不显示坐标
   

图示如下 :
在这里插入图片描述

5 解题思路

类似于MINIST,是对图片中的数字进行识别;与之不同的是,该图片中可能不止有一个数字,因此可以将赛题理解为是一个不定长字符识别的问题。
参考datawhale提供的思路如下:

5.1 简单入门思路:定长字符识别

可以将赛题抽象为一个定长字符识别问题,在赛题数据集中大部分图像中字符个数为2-4个,最多的字符个数为6个。因此可以对于所有的图像都抽象为6个字符的识别问题,字符23填充为23XXXX,字符231填充为231XXX。经过填充之后,原始的赛题可以简化为6个字符的分类问题。在每个字符的分类中会进行11个类别的分类,假如分类为填充字符,则表明该字符为空

5.2 专业字符识别思路:不定长字符识别

在字符识别研究中,有特定的方法来解决此种不定长的字符识别问题,比较典型的有CRNN字符识别模型。
在本次赛题中给定的图像数据都比较规整,可以视为一个单词或者一个句子。

5.3 专业分类思路:检测再识别

因为最近在跑yoloV3,所以当时拿到赛题的第一想法就是用YOLO完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值