# HWDB1.1离线手写汉字数据集 **Repository Path**: memoryQZY/HWDB1.1 ## Basic Information - **Project Name**: HWDB1.1离线手写汉字数据集 - **Description**: HWDB1.1 离线手写汉字数据集 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-24 - **Last Updated**: 2025-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HWDB1.1 离线手写汉字数据集 ## 数据集介绍 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读取示例: ```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