【阿里天池新人赛】之街景字符识别(1)

【阿里天池新人赛】之街景字符识别(1)

正式赛时间:2020.5.14-2020.6.24
比赛网址:https://tianchi.aliyun.com/competition/entrance/531795/introduction

1.赛题数据

赛题来源自Google街景图像中的门牌号数据集(The Street View House Numbers Dataset, SVHN),并根据一定方式采样得到比赛数据集。
数据集报名后可见并可下载,该数据来自真实场景的门牌号。训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置;为了保证比赛的公平性,测试集A包括4W张照片,测试集B包括4W张照片。
在这里插入图片描述

2.数据标签

所有的数据(训练集、验证集和测试集)的标注使用JSON格式,并使用文件名进行索引。如果一个文件中包括多个字符,则使用列表将字段进行组合。
在这里插入图片描述
在这里插入图片描述

3.解题思路

赛题思路分析:赛题本质是分类问题,需要对图片的字符进行识别。但赛题给定的数据图片中不同图片中包含的字符数量不等,如下图所示。有的图片的字符个数为2,有的图片字符个数为3,有的图片字符个数为4。
在这里插入图片描述
1.简单入门思路:定长字符识别
2.专业字符识别思路:不定长字符识别
3.专业分类思路:检测再识别

4.数据下载(download_data.py)

注册后,官方提供一个包含所有数据下载链接的.csv文件,借助python文件可以实现一键下载。

import pandas as pd
import os
import requests
import zipfile
import shutil

# 查看基本信息
links = pd.read_csv('data/mchar_data_list_0515.csv')
print(links.head())

# 下载文件
for i, link in enumerate(links['link']):
    file_name = links['file'][i]
    print(file_name, '\t', link)
    file_name = 'data/' + file_name
    if not os.path.exists(file_name):
        response = requests.get(link, stream=True)
        # 分块下载
        with open(file_name, 'wb') as f:
            for chunk in response.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)

zip_list = ['mchar_train', 'mchar_test_a', 'mchar_val']

# 解压文件
for little_zip in zip_list:
    if not os.path.exists('data/' + little_zip):
        zip_file = zipfile.ZipFile('data/' + little_zip + '.zip', 'r')
        zip_file.extractall(path='data/')

# 解压后的_MACOSX文件夹里边的内容不可读,这是上传者的mac压缩文件时自动生成的,无用,删去即可
if os.path.exists('data/' + '/' + '__MACOSX'):
    shutil.rmtree('data/' + '/' + '__MACOSX')

在这里插入图片描述

5.标注信息查看(check_mask.py)

数据下载完后,我们可以简单的尝试看看json的标注文件如何对应标签。

import json
import numpy as np
import cv2
import matplotlib.pyplot as plt
train_json = json.load(open('data/mchar_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('data/mchar_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([])
plt.show()

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值