Tesseract-OCR 4.1 LSTM訓練方法

曾參考此處->:https://blog.csdn.net/qq_30110069/article/details/98742701

Tesseract-OCR 4.1 LSTM訓練流程 (win10環境)

一、配置tesseract 4.1版本

可通過自行編譯源碼或者下載安裝文件安裝tesseract。最新的tesseract 4.1 LSTM版無法找到安裝文件,通過編譯源碼生成如下目錄:

在這裏插入圖片描述
下載源碼VS2017自行編譯tesseract 4.1教程: https://blog.csdn.net/kds0714/article/details/90755691
配置環境變量

1、將bin目錄加到系統變量Path

2、將tessdata(訓練的字庫文件) 加到管理員用戶變量,變量名TESSDATA_PREFIX,變量值爲tessdata目錄的路徑
在這裏插入圖片描述
在這裏插入圖片描述
測試環境:

Win+R 分別輸入:

tesseract --version

tesseract --list-langs

查看版本和當前含有的語言庫,有返回值即可

二、訓練流程

基本流程:

(1) jTessBoxEditor將樣本合成tif文件

(2) 用已有的庫識別tif文件,產生記錄着數字內容,左上角座標,寬高的.box文件。已有的庫可以是下載的,也可以是自己訓練出的

(3) 用jTessBoxEditor工具標註樣本,調整.box文件數字內容和位置

(4) 在已有庫的基礎上訓練樣本,合成訓練文件。

(5) 將合成後的文件放在tessdata文件夾中,通過代碼調用來識別,測試識別率。

訓練可迭代:如用eng爲基礎,訓練樣本生成nml,nml仍含有eng的效果,但按理說效果可能會減弱些。所以可以加上不同種類的樣本訓練成一個大字庫。

準備:

訓練目錄下,至少應含有合成的.tif文件。需要作爲基礎字庫的原.traineddata文件,如eng.traineddata

以官方下載的eng爲例,訓練nml.num.exp0

1、用jTessBoxEditor工具,將樣本文件合併成.tif文件。規定如下命名格式:[lang].[fontname].exp[num].tif

nml.num.exp0.tif,nml是語言名,num是字體名,exp0是版本號。訓練過程應保持這種命名習慣

jTessBoxEditor工具的使用:

在這裏插入圖片描述

Tools -> Merge TIFF,選擇文件類型爲all the images,選中所有圖片 -> 命名爲***.tif 合併爲.tif文件
1568101531560

1568101559988在這裏插入圖片描述

2、在訓練目錄下打開cmd,用現有的字體庫識別.tif文件,生成對應的.box文件。比如,用eng庫識別樣本,生成.box文件:

tesseract nml.num.exp0.tif nml.num.exp0 -l eng --psm 6 batch.nochop makebox

輸入命令後,會生成nml.um.exp0.box文件。

其中命令參數含義:

nml.num.exp0.tif 上一步生成的.tif 格式的文件

nml.num.exp0 指明要生成的.box文件的名稱

-l eng表示識別使用的語言是eng,

–psm表示採用的識別模式,通常6比較好。可通過tesseract --help-psm查看所有的識別模式。6指的是假設去識別一個單一的文本塊。

3、jTessBoxEditor調整.box文件
1568105318525
Box Editor -> Open打開.tif文件,會關聯同名的.box文件。調整數字時對應修改.box文件。
在這裏插入圖片描述

4、利用.tif和.box文件,生成.lstmf文件用於lstm訓練

tesseract nml.num.exp0.tif nml.num.exp0 -l eng --psm 6 lstm.train

其中每個參數的意義爲

nml.num.exp0.tif 上一步生成的.tif 格式的文件

nml.num.exp0 指明要生成的.lstmf文件的名稱

運行後會多出一個nml.num.exp0.lstmf文件

5、用已有的或官方下載的.traineddata文件中提取.lstm文件

https://github.com/tesseract-ocr/tessdata_best 從該鏈接中下載所需語言的.traineddata文件

注:一定要用從上述鏈接中下載的.traineddata文件,其他的.traineddata文件中提取.lstm文件無法進行訓練。

將下載好的.traineddata文件拷貝到訓練文件夾下

combine_tessdata -e eng.traineddata eng.lstm

運行上述代碼,會從.traineddata文件中提取出eng.lstm 文件

6. 創建文件,裏邊的內容爲.lstmf文件的路徑地址
7、進行訓練

lstmtraining --model_output="F:\Test\AMyWork\ImgSampleLib\nomal\samples\CTCCB24\output\output" --continue_from=F:\Test\AMyWork\ImgSampleLib\nomal\samples\CTCCB24\eng.lstm" 
--train_listfile="F:\Test\AMyWork\ImgSampleLib\nomal\samples\CTCCB24\eng.training_files.txt" --traineddata="F:\Test\AMyWork\ImgSampleLib\nomal\samples\CTCCB24\eng.traineddata" 
--debug_interval -1 --max_iterations 2000 

各個參數的意義:

–model_output 模型訓練輸出的路徑,命令中我的訓練目錄是CTCCB24,新建output\output存放訓練階段文件和最終的字庫

–continue_from 訓練從哪裏開始,這裏指定從第4步中提取的eng.lstm文件。也可從之前訓練生成的階段文件output_checkpoint開始。

–train_listfile 指定上一步創建的eng.training_files.txt文件路徑

–traineddata 第4步中下載的.traineddata文件的路徑

–debug_interval 當值爲-1時,訓練結束,會顯示訓練的一些結果參數

–max_iterations 指明訓練遍歷次數。最好使用這個參數:–target_error_rate 0.01 訓練至錯誤率低於0.01

訓練結束後,在output文件夾中會生成一個output_checkpoint文件和多個類似output0.012_3.checkpoint的.checkpoint文件

8、將checkpoint文件和.traineddata文件合併成新的.traineddata文件

lstmtraining --stop_training --continue_from="F:\Test\AMyWork\ImgSampleLib\nomal\samples\CTCCB24\output\output_checkpoint" 
--traineddata="F:\Test\AMyWork\ImgSampleLib\nomal\samples\CTCCB24\eng.traineddata" --model_output="F:\Test\AMyWork\ImgSampleLib\nomal\samples\CTCCB24\output\nml.traineddata"

各個參數的意義:

–stop_training 默認要有

–continue_from 上一步生成的output_checkpoint文件路徑

–traineddata 第4步中下載的已有.traineddata文件的路徑

–model_output zth.traineddata 輸出的路徑

9、將新生成的nml.traineddata文件拷貝到tessdata文件夾下,通過代碼進行識別

注意:VS項目要配置好tesseract4.1的頭文件、庫目錄,指定tessdata目錄

一些質量不好的圖片可能仍然需要二值化、濾波等預處理操作

bozhu不是大佬,各位看官可以結合其他博客使用。。。
項目過去了就沒有及時覆盤…有時間定會繼續研究。
當然每人的問題可能跟環境等都有問題,當時是自己用VS2017編譯的源碼,後期會提供編譯後文件。
當時調用時遇到過奇怪的問題:
當時是因爲在自己電腦上編譯,在硬件垃圾的服務器上調用。
出現 應用程序無法運行0xc000001d的問題,查找issues找到原因:編譯tesseract時makefile文件默認開啓cpu的AVX2指令集加速。但調用時若不支持AVX2指令集,就會報這個錯誤。
只有3代以上cpu才支持AVX2指令集
若有這種問題請移步:
https://blog.csdn.net/Hu_helloworld/article/details/102612794

有問題建議先查找issues,總能找到答案:
https://github.com/tesseract-ocr/tesseract/issues

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章