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