对Python生成汉字字库文字,以及转换为文字图片的实例详解


Posted in Python onJanuary 29, 2019

笔者小白在收集印刷体汉字的深度学习训练集的时候,一开始就遇到的了一个十分棘手的问题,就是如何获取神经网络的训练集数据。通过上网搜素,笔者没有找到可用的现成的可下载的汉字的训练集,于是笔者采用了代码自建汉字的训练集数据。

这里采用的是python编写程序,需要import 的python库请提前安装。

那么,首先如何用python输出汉字字库的文字?

笔者查到在计算机中汉字编码范围是0x4E00到0x9FA5,利用unichr()可以将十六进制的编码转成人类可读的字。

这里扩展一下在python库中什么是unichr(),以及什么是chr()和ord()。

chr( )函数用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符。

unichr( )跟它一样,只不过返回的是Unicode字符,这个从Python 2.0才加入的unichr( )的参数范围依赖于你的Python是如何被编译的。

如果是配置为USC2的Unicode,那么它的允许范围就是range(65536)或0x0000-0xFFFF;如果配置为UCS4,那么这个值应该是range(1114112)或0x000000-0x110000。

如果提供的参数不在允许的范围内,则会报一个ValueError的异常。

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

接下来就是把unicode编码的字写入文件呢,如果直接用open()的话,会提示UnicodeEncodeError: ‘ascii' codec can't encode character u'\u4e00' in position 0: ordinal not in range(128)

这里就是涉及到python读写文件时候的两种方式了,一种是open(),还一种是codecs.open( )。

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

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

file_name就是文件的路径加文件名字,不加路径则文件会存放在python程序的路径下,

access_mode就是操作文件的模式,主要有r,w,rb,wb等,细节网上一大堆,buffering = -1是用于指示访问文件所采用的缓存方式。0表示不缓存;1表示只缓存一行,n代表缓存n行。如果不提供或为负数,则代表使用系统默认的缓存机制。

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

打开以后就是写和读的操作。但是用open方法打开会有一些问题。open打开文件只能写入str类型,不管字符串是什么编码方式。所以对于写入文件的数据的编码不统一的时候,需要用到codecs.open()。

这种方法可以指定一个编码打开文件,使用这个方法打开的文件读取返回的将是unicode。

写入时,如果参数 是unicode,则使用open()时指定的编码进行编码后写入;如果是str,则先根据源代码文件声明的字符编码,解码成unicode后再进行前述 操作。

相对内置的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)) #写出汉字

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

对Python生成汉字字库文字,以及转换为文字图片的实例详解

接下来就是把汉字字库的字一个个保存成图片,这里需要pip install pygame的库。

pygame可以将文字渲染到图片上保存。

代码如下:

#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"))

这里是在chinese文件夹里面生成的文字图片,字体是黑体,然后再在个基础上可以继续自制汉字识别的训练集了。

对Python生成汉字字库文字,以及转换为文字图片的实例详解

以上这篇对Python生成汉字字库文字,以及转换为文字图片的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现根据窗口标题调用窗口的方法
Mar 13 Python
Python制作简单的网页爬虫
Nov 22 Python
python 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
Java分治归并排序算法实例详解
Dec 12 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
Python实现快速计算词频功能示例
Jun 25 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
python 判断一组数据是否符合正态分布
Sep 23 Python
Python实现点阵字体读取与转换的方法
Jan 29 #Python
使用python读取.text文件特定行的数据方法
Jan 28 #Python
python 实现一次性在文件中写入多行的方法
Jan 28 #Python
用Python逐行分析文件方法
Jan 28 #Python
Python使用Shelve保存对象方法总结
Jan 28 #Python
Python理解递归的方法总结
Jan 28 #Python
代码详解django中数据库设置
Jan 28 #Python
You might like
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
JsRender实用入门教程
2014/10/31 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
keras的三种模型实现与区别说明
2020/07/03 Python
Python-split()函数实例用法讲解
2020/12/18 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
村优秀党员事迹材料
2014/01/15 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
地球上的星星观后感
2015/06/02 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
python接口测试返回数据为字典取值方式
2022/02/12 Python