Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

HWDB1.1 离线手写汉字数据集

数据下载(Release 资产)

本仓库不再保存 Git LFS pointer 文件,数据文件已迁移到 GitHub Release:

建议下载后校验:

  • HWDB1.1trn_gnt.zip SHA256: 1e00a630613cd796423710fc8b438e7176a4a8fef8dd25966f20940076dce817
  • HWDB1.1tst_gnt.zip SHA256: 1d5060803574ac10c743b12e621de3cbbfd1e95fe69426da570f492e5cd5ee08

数据集介绍

HWDB1.1是由中国科学院自动化研究所(CASIA)模式识别国家重点实验室开发的标准离线手写汉字数据集。该数据集包含了GB2312-80一级字符集中3,755个汉字类别,由240位不同的书写者贡献,总计约120万个汉字样本。数据集被划分为标准训练集(897,758个样本)和测试集(223,991个样本)。

数据集特点

  • 字符类别:3,755个汉字类别(GB2312-80一级字符集)
  • 书写者数量:240人(训练集)+ 60人(测试集)
  • 样本总数:约120万个(训练集:897,758个,测试集:223,991个)
  • 文件格式:GNT格式(离线手写汉字的二进制存储格式)
  • 图像特征:黑白二值图像,手写汉字

数据集结构

数据集被划分为训练集和测试集两部分:

HWDB1.1/
├── HWDB1.1trn_gnt/  # 训练集
│   └── *.gnt         # 按书写者ID命名的GNT文件
└── HWDB1.1tst_gnt/  # 测试集
    └── *.gnt         # 按书写者ID命名的GNT文件

每个GNT文件包含一个书写者的所有样本,文件名为书写者ID。

数据格式说明

GNT文件是二进制格式,每个样本包含以下信息:

  • 样本标签(汉字的GB2312编码)
  • 图像宽度和高度
  • 二值图像数据

GNT文件的具体格式如下:

  1. 样本大小(4字节整数)
  2. 汉字标签(2字节,GB2312编码)
  3. 图像宽度(2字节整数)
  4. 图像高度(2字节整数)
  5. 位图数据(宽度×高度字节)

使用方法

数据读取

需要编写专门的代码来读取GNT格式的文件。以下是Python读取示例:

import os
import pickle
import struct
import numpy as np
from config import args

train_data_dir = os.path.join(args.root, 'HWDB1.1trn_gnt')
test_data_dir = os.path.join(args.root, 'HWDB1.1tst_gnt')

# 获取字典
char_set = set()
data_path = test_data_dir
#从.gnt文件中逐样本读取图像和对应标签的二进制数据,并解析为灰度图像和字符编码。
for file_name in os.listdir(data_path):
    if file_name.endswith('.gnt'):
        file_path = os.path.join(data_path, file_name)
        with open(file_path, 'rb') as f:
            header_size = 10
            while True:
                header = np.fromfile(f, dtype='uint8', count=header_size)
                if not header.size:
                    break
                sample_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:
                    break
                image = np.fromfile(f, dtype='uint8', count=width * height).reshape((height, width))
                #将 tagcode 16位编码 按大端方式打包成2字节,再按 gb2312 解码为对应汉字。
                #加入到char_set中
                tagcode_unicode = struct.pack('>H', tagcode).decode('gb2312')
                char_set.add(tagcode_unicode)

char_list = sorted(list(char_set))  # set是随机的,需要排一下序
#创建字符→索引的字典
char_dict = dict(zip(char_list, range(len(char_list))))
#使用pickle序列化保存该字典到本地
f = open(args.root + '/char_dict', 'wb')
pickle.dump(char_dict, f)  # 将码表写入到数据集
f.close()

for char, idx in char_dict.items():
    print(f"{char}: {idx}")

数据集来源

数据集由中国科学院自动化研究所模式识别国家重点实验室开发和维护。 官方网站:http://www.nlpr.ia.ac.cn/databases/handwriting/Home.html

About

HWDB1.1 离线手写汉字数据集

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors