• Tesseract-OCR3.01语言库训练步骤
    时间:2012-09-16   作者:佚名   出处:互联网

    这些天由于工作需要,需要对验证码进行识别,当然验证码识别是老问题了,这里介绍了google开源项目Tesseract-OCR3.01对于验证码的识别。对于这款开源项目,要想彻底搞清楚这款开源OCR软件的来龙去脉,还得看Google开源项目的说明:http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3,这里就不罗嗦了。

    我使用的是最新的3.01版本的。训练所需准备:

    1.下载并安装3.01版本的tesseract。事实上并不需要安装这步骤,我下载的是压缩包版,解压即可,这里我解压到E:\Tesseract-ocr目录。

    2.下载并安装jTessBoxEditor工具,这是一个Box file editors,用来编辑训练文件的,直接下载地址在这里这个软件是用java写的,运行需要安装jre,好在这个东西比.net好装多了,怎么运行可以见它的readme文件。

    3.当然也可以用cowboxer1.01.exe这个工具,他也是Box file编辑工具,在实际应用中,最好将这两个工具结合。

    4.接下来要训练一个新的语言(自定义语言或者某种自然语言都可以)对应的traineddata文件,需要产生下列过程文件:

    ■cnlp.config
    ■cnlp.unicharset
    ■cnlp.unicharambigs
    ■cnlp.inttemp
    ■cnlp.pffmtable
    ■cnlp.normproto
    ■cnlp.punc-dawg
    ■cnlp.word-dawg
    ■cnlp.number-dawg
    ■cnlp.freq-dawg

        在这八个文件中,红色标示的是必须的,其他的文件可选。当这些文件都准备好之后,再使用combine_tessdata进行最后的合并工作,生成cnlp.traineddata,这个文件就是最终训练出来语言库。

    下面再来说一下如何产生上述的文件:

    1、获取一个训练图片(*.tif)

        这里采用铁道部购票系统中的验证码 [点击图片可在新窗口打开] ,将这个验证码下载后,用上文提到的jTessBoxEditor工具将其转换为tif文件,或者直接重命名也可以。名称为cnlp.lpft.exp0.tif,命名规则可以参照官网说明:

    tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox。

    2、产生相应的Box文件(*.box)

    命令:tesseract.exe cnlp.lpft.exp0.tif cnlp.lpft.exp0  batch.nochop makebox

     这一步产生对应的cnlp.lpft.exp0.box文件。该文件记录了tesseract识别出来的每一个字和其位置坐标。使用jTessBoxEditor编辑该Box文件,校正识别出来的字符,如果单个字符识别成了两个或者多个字符,则要将这些行进行合并。前两项坐标取最小值,后两项坐标取最大值。

      备注:这时候要注意的是编辑box要和tif文件同在一个目录下,然后逐个校正文字,后保存。

    如果使用cowboxer1.01,他会自动找到与之相对于的box文件。

    3、产生字符特征文件(*.tr)

    命令:tesseract cnlp.lpft.exp0.tif cnlp.lpft.exp0 nobatch box.train

    这一步产生两个文件:

    (1)cnlp.lpft.exp0.txt;

    (2)cnlp.lpft.exp0.tr为特征文件。

    可能会产生tesseract.log主要是记录该步骤执行结果的日志没啥用;

    4、计算字符集(unicharset)

    命令:unicharset_extractor cnlp.lpft.exp0.box
    这一步产生字符集文件unicharset。

    5、聚集字符特征(inttemp、pffmtable、normproto)

    命令:mftraining -F font_properties -U unicharset cnlp.lpft.exp0.tr
    这一步中的font_properties这个文件需要自己手动创建,文件内容
    <fontname><italic><bold><fixed><serif><fraktur>。

    where<fontname>is a string naming the font (no spaces allowed!), and<italic>, <bold>, <fixed>, <serif> and <fraktur>are all simple 0 or 1 flags indicating whether the font has the named property.

    官网有详细说明,大致意思就是你设置的字体。

    这是我的font_properties内容:lpft 0 0 1 0 0。

    根据上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件mfunicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符特征数文件pffmtable。附带还会产生Microfeat文件,但是这个文件没啥用。

    接下来使用命令cntraining.exe cnlp.lpft.exp0.tr,这一步产生字符形状正常化特征文件normproto。

    到这里基本上所需的文件都形成了,下面就开始生成字典文件。

    6、合并训练文件(*.traineddata)


    此时,在目录下应该生成若干个文件了,把unicharset, inttemp, normproto, pffmtable这四个文件加上前缀“cnlp.“。然后使用命令:combine_tessdata cnlp.

    将其合并成一个字典文件。这时会生成如下结果:

    必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了。

    此时目录下“cnlp.traineddata”的文件拷贝到tesseract程序目录下的“tessdata”目录。

    以后就可以使用该该字典来识别了。

    7、测试


    -----------------------------------------------
    另一篇文章
    -----------------------------------------------


    前提条件:

    tesseract-ocr3.00正常安装

    训练步骤:

    1.将要加入字典的图片转化为.tif格式的图片,文件的命名规则为[lang].[fontname].exp[num].tif, 例如:eng.oms261.g4.tif,注意此处[fontname]命名不能相同。 再根据.tif格式图片生成.box文件,命令:
     tesseract eng.oms261.g4.tif eng.oms261.g4 batch.nochop makebox

    2.纠正.box文件中的错误,这里可以使用工具,有不同的工具,根据环境不同选择,Linux下推荐使用 moshPyTT(下载地址,http://code.google.com/p/moshpytt/)

    3.根据生成的.box文件生成.tr文件。 命令:
     tesseract eng.oms261.g4.tif eng.oms261.g4 nobatch box.train

    4.生成unicharset文件。 命令:
     unicharset_extractor eng.oms261.g4.box ...
    注意:从5~9步骤必须在windows环境下进行,Linux下不支持,这是Tesseract-3.00的BUG.

    5.生成 pffmtable, inttemp文件. 命令:

     mftraining -U unicharset -O lang.unicharset eng.oms261.g4.tr ...

    6.生成 normproto文件。 命令 :
     cntraining eng.oms261.g4.tr ...

    7.将pffmtable,inttemp,normproto文件加前缀,手动改名为: eng.pffmtable,eng.inttemp,eng.normproto, 前缀名与前面的命名保持一致。

    8.字典文件和模糊校正文件可以提高OCR的识别率,我们可以获得官方的eng.traindata的此文件, 命令:
     combine_tessdata -u tessdata/eng.traineddata path/eng.
    此时语言包的所有文件都解压了,挑出我们需要的
    eng.unicharambigs
    eng.punc-dawg
    eng.word-dawg
    eng.number-dawg
    eng.freq-dawg
    这些文件放到我们训练字典的那个路径.

    9.合并训练文件,命令:
     combine_tessdata eng.
    得到我们最终训练的文件

    网友留言/评论

    我要留言/评论

    相关文章

    设计优秀的iPhone应用之五点建议:当用户在苹果应用商店里寻找新应用时,往往基于设计来考量是否购买。生活中,或许很多人告诫我们不要凭借封面去评判一本书;既然无法试用一款应用,那么截图成为我们评判一款应用质量好坏的重要依据。
    大数据量,海量数据 处理方法总结:大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。
    六年软件测试感悟:不知不觉已经从事软件测试六年了,2006毕业到进入外包公司外包给微软做软件测试, 到现在加入著名的外企。六年的时间过得真快。 长期的测试工作也让我对软件测试有了比较深入的认识。但是我至今还是一个底层的测试人员,我的看法都比较狭隘,如有错误还请批评改正。
    软件设计的一些感想:已经好久没有写博客了,不是因为没有学东西,而是因为学的东西不够系统,不够具体,没有整理起来(外加人懒),所以不想浪费笔墨。所以一直潜水。。但总会有感想的,在学习的过程中,时常会遇到一些令人惊喜的东西,令人拍案叫绝的东西,但学会之后觉得简单或者不值一提,于是没有当机立断写出一些洞见。事后用的时候倒觉得理所当然了。
    从零开始打造完整评分系统:本文介绍了从零到完整的评分系统的进化,其中有些算法上的优化,值得参考。
    如何成为“天才”一员: 苹果内部秘密培训手册曝光:最近苹果的 “天才吧” 训练手册流出了,让许多想进入苹果零售店工作,并且想成为“天才吧”团队的粉丝大饱眼福。苹果会告诉它的新兵“天才”怎么去做、怎么去想,这里有着苹果独特的心理掌握、禁止言论、角色扮演、Dos和Don’ts, 都够当机器人大学的101课本了。但是苹果的主要目的就是让内部“天才”员工们了解顾客并让他们快乐。
    产品价值和用户体验:大家都知道产品价值和用户体验都很重要。有人说产品价值为王,有人说用户体验为王,那么产品价值和用户体验的关系究竟是怎样的呢?最近工作一直很忙,没时间写近期的工作感悟。抽点空闲,表达一下我的产品观:产品价值大于用户体验,用户体验决定产品成败。
    王垠:如何掌握程序语言:学习程序语言是每个程序员的必经之路。可是这个世界上有太多的程序语言,每一种都号称具有最新的“特性”。所以程序员的苦恼就在于总是需要学习各种稀奇古怪的语言,而且必须紧跟“潮流”,否则就怕被时代所淘汰。
    20个热门jQuery的提示和技巧:以下是一些非常有用的jQuery提示和所有jQuery的开发技巧。我分享这些,因为我认为他们将是非常有用的给你。声明:我没有写下面的代码,但已经从Internet收集各种来源。
    优秀设计师应当知道的20大UI设计原则:世界级图形设计大师Paul Rand(保罗.兰德)曾经说过:“设计绝不是简单的排列组合与简单地再编辑,它应当充满着价值和意义,去说明道理,去删繁就简,去阐明演绎,去修饰美化,去赞美褒扬,使其有戏剧意味,让人们信服你所言……”,由此可见,设计绝非轻而易举之事,优秀的设计更是难上加难,今日小编偶然发现一篇界面设计师Joshua Porter博客当中的一篇文章——《Principles of User Interface Design》,文章中列举了20大UI设计原则,看完之后,觉得挺受启发,于是试着将其编译,希望能够给广大设计师——特别是刚入门的初级设计师,提供较好的学习机会。