CASIA数据集格式转化代码
HWDB1.x:脱机单字,1.0~1.2 三个版本,数据格式为 .gnt
OLHWDB1.x:联机单字,1.0~1.2 三个版本,
HWDB2.x:脱机文本行,1.0~1.2 三个版本,数据格式为 .dgrl
OLHWDB1.x:联机文本行,1.0~1.2 三个版本,
gnt转png
import os
import numpy as np
import struct
from PIL import Image#data_dir = '/home/malidong/workspace/PatternRecognition/Chinese_character_recognition-master'
data_dir = 'D:/File/datasets/Handwriting Databases/Character Sample Data/Gnt'
#train_data_dir = os.path.join(data_dir, 'HWDB1.1trn_gnt')
train_data_dir = os.path.join(data_dir, 'Gnt1.0Test')
##test_data_dir = os.path.join(data_dir, 'HWDB1.1tst_gnt')def read_from_gnt_dir(gnt_dir=train_data_dir):def one_file(f):header_size = 10while True:header = np.fromfile(f, dtype='uint8', count=header_size)if not header.size: breaksample_size = header[0] + (header[1]<<8) + (header[2]<<16) + (header[3]<<24)tagcode = header[5] + (header[4]<<8)width = header[6] + (header[7]<<8)height = header[8] + (header[9]<<8)if header_size + width*height != sample_size:breakimage = np.fromfile(f, dtype='uint8', count=width*height).reshape((height, width))yield image, tagcodefor file_name in os.listdir(gnt_dir):if file_name.endswith('.gnt'):file_path = os.path.join(gnt_dir, file_name)with open(file_path, 'rb') as f:for image, tagcode in one_file(f):yield image, tagcode
char_set = set()
for _, tagcode in read_from_gnt_dir(gnt_dir=train_data_dir):#tagcode_unicode = struct.pack('>H', tagcode).decode('gb2312')tagcode_unicode = struct.pack('>H', tagcode).decode('gbk')char_set.add(tagcode_unicode)
char_list = list(char_set)
char_dict = dict(zip(sorted(char_list), range(len(char_list))))
print(len(char_dict))
import pickle
f = open('char_dict', 'wb')
pickle.dump(char_dict, f)
f.close()
train_counter = 0
test_counter = 0
for image, tagcode in read_from_gnt_dir(gnt_dir=train_data_dir):#tagcode_unicode = struct.pack('>H', tagcode).decode('gb2312')tagcode_unicode = struct.pack('>H', tagcode).decode('gbk')im = Image.fromarray(image)#dir_name = '/home/malidong/workspace/PatternRecognition/Chinese_character_recognition-master/data/train/' + '%0.5d'%char_dict[tagcode_unicode]dir_name = 'D:/File/datasets/Handwriting Databases/Character Sample Data/png/Gnt1.0Test_png/' + '%0.5d'%char_dict[tagcode_unicode]if not os.path.exists(os.path.join(dir_name)):os.mkdir(os.path.join(dir_name))im.convert('RGB').save(os.path.join(dir_name)+'/' + str(train_counter) + '.png')train_counter += 1"""
for image, tagcode in read_from_gnt_dir(gnt_dir=test_data_dir):tagcode_unicode = struct.pack('>H', tagcode).decode('gb2312')im = Image.fromarray(image)dir_name = '/home/malidong/workspace/PatternRecognition/Chinese_character_recognition-master/data/test/' + '%0.5d'%char_dict[tagcode_unicode]if not os.path.exists(os.path.join(dir_name)):os.mkdir(os.path.join(dir_name))im.convert('RGB').save(os.path.join(dir_name)+'/' + str(test_counter) + '.png')test_counter += 1
"""
dgrl转jpg
import os
import struct
from pathlib import Pathimport cv2 as cv
import numpy as np
from tqdm import tqdmdef read_from_dgrl(dgrl):if not os.path.exists(dgrl):print('DGRL not exis!')returndir_name, base_name = os.path.split(dgrl)label_dir = dir_name+'_label'image_dir = dir_name+'_images'if not os.path.exists(label_dir):os.makedirs(label_dir)if not os.path.exists(image_dir):os.makedirs(image_dir)with open(dgrl, 'rb') as f:# 读取表头尺寸header_size = np.fromfile(f, dtype='uint8', count=4)header_size = sum([j << (i*8) for i, j in enumerate(header_size)])# print(header_size)# 读取表头剩下内容,提取 code_lengthheader = np.fromfile(f, dtype='uint8', count=header_size-4)code_length = sum([j << (i*8) for i, j in enumerate(header[-4:-2])])# print(code_length)# 读取图像尺寸信息,提取图像中行数量image_record = np.fromfile(f, dtype='uint8', count=12)height = sum([j << (i*8) for i, j in enumerate(image_record[:4])])width = sum([j << (i*8) for i, j in enumerate(image_record[4:8])])line_num = sum([j << (i*8) for i, j in enumerate(image_record[8:])])print('图像尺寸:')print(height, width, line_num)# 读取每一行的信息for k in range(line_num):print(k+1)# 读取该行的字符数量char_num = np.fromfile(f, dtype='uint8', count=4)char_num = sum([j << (i*8) for i, j in enumerate(char_num)])print('字符数量:', char_num)# 读取该行的标注信息label = np.fromfile(f, dtype='uint8', count=code_length*char_num)label = [label[i] << (8*(i % code_length))for i in range(code_length*char_num)]label = [sum(label[i*code_length:(i+1)*code_length])for i in range(char_num)]label = [struct.pack('I', i).decode('gbk', 'ignore')[0] for i in label]print('合并前:', label)label = ''.join(label)# 去掉不可见字符 \x00,这一步不加的话后面保存的内容会出现看不见的问题label = ''.join(label.split(b'\x00'.decode()))print('合并后:', label)# 读取该行的位置和尺寸pos_size = np.fromfile(f, dtype='uint8', count=16)y = sum([j << (i*8) for i, j in enumerate(pos_size[:4])])x = sum([j << (i*8) for i, j in enumerate(pos_size[4:8])])h = sum([j << (i*8) for i, j in enumerate(pos_size[8:12])])w = sum([j << (i*8) for i, j in enumerate(pos_size[12:])])# print(x, y, w, h)# 读取该行的图片bitmap = np.fromfile(f, dtype='uint8', count=h*w)bitmap = np.array(bitmap).reshape(h, w)# 保存信息label_file = os.path.join(label_dir, base_name.replace('.dgrl', '_'+str(k)+'.txt'))with open(label_file, 'w') as f1:f1.write(label)bitmap_file = os.path.join(image_dir, base_name.replace('.dgrl', '_'+str(k)+'.jpg'))cv.imwrite(bitmap_file, bitmap)if __name__ == '__main__':dgrl_paths = Path('E:/CASIA/HWDB2.1Train').iterdir()dgrl_paths = list(dgrl_paths)for dgrl_path in tqdm(dgrl_paths):read_from_dgrl(dgrl_path)
参考:
CASIA-HWDB2.x 数据集DGRL文件解析(python)_dagongji10的博客-CSDN博客
CASIA数据集格式转化代码相关推荐
- element-UI级联选择器(Cascader 回显、默认显示项) - (返回结果的)格式转化 - 代码篇
el-cascader组件 :(返回结果的)格式转化 有时候会报错:TypeError: thsAreaCode.replace is not a function (bug截图如下) 说白了就是该组 ...
- VOC数据集格式转化
在做深度学习目标检测模型训练的时候,首先是要获取数据集,然后再对数据集进行标注.然后再把标注完的数据集划分为训练集和验证集,这样更加方便模型的训练和测试. 我们经常从网上获取一些目标检测的数据集资源标 ...
- 建立自己的voc数据集_将自己数据集转化成voc数据集格式并用mmdetection训练
一.准备自己的数据 拿nwpu数据集来举例,nwpu数据集文件夹中的内容是: images文件夹:存放数据图片 labelTxt文件夹:存放标注信息,images文件夹中每张图片都对应一个txt文件存 ...
- Json格式的数据集标签转化为有效的txt格式(data_coco)
Json格式的数据集标签转化为有效的txt格式(data_coco) 学习前言 分析json格式标签 转化为有效的txt格式 实现效果 学习前言 在参加许多目标检测比赛时,为了能够获得合理的评价结果, ...
- 【slam十四讲第二版】【课本例题代码向】【第九讲~后端Ⅰ】【安装Meshlab】【BAL数据集格式】【ceres求解BA】【g2o求解BA】
[slam十四讲第二版][课本例题代码向][第九讲~后端Ⅰ][安装Meshlab][BAL数据集格式][ceres求解BA][g2o求解BA] 0 前言 1 安装Meshlab: 三维几何网格处理 2 ...
- 制作自己的COCO格式数据集,附代码!
最近做了一个细胞检测的练习项目.之前的思路是参考其他大神的代码,后来发现其他人的代码有很多自定义的内容,包括读取的数据格式等等,小白表示看不懂所以改变思路,用最简单的方法--选择mmdetection ...
- python实现视频格式转化、调节视频播放速度(仅需三行代码)
python实现视频格式转化.调节视频速度 支持格式: MoviePy 能处理的视频是 ffmpeg 格式的,支持的文件类型:*.mp4 *.wmv *.rm *.avi *.flv *.webm * ...
- DDSM 数据集格式转换 LJPEG to PNG
文章目录 测试说明 1.DDSM 数据集的下载 1.1 安装WinSCP 1.2 下载数据 2.相关软件的安装 2.1 安装Cygwin 2.2 选择需要安装的package 2.3 验证Cygwin ...
- 行人重识别多个数据集格式统一为market1501格式
文章目录 market1501数据集介绍 数据集结构 数据集命名规则 格式转化 1.创建数据集文件夹 2.抽取market1501数据集 3.抽取CUHK03数据集 4.抽取MSMT17数据集 5.抽 ...
最新文章
- 【OpenCV】内核的形状函数使用记录
- (伪)datagridview里面id的自增长
- 新锐商务首选!HP EliteBook 745 G5图评
- linux系统无线怎么设置密码,LINUX终端下配置WPA2加密无线网络
- 如何使用 Kubernetes 监测定位慢调用
- 数据库分页和使用jstl标签替换分页的jsp代码
- 好看的a标签按钮样式
- 2020年最好用的手机是哪一款_2020年10款最好用的健康秤
- 添加删除程序里面没有添加IIS服务的选项
- 没革哪有新?看云计算在医疗行业的版图
- ASP.NET20 自定义配置节学习笔记(一)
- Fedora 9 NFS配置
- [libtorrent] linux 搭建 libtorrent 开发编译环境
- MFC银行卡卡号验证程序
- oracle用户删除了可以恢复吗,oracle_oracle误删数据恢复方法小结,如果用户误删/更新了数据后, - phpStudy...
- python-opencv图片合成视频
- 什么叫做信息安全?包含哪些内容?与网络安全有什么区别?
- 小红帽中用eclipse编译windows程序遇到的问题处理备忘录
- Creator3D:shader13_水面涟漪
- mac版+2018a+matlab,求助,mac系统 点击配置就报错,matlab版本2018a
热门文章
- oracle去掉0x00,ORACLE数据块转储及RDBA的转换
- linux ipv6模块,有关Linux ipv6模块加载失败的问题
- 理解数据库范式(转)
- Meta系列:我该如何报告Meta分析结果(先导篇)
- (一)mplayer与ffmpeg的调用过程
- 树莓派python编程入门与实战解压密码_树莓派Python编程入门与实战
- 又一里程碑,阿里首推Java技术成长笔记,业内评级“钻石级”
- TestDirector简介
- 关于Hantek6022BL虚拟示波器的在WIN10的安装(神坑)
- 基于Arduino开发板实现触摸式开关