一、下载数据集之SVT
SVT数据集下载地址
首先当然是用上面那个链接把SVT下载下来,压缩包中主要包含的是一个.m文件,一个.mat文件以及茫茫多的png文件,且分为训练集,测试集以及一个包含额外训练集的extra包,这里我就只用train文件夹进行训练,用test文件夹下的数据进行测试。由于项目中使用的是lmdb,且懒得再重新写一个Dataset,因此决定生成SVT的lmdb文件,同时也可以学习一下lmdb数据集具体的使用。
转换代码:
import h5py
import os
import tqdm
def get_box_data(index, hdf5_data): # 读取标签数据
"""
get `left, top, width, height` of each picture
:param index:
:param hdf5_data:
:return:
"""
meta_data = dict() # 先定义字典传入
meta_data['height'] = [] # 给字典名称分配位置
meta_data['label'] = []
meta_data['left'] = []
meta_data['top'] = []
meta_data['width'] = []
def print_attrs(name, obj):
vals = [] # 给文件名称分配位置
if obj.shape[0] == 1:
vals.append(obj[0][0])
else:
for k in range(obj.shape[0]):
vals.append(int(hdf5_data[obj[k][0]][0][0]))
meta_data[name] = vals
box = hdf5_data['/digitStruct/bbox'][index]
hdf5_data[box[0]].visititems(print_attrs)
return meta_data
def get_name(index, hdf5_data): # 读取名字
name = hdf5_data['/digitStruct/name']
return ''.join([chr(v[0]) for v in hdf5_data[name[index][0]].value])
folder='~/crnn.pytorch-master/data/train'
mat_data = h5py.File(os.path.join(folder, 'digitStruct.mat')) # 路径拼接+打开文件
size = mat_data['/digitStruct/name'].size
for _i in tqdm.tqdm(range(size)):
pic = get_name(_i, mat_data)
box = get_box_data(_i, mat_data)
file_handle = open('~/crnn.pytorch-master/data/train/'+str(_i+1)+'.txt', mode='w',encoding='utf-8')
# 创建变量名文件+存放在数据集的文件夹
label=box['label'] # 读取标签
for i in range(len(label)):
file_handle.write(str(label[i]))
file_handle.close() # 关闭文件