• 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

  • 相关阅读:
    Extjs 4.x 得到form CheckBox的值
    你是工具综合症和资料收集狂患者吗?(转)
    计算机网络第五版(谢希仁)读书笔记(三)
    《别做正常的傻瓜》 读书笔记
    2013年11月27日,开始写专业的博客。
    web输入框的测试
    linux 文件操作相关函数
    Samba的安装
    linux df命令参数详解
    linux arp 命令常用参数详解
  • 原文地址:https://www.cnblogs.com/rayz/p/2533248.html
Copyright © 2020-2023  润新知