python生成汉字图片字库
admin
2023-07-30 22:19:53
0

最近做文档识别方面的项目,做汉字识别需要建立字库,在网上找了各种OCR,感觉都不好,这方面的技术应该比较成熟了,OCR的软件很多,但没有找到几篇有含金量量的论文,也没有看到哪位大牛公开字库,我用pygame渲染字体来生成字库,也用PIL对整齐的图片进行切割得到字库。

pygame渲染字体来生成字库

用pygame渲染字体我参考的这篇文章,根据GB2323-8标准,汉语中常用字3500个,覆盖了99.7%的使用率,加上次常用共6763个,覆盖99.99%的使用率。先生成一个字体图片,从网上找来3500个常用汉字,对每一个子按字体进行渲染:

12345678910111213141516171819 def pasteWord(word):    \’\’\’输入一个文字,输出一张包含该文字的图片\’\’\’    pygame.init()    font = pygame.font.Font(os.path.join(\”./fonts\”, \”a.ttf\”), 22)    text = word.decode(\’utf-8\’)    imgName = \”E:/dataset/chinesedb/chinese/\”+text+\”.png\”    paste(text,font,imgName) def paste(text,font,imgName,area = (0, 9)):    \’\’\’根据字体,将一个文字黏贴到图片上,并保存\’\’\’    im = Image.new(\”RGB\”, (32, 32), (255, 255, 255))    rtext = font.render(text, True, (0, 0, 0), (255, 255, 255))    sio = StringIO.StringIO()    pygame.image.save(rtext, sio)    sio.seek(0)    line = Image.open(sio)    im.paste(line, area)    #im.show()    im.save(imgName)

渲染图片次数多总是报错,对于渲染失败的文字我又重试,最终得到了一个包含3510字(加上10个数字)的字库:

字符分割生成字库

另外一种办法就是把3500个字放在word排好,然后转PDF保存成图片,像下面这样:

密密麻麻的字,但非常整齐,不需要什么图片处理算法,只要找到空白的行和列,按行和列就可以进行切割,切割出来也好,只要保存有序切割,切出来的图片依然可以与字对应,下面是切割的代码:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 #!encoding=utf-8import Imageimport os def yStart(grey):    m,n = grey.size    for j in xrange(n):        for i in xrange(m):            if grey.getpixel((i,j)) == 0:                return jdef yEnd(grey):    m,n = grey.size    for j in xrange(n1,1,1):        for i in xrange(m):            if grey=\”crayon-st\”>in xrange(m):            if grey到字库。

pygame渲染字体来生成字库

用pygame渲染字体我参考的这篇文章,根据GB2323-8标准,汉语中常用字3500个,覆盖了99.7%的使用率,加上次常用共6763个,覆盖99.99%的使用率。先生成一个字体图片,从网上找来3500个常用汉字,对每一个子按字体进行渲染:

12345678910111213141516171819 def pasteWord(word):    \’\’\’输入一个文字,输出一张包含该文字的图片\’\’\’    pygame.init()    font = pygame.font.Font(os.path.join(\”./fonts\”, \”a.ttf\”), 22)    text = word.decode(\’utf-8\’)    imgName = \”E:/dataset/chinesedb/chinese/\”+text+\”.png\”    paste(text,font,imgName) def paste(text,font,imgName,area = (0, 9)):    \’\’\’根据字体,将一个文字黏贴到图片上,并保存\’\’\’    im = Image.new(\”RGB\”, (32, 32), (255, 255, 255))    rtext = font.render(text, True, (0, 0, 0), (255, 255, 255))    sio = StringIO.StringIO()    pygame.image.save(rtext, sio)    sio.seek(0)    line = Image.open(sio)    im.paste(line, area)    #im.show()    im.save(imgName)

渲染图片次数多总是报错,对于渲染失败的文字我又重试,最终得到了一个包含3510字(加上10个数字)的字库:

字符分割生成字库

另外一种办法就是把3500个字放在word排好,然后转PDF保存成图片,像下面这样:

密密麻麻的字,但非常整齐,不需要什么图片处理算法,只要找到空白的行和列,按行和列就可以进行切割,切割出来也好,只要保存有序切割,切出来的图片依然可以与字对应,下面是切割的代码:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 #!encoding=utf-8import Imageimport os def yStart(grey):    m,n = grey.size    for j in xrange(n):        for i in xrange(m):            if grey.getpixel((i,j)) == 0:                return jdef yEnd(grey):    m,n = grey.size    for j in xrange(n1,1,1):

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...