Python生成汉字库文本并转换为文本图片
作者小白在收集印刷体汉字的深度学习训练集时,一开始就遇到了一个非常棘手的问题,就是如何获取神经网络的训练集数据。通过在网上搜索,作者没有找到任何可用的现成的可下载的汉字训练集,因此作者使用代码自行构建了汉字训练集数据。
这里使用的是编写程序,请提前安装所需的库。
那么,首先,如何从汉字库中输出文本呢?
作者发现,计算机中的汉字编码范围最多为 ,可以使用()将十六进制编码转换为人类可读的字符。
这是库中 () 以及 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日
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。