Tesseract-OCR 5.0LSTM訓練流程


本文主要參考以下幾篇文章改編而成:

http://ask.touchelf.net/ask/article/43.html

https://zhuanlan.zhihu.com/p/77013854

https://blog.csdn.net/yasi_xi/article/details/8763385

簡介

OCR(Optical Character Recognition):光學字符識別,是指電子設備(例如掃描儀或數碼相機)檢查紙上打印的字符,通過檢測暗、亮的模式確定其形狀,然后用字符識別方法將形狀翻譯成計算機文字的過程。
Tesseract:開源的OCR識別引擎,初期Tesseract引擎由HP實驗室研發,后來貢獻給了開源軟件業,后由Google進行改進、修改bug、優化,重新發布。

聲明

本文僅適用於Tesseract-OCR5.0的環境;如果安裝的是Tesseract-OCR4.0版本,訓練過程請參考:http://ask.touchelf.net/ask/article/43.html

如果使用Java的Tess4J插件,建議使用Tesseract-OCR4.0版本制作訓練包;因為根據本人實測,Tesseract-OCR5.0做出來的訓練包,在tess4j-3.4.8版本上,無法測試通過。

下載與安裝

1、Tesseract-OCR的Windows版本下載地址:https://digi.bib.uni-mannheim.de/tesseract/,本文用的版本是tesseract-ocr-w64-setup-v5.0.0-alpha.20210811.exe。

注意:安裝完成之后,需要把安裝目錄(通常是:C:\Program Files\Tesseract-OCR)加入Path環境變量之中,以方便后面執行命令行工具。

注意:Tesseract-OCR4.0版本,默認安裝於C:\Program Files (x86)\Tesseract-OCR目錄。我用的是Tesseract-OCR5.0,64位版本。

注意:Tesseract-OCR4.0安裝之后,需要設置TESSDATA_PREFIX環境變量,指向C:\Program Files (x86)\Tesseract-OCR\tessdata;Tesseract-OCR5.0,64位版本則不需要此操作。

2、各版本對應字庫下載地址:https://github.com/tesseract-ocr/tessdata_best,要識別簡體中文需要下載chi_sim.traindata字庫。

注意:一定要用從上述鏈接中下載.traineddata文件;如果從原有tesseract-OCR中的.traineddata文件提取.lstm文件,會造成無法進行訓練。我這里下載的是eng.traineddata,因為我不用它來識別中文。
3、下載工具jTessBoxEditor,地址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,將之解壓縮到C盤某個目錄。這個工具是用來訓練樣本用的,由於該工具是用JAVA開發的,需要安裝JAVA虛擬機才能運行。

注意:帶FX的版本才支持中文。

初步測試

假定工作目錄為:D:\Work\testlang,在此目錄里面有一張測試圖片:3024.jpg;假定Tesseract-OCR安裝目錄為:C:\Program Files\Tesseract-OCR,已經將此目錄加入到Path環境變量中。

打開命令行工具(我是以管理員身份打開的,沒試過其它方式),切換到工作目錄,執行:

tesseract 3024.jpg result -l eng

從資源管理器打開工作目錄下的result.txt,里面的內容為:3M 2 A;顯然,識別率不是很高。

注意:-l 參數表明用何種語言包;如果是eng,則可以省略。

訓練

步驟一、首先,准備足夠多的訓練圖片

將這些圖片存放到工作目錄\orgin子目錄,本文全部為JPG格式的圖片。

步驟二,通過畫圖軟件,把這些圖片轉換為TIF格式

保存完之后,原先的JPG圖片已經無效,可以刪除。

步驟三、通過jTessBoxEditor,將這些TIF合並成一個文件

資源管理器打開jTessBoxEditor解壓縮目錄,執行:train.bat;窗口打開之后,單擊:Tools->Merge Tiff ,按住Shift鍵選擇工作目錄\orgin下面的TIF文件,並把合並生成的TIF文件放到工作目錄中,重新命名。我這里命名為:num.font.exp0.tif

tif文件命名格式:[lang].[fontname].exp[num].tif
tif命名規則:lang為語言名稱,fontname為字體名稱,num為圖片序號;

步驟四、生成box文件

切換到命令行工具,在工作目錄下執行:

tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox

Make Box File的命令格式:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

其中lang為語言名稱,fontname為字體名稱,num為序號,可以隨便定義。

注意:tif文件名必須與box文件名保持一致,且位於同一個目錄。這么理解吧:TIF文件用來保存圖像(可以保存多張圖片,用Page來分頁);BOX文件用來保存圖像中文字的位置信息(每個字符的X、Y坐標,寬度、高度)。

步驟五、文字校正(這一步是真正自己做的工作)

運行jTessBoxEditor工具(如果已經打開,切換過去),點擊Box Editor->Open,打開num.font.exp0.tif文件,如下圖所示。可以看出有些字符識別不正確,需要對每張圖片中識別錯誤的字符進行校正。

窗口下方有翻頁按鈕;通過工具欄右上角的微調按鈕,修正每個字符的X、Y坐標,寬度、高度。不要的點刪除,增加有用的點(Delete、Insert)。

校正完成,保存即可,建議每頁修改完畢都按一次保存按鈕,避免意外。至此,jTessBoxEditorg工具的使命完成。

 有文章說,如果jTessBoxEditor char列出現亂碼,點擊setting->font,然后選擇宋體。我沒試過,因為我識別英文。有此問題的同學,不妨試一下。

步驟六、利用.tif和.box文件生成.lstmf文件用於lstm訓練

在工作目錄,命令行工具執行:

tesseract num.font.exp0.tif num.font.exp0 --psm 6 lstm.train

參數含義:

  • num.font.exp0.tif 上一步生成的.tif 格式的文件
  • num.font.exp0 指明要生成的.lstmf文件的名稱
  • -l eng 表示用到的語言,我這里訓練的是英語,故省略
  • --psm 6 表示采用的識別模式,通常6 效果會好些

運行后工作目錄會多出一個num.font.exp0.lstmf文件

步驟七、從已有的.traineddata中提取.lstm文件

將下載好的.traineddata文件拷貝到工作目錄(為什么用下載的,而不用Tesseract-OCR自帶的,原因參考前面),我這里是eng.traineddata,命令行工具執行:

combine_tessdata -e eng.traineddata eng.lstm

注意:如果你是中文語言包,請自行下載。

步驟八、創建num.training_files.txt文件,里邊的內容為.lstmf文件的路徑地址

我這里是:D:\Work\testlang\num.font.exp0.lstmf

步驟九、進行訓練

在工作目錄創建output子目錄,命令行工具執行:

lstmtraining --model_output="D:\Work\testlang\output\output" --continue_from="D:\Work\testlang\eng.lstm" --train_listfile="D:\Work\testlang\num.training_files.txt" --traineddata="D:\Work\testlang\eng.traineddata" --debug_interval -1 --max_iterations 800

參數含義:

  • --modeloutput 模型訓練輸出的路徑
  • --continue_from 訓練從哪里繼續,這里指定從上面提取的 eng.lstm文件,
  • --train_listfile 指定上一步創建的文件的路徑
  • --traineddata 指定.traineddata文件的路徑
  • --debug_interval 當值為-1時,訓練結束,會顯示訓練的一些結果參數
  • --max_iterations 指明訓練遍歷次數

此時命令窗口中會有滾動的訓練歷程,這一步操作比較耗費時間。訓練結束后,在output文件夾中會生成i一個output_checkpoint文件和多個類似output0.012_3.checkpoint的.checkpoint文件。

步驟十、將checkpoint文件和.traineddata文件合並成新的.traineddata文件

在工作目錄,命令行工具執行:

lstmtraining --stop_training --continue_from="D:\Work\testlang\output\output_checkpoint" --traineddata="D:\Work\testlang\eng.traineddata" --model_output="D:\Work\testlang\output\num.traineddata"

參數含義:

  • --stop_training 默認要有的
  • --continue_from 上一步生成的output_checkpoint文件路徑
  • --traineddata 第4步中下載的.traineddata文件的路徑
  • --model_output zth.traineddata 輸出的路徑

然后,將新生成的num.traineddata文件拷貝到tesseract-OCR\tessdata文件夾下,通過代碼進行識別。

進一步測試

在工作目錄,命令行工具執行:

tesseract 3024.jpg result -l num

注意:語言包,必須選擇剛剛創建的num。打開工作目錄下的result.txt,里面的內容為:3024;至此,訓練告一段落。


免責聲明!

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



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