zoukankan      html  css  js  c++  java
  • TesseractOCR3.0语言库训练步骤

    要想彻底搞清楚这款开源OCR软件的来龙去脉,还得看Google开源项目的说明:http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3,在这里我就不过多详细的说明了。

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

    • lang.config

    • lang.unicharset

    • lang.unicharambigs

    • lang.inttemp

    • lang.pffmtable

    • lang.normproto

    • lang.punc-dawg

    • lang.word-dawg

    • lang.number-dawg

    • lang.freq-dawg

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

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

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

    tesseract lang.fontname.number.tif lang.fontname.number batch.nochop makebox

           这一步产生对应的lang.fontname.number.box 文件。   

        编辑该Box文件,校正识别出来的字符,如果单个字符识别成了两个或者多个字符,则要将这些行进行合并。前两项坐标取最小值,后两项坐标取最大值。

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

    tesseract lang.fontname.number.tif lang.fontname.number nobatch box.train

    这一步产生三个文件:

    (1) tesseract.log记录该步骤执行结果;

    (2) lang.fontname.number.txt;

    (3) lang.fontname.number.tr为特征文件。

    4、计算字符集(unicharset)

    unicharset_extractor lang.fontname.number_1.box

    这一步产生字符集文件unicharset。

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

    mftraining -F font_properties -U unicharset lang.fontname.number_1.tr

    3.01版本开始,修改为需要增加一个font_properties文件才可继续支持,格式为 字体 斜体(1|0) 粗体(1|0) <fixed>(1|0) 下划线(1|0) <fraktur>(1|0)

    使用上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件lang.unicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符特征数文件pffmtable。附带还会产生Microfeat文件,但是并没有用到该文件。

    cntraining lang.fontname.number_1.tr

    这一步产生字符形状正常化特征文件normproto。

    6、产生字典文件(可选)

    wordlist2dawg frequent_words_list lang.freq-dawg lang.unicharset

    wordlist2dawg words_list lang.word-dawg lang.unicharset

    frequent_words_list存放出现频率较高的字符;words_list存放所有字符集,至少一个字符。每个字符占一行。这样可以产生对应语言的字典文件了,共五个。

    同样的方法产生punc-dawg文件(符号)、number-dawg文件(数字)以及user-words文件(用户自定义字符,通常为空)。

    7、模糊字集校正文件(unicharambigs)(可选)

    例如某unicharambigs文件内容如下:

    2 ' ' 1 " 1

    1 m 2 r n 0

    3 i i i 1 m 0

    每一行表示一条校正信息:第一个数字表示接下来有几个字符,第二个数字也表示后面跟有几个字符,最后一个数字表示校正动作的类型。

    在这个例子中,第一行表示将连续的两个单引号(’)合并成一个双引号(”),最后的数字1表示强制转换;第二行、第三行表示一个字母m有可能被识别成两个字母’r’’n’,也有可能识别成连续三个字母’i’。

    这个校正文件可以为空或者不存在。

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

    combine_tessdata lang.

    这是最后一步,产生训练结果文件lang.traineddata。

    注意这一步控制台执行的结果显示,有0-9项指示了文件的地址,这十个地址对应了文章前面所提到的十项所需要的文件。其中1、3、4、5这四项(从0开始排序)是必须的,缺少一项(显示为-1)都将不算成功。

    9、测试

    tesseract image.tif output -l lang

    使用我们刚刚训练好的lang.traineddata文件来识别图形。识别出来的结果将会存放在output.txt文件中。

    特别说明:

        在训练的过程中,初次接触的人容易犯一些小错误,这些错误虽然小,但很可能让你陷入困惑和痛苦中。那位师妹就是因为小问题困惑不已才找我帮忙的。下面简单的罗列一下几点需要注意的地方:

    (1)前面提到的lang可以被你想要的任何字符串代替,主要是为了给你训练的库取个名字(千万注意名字正确)。

    (2)第二步产生的Box文件,需要手动修改,一定要以Unicode模式保存。修改的时候要注意方法和含义,详细的说明Google原文中有说明。

    (3)第五步程序自动产生的文件是只有扩展名的,需要你自己手动将名字改成前缀一致。后面产生的可选文件也依照此法操作。

    (4)所有的这些文件都准备好了之后,需要放到同一目录下,执行combine_tessdata进行合并的时候,注意要切换到文件所在的目录执行,否则将会报错,提示找不到文件。

    (5)合并成功之后,要记得将训练好的文件(lang.traineddata)放到程序的tessdata子目录下,否则测试就会提示找不到语言库文件。

        好了,到这里,基本上所有的问题都能解决了。

     

    参考及主体转载自:http://hi.baidu.com/kuliuheng/blog/item/aae32d32216a9fcda2cc2ba1.html

  • 相关阅读:
    【codecombat】 试玩全攻略 第九关 循环又循环
    【codecombat】 试玩全攻略 第十三关 已知敌人
    【codecombat】 试玩全攻略 第十一关 再次迷宫经历
    【codecombat】 试玩全攻略 第六关 cell commentary
    【codecombat】 试玩全攻略 第八关 火舞
    【codecombat】 试玩全攻略 第十二关 恐惧之门
    【codecombat】 试玩全攻略 第十四关 已知敌人
    苹果apns推送总结
    Xcode 提升速度小技巧
    UITextField 限制输入字数
  • 原文地址:https://www.cnblogs.com/rayz/p/2533248.html
Copyright © 2011-2022 走看看