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

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

 

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引擎,若是識別失敗,則會再使用傳統引擎進行識別,此種模式追求高精確度,但會消耗較多的系統資源。git

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

在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引擎的訓練數據。spa

使用軟件版本

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,code

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

操做系統: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)表示啓動兩種引擎。

相關文章
相關標籤/搜索