对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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
Python中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
Python操作csv文件实例详解
Jul 31 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
python指定写入文件时的编码格式方法
Jun 07 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
使用AJAX和Django获取数据的方法实例
Oct 25 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 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加速 eAccelerator配置和使用指南
2009/06/05 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
给Python入门者的一些编程建议
2015/06/15 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python 文件操作删除某行的实例
2017/09/04 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
Python代码太长换行的实现
2019/07/05 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
党员群众路线对照检查材料
2014/08/31 职场文书
二人合伙经营协议书
2014/09/13 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis