Tesseract 4 自行構建支持雙引擎的tessdata 文件


Tesseract 4 版本具備兩種識別引擎:新的基於LSTM(神經網絡)引擎與傳統引擎。通過在初始化時設定不同的EngineMode啟動。

 

OCR Engine modes:
  0    Legacy engine only.
  1    Neural nets LSTM engine only.
  2    Legacy + LSTM engines.
  3    Default, based on what is available.

 

當設置OcrEngineMode為2時,則表示啟動雙引擎進行識別,Tesseract首先會嘗試LSTM引擎,如果識別失敗,則會再使用傳統引擎進行識別,此種模式追求高精確度,但會消耗較多的系統資源。

Tesseract在識別時,是需要訓練數據文件,也就是tessdata。兩種引擎對訓練數據文件的要求不同,兩種引擎訓練數據也不通用。

在GitHub上tessdata_fast (https://github.com/tesseract-ocr/tessdata_fast)和tessdata_best (https://github.com/tesseract-ocr/tessdata_best)均是基於LSTM引擎的訓練數據,不可以用於傳統引擎。

而在 GitHub上的tessdata(https://github.com/tesseract-ocr/tessdata)庫中,在2016年10月之后的文件,是包含兩種引擎的訓練數據文件。

筆者計划Tesseract識別數字及英文(eng.traineddata),希望使用雙引擎提升精確度,但發現GitHub的tessdata庫中eng.traineddata雖然包含了兩種引擎的訓練數據,但其中內置的LSTM引擎的訓練數據不是最新的(相對於tessdata_best),因此產生了想法,自行構建一個訓練數據文件,包含來自於tessdata庫中傳統引擎訓練數據與tessdata_best庫中LSTM引擎的訓練數據。

使用軟件版本

Tesseract:v4.0.0-beta.1.20180608 

(Windows版本:https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe,

  默認安裝路徑 C:\Program Files (x86)\Tesseract-OCR)

操作系統:Windows 10 64bit

具體步驟

准備文件

從tessdata_best中下載eng.traineddata文件,從tessdata中下載eng.traineddata文件。

兩個文件重名,為表示區別,將從tessdata_best文件重命名為eng.best.traineddata。如下:

解壓

Tesseract提供了traineddata的打包與解壓工具,名為combine_tessdata。我們將使用這個命令完成此步驟。

建議將eng.trainneddata與eng.best.trainneddata解壓到兩個獨立文件夾。

(combine_tessdata 默認在C:\Program Files (x86)\Tesseract-OCR中,執行命令前請確認命令已經加入操作系統PATH路徑)

首先完成eng.trainneddata文件解壓。

使用命令:combine_tessdata -u <要解壓的trainneddata文件路徑> <目標路徑及解壓文件名前綴>

如combine_tessdata -u ..\eng.traineddata 1\eng.

含義為:將當前路徑上一級目錄中的eng.trainneddata解壓到當前目錄中名稱為1的子目錄,且所有文件以eng.開頭。

執行命令成功效果類似下圖:

同樣方法,完成eng.best.traineddata解壓。

本文實踐時,將eng.trainneddata解壓至data文件夾,將eng.best.trainneddata解壓至data.best文件夾

eng.trainneddata解壓后data文件夾內容:

eng.best.trainneddata解壓后data.best文件夾內容:

經過對比,可發現,eng.best.traineddata中lstm文件與eng.traineddata中不同。

合並及重新封包

將data.best(來自eng.best.traineddata)整體覆蓋到data目錄。

此時data目錄中是一份結合了最新的LSTM及傳統引擎訓練文件的文件夾。

在data目錄中,執行combine_tessdata進行封包。

執行命令:combine_tessdata .\eng.

       命令格式:combine_tessdata <計划打包的tessdata文件目錄以及欲打包的文件前綴>

combine_tessdata .\eng. 命令則會將當前路徑下以eng.開頭的文件打包到eng.trainneddata,執行成功效果如下:

執行完畢后,就可以獲得合並了兩種引擎訓練數據的文件,如下。

至此全部步驟完畢。

PS:代碼中的設置(以Tess4j 4.0.2為例)

ITesseract instance = new Tesseract();
instance.setOcrEngineMode(TessOcrEngineMode.OEM_TESSERACT_LSTM_COMBINED);
instance.setDatapath(tessdataFolder.getAbsolutePath());
instance.setPageSegMode(TessPageSegMode.PSM_SINGLE_LINE);
instance.setLanguage("eng");
instance.setTessVariable("tessedit_char_whitelist","0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");

其中setOcrEngineMode(TessOcrEngineMode.OEM_TESSERACT_LSTM_COMBINED)表示啟動兩種引擎。


免責聲明!

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



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