Python生成汉字库文本并转换为文本图片

2025-01-07 -

作者小白在收集印刷体汉字的深度学习训练集时,一开始就遇到了一个非常棘手的问题,就是如何获取神经网络的训练集数据。通过在网上搜索,作者没有找到任何可用的现成的可下载的汉字训练集,因此作者使用代码自行构建了汉字训练集数据。

这里使用的是编写程序,请提前安装所需的库。

那么,首先,如何从汉字库中输出文本呢?

作者发现,计算机中的汉字编码范围最多为 ,可以使用()将十六进制编码转换为人类可读的字符。

这是库中 () 以及 chr() 和 ord() 的扩展。

chr() 函数采用 (256)(即 0 到 255)范围内的整数作为参数,并返回相应的字符。 ( ) 与它相同,只是它返回字符。 ( ) 的参数范围是 2.0 中添加的,取决于您的程序是如何编译的。如果配置为USC2,则其允许范围为range(65536)或-;如果配置为UCS4,则该值应为range()或-。如果提供的参数不在允许范围内,则会报异常。

ord() 函数是 chr() 函数(对于 8 位 ASCII 字符串)或 () 函数(对于对象)的配对函数。它以一个字符(长度为1的字符串)作为参数,并返回对应的ASCII值。 ,或数值。如果给定的字符超出了您的定义范围,则会抛出异常。

下一步是将编码后的单词写入文件中。如果直接使用open(),会提示:'ascii' codec can't u'\u4e00' in 0: not in range(128)

这里有两种读写文件的方法,一种是open(),一种是.open()。

对于内置函数open()来说,打开文件的方式一般是:

f=open(file_name,access_mode = 'r',buffering = -1)。

它是文件的路径加上文件名。如果不添加路径,文件将存储在程序的路径中。

是操作文件的模式,主要有r、w、rb、wb等,网上有很多详细介绍。 = -1 用于表示访问文件时使用的缓存方式。 0表示不缓存; 1表示只缓存一行,n表示缓存n行。如果没有提供或者是负数,则表示使用系统默认的缓存机制。

>>> fr = open('test1.txt','wb')
>>> line1 = "我是谁"
>>> fr.write(line1)

打开后就是写和读操作。但是用open方法打开时会出现一些问题。 open打开文件时只能写str类型,不管字符串的编码方式。因此,当写入文件的数据的编码不统一时,需要使用.open()。该方法可以指定打开文件的编码。使用此方法打开的文件将被读取并返回。写入时,如果参数为,则会使用open()时指定的编码进行编码,然后写入;如果是str,则根据源代码文件中声明的字符编码进行解码,然后执行前述操作。与内置的 open() 相比,这种方法更不容易出现编码问题。

>>> import codecs
>>> line2 = u'我是谁'
>>> fw = codecs.open('test1.txt','wb','utf-8')
>>> fw.write(line2)

这里,汉字库中的文本被写入文本文件。代码如下:

import codecs
start,end = (0x4E00, 0x9FA5)  #汉字编码的范围
with codecs.open("chinese.txt", "wb", encoding="utf-8") as f:
 for codepoint in range(int(start),int(end)):
  f.write(unichr(codepoint))  #写出汉字

在同一目录文件中,生成汉字库的.txt文件:

接下来就是将汉字库中的文字一一保存为图片。这里需要pip库。

文本可以渲染到图像上并保存。

代码如下:

#encoding: utf-8
import os
import pygame
chinese_dir = 'chinese'
if not os.path.exists(chinese_dir):
    os.mkdir(chinese_dir)
pygame.init()
start,end = (0x4E00, 0x9FA5) # 汉字编码范围
for codepoint in range(int(start), int(end)):
    word = unichr(codepoint)
    font = pygame.font.Font("msyh.ttc", 64)
    # 当前目录下要有微软雅黑的字体文件msyh.ttc,或者去c:\Windows\Fonts目录下找
    # 64是生成汉字的字体大小
    rtext = font.render(word, True, (0, 0, 0), (255, 255, 255))
    pygame.image.save(rtext, os.path.join(chinese_dir, word + ".png"))

这里是文件夹中生成的文字图片,字体为粗体,然后在此基础上,你可以继续制作自己的汉字识别训练集。

参考:

1. 2017年7月26日

2、2017年7月26日

3. 2017年7月26日

4. 2017年7月26日

5. 2017年7月26日

6. 2017年7月26日

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。

扫一扫在手机阅读、分享本文