当前位置: 代码迷 >> 综合 >> Datawhale零基础入门CV赛事(街景字符编码识别)-Task1 赛题理解
  详细解决方案

Datawhale零基础入门CV赛事(街景字符编码识别)-Task1 赛题理解

热度:61   发布时间:2023-11-25 04:25:56.0

2020.5.19

背景

零基础入门CV赛事- 街景字符编码识别是Datawhale联合天池举办的CV入门学习赛,赛题以计算机视觉中字符识别为背景,要求选手预测真实场景下的字符识别,这是一个典型的字符识别问题。通过这道赛题可以引导大家走入计算机视觉的世界,主要针对竞赛选手上手视觉赛题,提高对数据建模能力。

学习目标

  • 理解赛题背景和赛题数据
  • 完成赛题报名和数据下载,理解赛题的解题思路

了解赛题

  • 赛题数据

赛题来源自Google街景图像中的门牌号数据集(The Street View House Numbers Dataset, SVHN),点此进入链接,并根据一定方式采样得到比赛数据集。只能使用给定数据集,不能用原始数据集。

训练集数据:3W张,每张照片包括颜色图像和对应的编码类别和具体位置;

验证集数据:1W张,每张照片包括颜色图像和对应的编码类别和具体位置;

测试集A:4W张。(本人是A)

测试集B:4W张。

下载后:

  • 数据标签

对于训练数据每张图片将给出对于的编码标签,和具体的字符框的位置(训练集、测试集和验证集都给出字符位置),可用于模型训练:(我想说的是,我下载的数据集中没看到测试集给出的lable和字符框位置,见上图

  • 评测指标

评价标准为准确率,选手提交结果与实际图片的编码进行对比,以编码整体识别准确率为评价指标,结果越大越好,具体计算公式如下:

  • 数据读取

数据标签用json.load()读取,下面的代码可以读取图片文件和标签文件,然后获取图像位置,再把框里的图像单独显示出来。

# -*- coding: utf-8 -*-'''
@FileName: read_data_1.py
@Software: PyCharm'''import numpy as np
import json
import cv2
import matplotlib.pyplot as plt
train_json = json.load(open('./data/train/mchar_train.json'))# 数据标注处理
def parse_json(d):arr = np.array([d['top'], d['height'], d['left'],  d['width'], d['label']])arr = arr.astype(int)print(arr.shape[1])  # 一张图有几个数return arrif __name__ == "__main__":img = cv2.imread('./data/train/mchar_train/000000.png')# 打印出读取图片的大小print(img.shape)arr = parse_json(train_json['000000.png'])print(arr)plt.figure(figsize=(10, 10))plt.subplot(1, arr.shape[1]+1, 1)plt.imshow(img)plt.xticks([])plt.yticks([])# 切出每个数字在subplot显示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([])# 显示plt.show()

  • 解题思路

我看到这个数据集后便认为是一个数字(检测+识别)的问题,先检测出数字然后在识别出来。

因为框架没有限制我想先用自己比较熟悉的框架去,比如说Keras,然后找相应的开源代码去跑个结果看看。

文档给的解题思路。

  相关解决方案