• Tesseract5.0训练字库,提高OCR特殊场景识别率(一)


    0、目标

     很多特殊场景,原生的字库识别率不高,这时候就需要根据需求自己训练字库生成traineddata文件。 

    一、前期准备工作

      1.安装jdk   用于运行jTessBoxEditor

      2.安装jTessBoxEditor   用于调整图片上文字的内容和位置

      3. 安装tesseract5.0

      jdk下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    jTessBoxEditor下载地址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

      安装包解压后双击里面的“jTessBoxEditor.jar”,或者双击该目录下的“train.bat”脚本文件,就可以打开该工具了。

     

    二、样本图片准备:(进行训练的样本图片数量越多越好)

      

    三、使用JTBE生成训练样本的合并tif图片

      1.打开jTessBoxEditor,选择Tools->Merge TIFF,进入训练样本所在文件夹,选中要参与训练的样本图片,可以同时选择多张图片:

      

     

       2.点击打开后,会提示你保存tif的地址,保存在当前路径,文件命名格式为hyfontlab.normal.exp0.tif,格式选择tiff

     

       

     

       注意:

       tif文件命名格式[lang].[fontname].exp[num].tif

       lang是语言,fontname是字体,num为自定义数字。

       比如我们要训练自定义字库 hyfontlab,字体名normal,那么我们把图片文件命名hyfontlab.normal.exp0.tif

     

    四、使用tesseract生成box文件

      在上一步骤生成的 hyfontlab.normal.exp0.tif 文件所在目录下打开Terminal窗口,执行下面命令,执行完之后会生成hyfontlab.normal.exp0.box文件。box文件是通过原生的tesseract-ocr识别出来的结果和对应坐标。如果我们要训练中文字库的话,记得加 -l chi_sim

    tesseract hyfontlab.normal.exp0.tif hyfontlab.normal.exp0 -l chi_sim batch.nochop makebox

     

     

    五、使用jTBE纠正box文件的错误

      1.box文件记录了每个字符在图片上的位置和识别出的内容,训练前需要使用jTessBoxEditor调整字符的位置和内容。

      2.打开jTessBoxEditor点击Box Editor ->Open,打开步骤三中生成的“hyfontlab.normal.exp0.tif”,会自动关联到“hyfontlab.normal.exp0.box”文件,这两文件要求在同一目录下。调整完点击“save”保存修改。

     

     注意:

      如果中文无法识别,需要在settings里面设置字体为宋体,style为Regular,size可以调到24.

     

     

     

    六、生成font_properties文件(此文件没有后缀名)

       执行命令: echo normal 0 0 0 0 0 > font_properties

    <fontname> <italic> <bold> <fixed> <serif> <fraktur>

       其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。

     

     

    七、使用tesseract生成tr训练文件

      1. 执行命令: tesseract hyfontlab.normal.exp0.tif hyfontlab.normal.exp0 nobatch box.train

    2. 执行完之后,会在当前目录生成hyfontlab.normal.exp0.tr文件。

     

     

     

    八、生成字符集文件

    1.执行命令: unicharset_extractor fst.word.exp0.box

      2. 执行下面命令:执行完之后会在当前目录生成一个名为“unicharset”的文件。

     

     

    九、生成shape文件

    1.执行命令:  shapeclustering -F font_properties -U unicharset -O hyfontlab.unicharset hyfontlab.normal.exp0.tr

      2.执行完之后,会生成 shapetable 和 hyfontlab.unicharset 两个文件

     

     

    十、生成聚字符特征文件

    1.执行命令: mftraining -F font_properties -U unicharset -O hyfontlab.unicharset hyfontlab.normal.exp0.tr

      2.会生成 inttemp、pffmtable、shapetable和hyfontlab.unicharset四个文件。

     

     

    十一、生成字符正常化特征文件

    1.执行命令: cntraining hyfontlab.normal.exp0.tr

      2.会生成 normproto 文件。

      

     

     

    十二、文件重命名

      1.重新命名inttemp、pffmtable、shapetable和normproto这四个文件的名字为[lang].xxx。

      2.这里修改为 hyfontlab.inttemp、hyfontlab.pffmtable、hyfontlab.shapetable、hyfontlab.normproto

      3.rename normproto zwp.normproto

     

     

    十三、合并训练文件

      1.执行下面命令,会生成hyfontlab.traineddata文件

      2.执行命令: combine_tessdata hyfontlab.

      3.Log输出中的Offset 1、3、4、5、13这些项不是-1,表示新的语言包生成成功。

      4.将生成的“hyfontlab.traineddata”语言包文件复制到Tesseract-OCR 安装目录下的tessdata文件夹中,就可以使用训练生成的语言包进行图像文字识别了。

     

     

    参考:

      1、https://www.jianshu.com/p/c8ba23ec672a

      2、https://www.cnblogs.com/yanjj/p/7998980.html

     

  • 相关阅读:
    ES6中变量的解析赋值的用途
    ES6中的Set与Map数据结构
    cocos2d-js 序列帧动画
    cocos2d-x坐标系详解
    【javascript】函数中的this的四种绑定形式
    ECMAScript 定义类、对象
    JS中函数参数值传递和引用传递
    作用域
    List<Map>如何根据Map的特定key对应的value对List排序?
    SQL字符型字段按数字型字段排序实现方法
  • 原文地址:https://www.cnblogs.com/pyweb/p/11457519.html
Copyright © 2020-2023  润新知