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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM