最近做文档识别方面的项目,做汉字识别需要建立字库,在网上找了各种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(n–1,–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个常用汉字,对每一个子按字体进行渲染:
渲染图片次数多总是报错,对于渲染失败的文字我又重试,最终得到了一个包含3510字(加上10个数字)的字库:
字符分割生成字库 另外一种办法就是把3500个字放在word排好,然后转PDF保存成图片,像下面这样:
密密麻麻的字,但非常整齐,不需要什么图片处理算法,只要找到空白的行和列,按行和列就可以进行切割,切割出来也好,只要保存有序切割,切出来的图片依然可以与字对应,下面是切割的代码:
|