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数据集格式转化代码相关推荐

  1. element-UI级联选择器(Cascader 回显、默认显示项) - (返回结果的)格式转化 - 代码篇

    el-cascader组件 :(返回结果的)格式转化 有时候会报错:TypeError: thsAreaCode.replace is not a function (bug截图如下) 说白了就是该组 ...

  2. VOC数据集格式转化

    在做深度学习目标检测模型训练的时候,首先是要获取数据集,然后再对数据集进行标注.然后再把标注完的数据集划分为训练集和验证集,这样更加方便模型的训练和测试. 我们经常从网上获取一些目标检测的数据集资源标 ...

  3. 建立自己的voc数据集_将自己数据集转化成voc数据集格式并用mmdetection训练

    一.准备自己的数据 拿nwpu数据集来举例,nwpu数据集文件夹中的内容是: images文件夹:存放数据图片 labelTxt文件夹:存放标注信息,images文件夹中每张图片都对应一个txt文件存 ...

  4. Json格式的数据集标签转化为有效的txt格式(data_coco)

    Json格式的数据集标签转化为有效的txt格式(data_coco) 学习前言 分析json格式标签 转化为有效的txt格式 实现效果 学习前言 在参加许多目标检测比赛时,为了能够获得合理的评价结果, ...

  5. 【slam十四讲第二版】【课本例题代码向】【第九讲~后端Ⅰ】【安装Meshlab】【BAL数据集格式】【ceres求解BA】【g2o求解BA】

    [slam十四讲第二版][课本例题代码向][第九讲~后端Ⅰ][安装Meshlab][BAL数据集格式][ceres求解BA][g2o求解BA] 0 前言 1 安装Meshlab: 三维几何网格处理 2 ...

  6. 制作自己的COCO格式数据集,附代码!

    最近做了一个细胞检测的练习项目.之前的思路是参考其他大神的代码,后来发现其他人的代码有很多自定义的内容,包括读取的数据格式等等,小白表示看不懂所以改变思路,用最简单的方法--选择mmdetection ...

  7. python实现视频格式转化、调节视频播放速度(仅需三行代码)

    python实现视频格式转化.调节视频速度 支持格式: MoviePy 能处理的视频是 ffmpeg 格式的,支持的文件类型:*.mp4 *.wmv *.rm *.avi *.flv *.webm * ...

  8. DDSM 数据集格式转换 LJPEG to PNG

    文章目录 测试说明 1.DDSM 数据集的下载 1.1 安装WinSCP 1.2 下载数据 2.相关软件的安装 2.1 安装Cygwin 2.2 选择需要安装的package 2.3 验证Cygwin ...

  9. 行人重识别多个数据集格式统一为market1501格式

    文章目录 market1501数据集介绍 数据集结构 数据集命名规则 格式转化 1.创建数据集文件夹 2.抽取market1501数据集 3.抽取CUHK03数据集 4.抽取MSMT17数据集 5.抽 ...

最新文章

  1. 【OpenCV】内核的形状函数使用记录
  2. (伪)datagridview里面id的自增长
  3. 新锐商务首选!HP EliteBook 745 G5图评
  4. linux系统无线怎么设置密码,LINUX终端下配置WPA2加密无线网络
  5. 如何使用 Kubernetes 监测定位慢调用
  6. 数据库分页和使用jstl标签替换分页的jsp代码
  7. 好看的a标签按钮样式
  8. 2020年最好用的手机是哪一款_2020年10款最好用的健康秤
  9. 添加删除程序里面没有添加IIS服务的选项
  10. 没革哪有新?看云计算在医疗行业的版图
  11. ASP.NET20 自定义配置节学习笔记(一)
  12. Fedora 9 NFS配置
  13. [libtorrent] linux 搭建 libtorrent 开发编译环境
  14. MFC银行卡卡号验证程序
  15. oracle用户删除了可以恢复吗,oracle_oracle误删数据恢复方法小结,如果用户误删/更新了数据后, - phpStudy...
  16. python-opencv图片合成视频
  17. 什么叫做信息安全?包含哪些内容?与网络安全有什么区别?
  18. 小红帽中用eclipse编译windows程序遇到的问题处理备忘录
  19. Creator3D:shader13_水面涟漪
  20. mac版+2018a+matlab,求助,mac系统 点击配置就报错,matlab版本2018a

热门文章

  1. oracle去掉0x00,ORACLE数据块转储及RDBA的转换
  2. linux ipv6模块,有关Linux ipv6模块加载失败的问题
  3. 理解数据库范式(转)
  4. Meta系列:我该如何报告Meta分析结果(先导篇)
  5. (一)mplayer与ffmpeg的调用过程
  6. 树莓派python编程入门与实战解压密码_树莓派Python编程入门与实战
  7. 又一里程碑,阿里首推Java技术成长笔记,业内评级“钻石级”
  8. TestDirector简介
  9. 关于Hantek6022BL虚拟示波器的在WIN10的安装(神坑)
  10. 基于Arduino开发板实现触摸式开关