天天看點

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

作者:玄明Hanko

幾個常見的問題:

問題一:相關的幾個軟體下載下傳位址

Tesseract:Index of /tesseract

jTessBoxEditor: VietOCR - Browse /jTessBoxEditor at SourceForge.net

問題二:

jTessBoxEditor下載下傳是注意一下,中文的話要下載下傳jTessBoxEditorFX

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

問題三:

mftraining執行時提示停止工作,一般是Tesseract版本的問題,可以選擇Tesseract3驗證過是好的,Tesseract5會提示。

問題四:

多個字庫程式調用如何操作

tesseract.setLanguage("eng+chi_sim");
            

具體安裝及操作

在使用tesseract-ocr進行字元識别時,我們使用了官方提供的字庫,例如英文字庫、中文字庫,但這些字庫并不一定能滿足我們所有的需求。當tesseract提供的字庫中沒有我們識别的那種字型時,就會出現識别錯誤的問題,這個時候就需要訓練自己的字庫進行訓練了。我們可以制作出識别車牌的車牌字庫、識别身份證号的身份證字庫。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

1 下載下傳并安裝jTessBoxEditorFX

注意jTessBoxEditor有兩個版本,帶FX的版本才支援中文字元編輯,我們下載下傳帶FX版本的。在這個網址上列出了所有的jTessBoxEditorFX版本。

https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

jTessBoxEditorFX-2.2.0.zip

下載下傳完成後解壓

如下圖:

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

我們注意到解壓目錄下也有一個tesseract-ocr,是以我們需要配置tesseract-ocr的環境變量。

在系統環境變量path路徑下添加E:\jTessBoxEditorFX\tesseract-ocr

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

建立字庫tessdata的系統變量,變量名為:TESSDATA_PREFIX

變量值為:E:\jTessBoxEditorFX\tesseract-ocr\tessdata

确定後将電腦重新開機,至此jTessBoxEditorFX安裝配置完成。

2 準備字庫訓練圖檔,并制作tif圖檔檔案

字庫的訓練圖檔格式最好是png的,注意圖檔數字周圍的空白區域不能太窄,tesseract無法識别空白區域太窄的字元。

數字圖檔下載下傳位址

如下圖所示:

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

我們将上面的圖檔放到一個E:\jTessBoxEditorFX目錄下建立的train_image檔案夾下。

在E:\jTessBoxEditorFX目錄下有一個jTessBoxEditorFX.jar的java檔案,這個檔案需要用java虛拟機打開,其實就是你電腦上安裝了java,并配置了java環境就可以直接輕按兩下打開,安裝java這裡不再講述了。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

打開這個jar檔案,如下:

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

選擇 Tools -> Merge TIFF,打開對話框,選擇訓練樣本所在檔案夾,并選中所有要參與訓練的樣本圖檔,注意對話框中“檔案類型”的選取,選擇所有的圖檔檔案

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

選擇好了後,點選打開按鈕,出現檔案儲存對話框,輸入檔案名:num_1.font.exp0.tif

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

正确進行上述步驟後會出現merge完成的提示

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

然後在圖檔集那個檔案目錄下會出現生成的這個tif檔案

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

3 使用tesseract生成.box檔案

打開指令提示符,進入步驟2生成的num_1.font.exp0.tif檔案所在目錄

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

然後執行如下指令:

tesseract num_1.font.exp0.tif num_1.font.exp0 –l eng batch.nochop makebox
            
java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

執行完成後,會在目前目錄下生成num_1.font.exp0.box檔案。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

使用jTessBoxEditor調整.box訓練檔案

.box檔案中記錄了每個字元在圖檔上的位置以及識别出的内容,訓練之前需要使用jTessBoxEditor調整字元的位置和内容。

打開 jTessBoxEditor ,點選 Box Editor -> Open ,打開步驟2中生成的 “num_1font.exp0.tif” ,會自動關聯到 “num_1.font.exp0.box” 檔案:

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

打開完成後,每一個會顯示每一張圖檔的的識别結果

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

接下來我們對每張圖檔的識别字元和識别框進行糾正,如果字元識别錯了,我們就改成正确的,如果識别出現偏差,我們也要進行調整。

這個過程是非常重要的,字元框的好壞取決于方框是否調整的準确。

我們把所有圖檔的全部糾正完。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

點選save按鈕,将校正後的box檔案儲存。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

4 使用echo指令建立字型特征檔案

在指令符視窗中輸入如下指令:

echo font 0 0 0 0 0>font_properties
            
java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

執行完成之後,在目前檔案夾下生成font_properties檔案

也可以手動在該檔案夾下建立一個名為 “font_properties” 的檔案,這個檔案沒有字尾名稱,輸入内容 “font 0 0 0 0 0” , 表示字型 font 的粗體、傾斜等共計5個屬性全都設定為0

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

5 使用tesseract生成num_1.font.exp0.tr訓練檔案

在指令行視窗中輸入指令:

tesseract num_1.font.exp0.tif num_1.font.exp0 nobatch box.train
            
java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

生成訓練檔案成功

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

6 生成字元集檔案

在指令行中執行如下指令:

unicharset_extractor num_1.font.exp0.box
            
java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

執行之後在目前目錄生成unicharset檔案

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

7 生成資料字典

在指令行中先執行如下指令:

mftraining -F font_properties -U unicharset -O num_1.unicharset num_1.font.exp0.tr
            
java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

接着執行另外一個訓練指令:

cntraining num_1.font.exp0.tr
            
java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

會在目前目錄下生成 4 個檔案(inttemp、pffmtable、normproto、shapetable)

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

需要手動修改名稱,這裡我們修改成num_1.inttemp、num_1.pffmtable、num_1.normproto、num_1.shapetable。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

8 合并資料檔案,生成字庫檔案

在指令提示符中執行如下指令:

combine_tessdata num_1.
            
java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

生成字庫檔案成功,會在目前目錄生成num_1.traineddata檔案,這個語言就是跟我們下載下傳的官方字庫一樣,例如eng,chi_sim一樣,不過這個字庫專門用于識别圖檔中那種數字字型。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

我們把這個字庫num_1放到tesseract-ocr的tessdata目錄下E:\jTessBoxEditorFX\tesseract-ocr\tessdata

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

9 驗證生成的語言包字庫

輸入指令:

tesseract --list-langs           

可以看到語言庫中有自己剛添加的字庫num_1

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

我們用這個字庫來識别一張圖檔

tesseract 72.png out -l num_1
            

會在圖檔目錄下生成out.txt檔案,我們打開這個txt檔案,可以看到使用num_1字庫識别這張圖檔的結果

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

打開out檔案

發現識别結果與圖檔完全符合,至此,自己制作的字庫就已經成功了,可以識别所有這種數字字型的圖檔。

補充,如果在制作box檔案時,這張圖檔沒有識别出特征字型,就代表無法去進行box微調。

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

​ 用notepad++打開box檔案,如下所示:

java ocr技術--tesseract-ocr:使用jTessBoxEditor制作訓練庫

3 15 40 40 100 32

第一個字元3是這張圖檔識别的char,15為X坐标,40為Y坐标,40為寬,100為高的,最後一個32就是第幾張圖檔,因為圖檔編号從0開始,是以這個是第33張圖檔。

是以如果哪一張圖檔缺少識别寬,比如第200張圖檔少定位框,就這樣加

3 15 40 40 100 199

————————————————

版權聲明:本文為CSDN部落客「Keras深度學習」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/qq_37781464/article/details/90292350