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

    这些天由于工作需要,需要对验证码进行识别,当然验证码识别是老问题了,这里介绍了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测试

    没图片啊没图片.....

  • 相关阅读:
    数组review
    算法复杂度分析
    利用栈判断括号是否匹配(Parentheses)
    java实现stack和queue
    路由器结构
    层次化路由简介
    es 嵌套对象和父子文档对比
    远心镜头的远心度
    Delphi编程细节汇总
    halcon深度学习总结(二)
  • 原文地址:https://www.cnblogs.com/zthua/p/2853247.html
Copyright © 2011-2022 走看看