最近做文档识别方面的项目,做汉字识别需要建立字库,在网上找了各种OCR,感觉都不好,这方面的技术应该比较成熟了,OCR的软件很多,但没有找到几篇有含金量量的论文,也没有看到哪位大牛公开字库,我用pygame渲染字体来生成字库,也用PIL对整齐的图片进行切割得到字库。
pygame渲染字体来生成字库
用pygame渲染字体我参考的这篇文章,根据GB2323-8标准,汉语中常用字3500个,覆盖了99.7%的使用率,加上次常用共6763个,覆盖99.99%的使用率。先生成一个字体图片,从网上找来3500个常用汉字,对每一个子按字体进行渲染:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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保存成图片,像下面这样:
密密麻麻的字,但非常整齐,不需要什么图片处理算法,只要找到空白的行和列,按行和列就可以进行切割,切割出来也好,只要保存有序切割,切出来的图片依然可以与字对应,下面是切割的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
#!encoding=utf-8 import Image import 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 j def 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保存成图片,像下面这样: 密密麻麻的字,但非常整齐,不需要什么图片处理算法,只要找到空白的行和列,按行和列就可以进行切割,切割出来也好,只要保存有序切割,切出来的图片依然可以与字对应,下面是切割的代码:
|