使用jTessBoxEditorFX-2.2.0製作自己的字庫

在使用tesseract-ocr進行字符識別時,我們使用了官方提供的字庫,例如英文字庫、中文字庫,但這些字庫並不一定能滿足我們所有的需求。當tesseract提供的字庫中沒有我們識別的那種字體時,就會出現識別錯誤的問題,這個時候就需要訓練自己的字庫進行訓練了。我們可以製作出識別車牌的車牌字庫、識別身份證號的身份證字庫。
在這裏插入圖片描述

1 下載並安裝jTessBoxEditorFX

注意jTessBoxEditor有兩個版本,帶FX的版本才支持中文字符編輯,我們下載帶FX版本的。在這個網址上列出了所有的jTessBoxEditorFX版本。
https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
在這裏插入圖片描述
jTessBoxEditorFX-2.2.0.zip
下載完成後解壓
如下圖:

在這裏插入圖片描述
我們注意到解壓目錄下也有一個tesseract-ocr,因此我們需要配置tesseract-ocr的環境變量。
在系統環境變量path路徑下添加E:\jTessBoxEditorFX\tesseract-ocr
在這裏插入圖片描述
新建字庫tessdata的系統變量,變量名爲:TESSDATA_PREFIX
變量值爲:E:\jTessBoxEditorFX\tesseract-ocr\tessdata
確定後將電腦重啓,至此jTessBoxEditorFX安裝配置完成。

2 準備字庫訓練圖片,並製作tif圖片文件

字庫的訓練圖片格式最好是png的,注意圖片數字周圍的空白區域不能太窄,tesseract無法識別空白區域太窄的字符。
數字圖片下載地址
如下圖所示:
在這裏插入圖片描述
我們將上面的圖片放到一個E:\jTessBoxEditorFX目錄下新建的train_image文件夾下。
在E:\jTessBoxEditorFX目錄下有一個jTessBoxEditorFX.jar的java文件,這個文件需要用java虛擬機打開,其實就是你電腦上安裝了java,並配置了java環境就可以直接雙擊打開,安裝java這裏不再講述了。
在這裏插入圖片描述
打開這個jar文件,如下:
在這裏插入圖片描述
選擇 Tools -> Merge TIFF,打開對話框,選擇訓練樣本所在文件夾,並選中所有要參與訓練的樣本圖片,注意對話框中“文件類型”的選取,選擇所有的圖片文件
在這裏插入圖片描述
選擇好了後,點擊打開按鈕,出現文件保存對話框,輸入文件名:num_1.font.exp0.tif
在這裏插入圖片描述
正確進行上述步驟後會出現merge完成的提示
在這裏插入圖片描述
然後在圖片集那個文件目錄下會出現生成的這個tif文件
在這裏插入圖片描述

3 使用tesseract生成.box文件

打開命令提示符,進入步驟2生成的num_1.font.exp0.tif文件所在目錄
在這裏插入圖片描述
然後執行如下命令:

tesseract num_1.font.exp0.tif num_1.font.exp0 –l eng batch.nochop makebox

在這裏插入圖片描述
執行完成後,會在當前目錄下生成num_1.font.exp0.box文件。
在這裏插入圖片描述
使用jTessBoxEditor調整.box訓練文件
.box文件中記錄了每個字符在圖片上的位置以及識別出的內容,訓練之前需要使用jTessBoxEditor調整字符的位置和內容。
打開 jTessBoxEditor ,點擊 Box Editor -> Open ,打開步驟2中生成的 “num_1font.exp0.tif” ,會自動關聯到 “num_1.font.exp0.box” 文件:
在這裏插入圖片描述
打開完成後,每一個會顯示每一張圖片的的識別結果
在這裏插入圖片描述
接下來我們對每張圖片的識別字符和識別框進行糾正,如果字符識別錯了,我們就改成正確的,如果識別出現偏差,我們也要進行調整。
這個過程是非常重要的,字符框的好壞取決於方框是否調整的準確。
我們把所有圖片的全部糾正完。
在這裏插入圖片描述
點擊save按鈕,將校正後的box文件保存。
在這裏插入圖片描述

4 使用echo命令創建字體特徵文件

在命令符窗口中輸入如下命令:

echo num_1 0 0 0 0 0>font_properties

在這裏插入圖片描述
執行完成之後,在當前文件夾下生成font_properties文件
也可以手動在該文件夾下建立一個名爲 “font_properties” 的文件,這個文件沒有後綴名稱,輸入內容 “font 0 0 0 0 0” , 表示字體 font 的粗體、傾斜等共計5個屬性全都設置爲0
在這裏插入圖片描述

5 使用tesseract生成num_1.font.exp0.tr訓練文件

在命令行窗口中輸入命令:

tesseract num_1.font.exp0.tif num_1.font.exp0 nobatch box.train

在這裏插入圖片描述
生成訓練文件成功

在這裏插入圖片描述
在這裏插入圖片描述

6 生成字符集文件

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

unicharset_extractor num_1.font.exp0.box

在這裏插入圖片描述
執行之後在當前目錄生成unicharset文件
在這裏插入圖片描述

7 生成數據字典

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

mftraining -F font_properties -U unicharset -O num_1.unicharset num_1.font.exp0.tr

在這裏插入圖片描述
接着執行另外一個訓練命令:

cntraining num_1.font.exp0.tr

在這裏插入圖片描述

會在當前目錄下生成 4 個文件(inttemp、pffmtable、normproto、shapetable)
在這裏插入圖片描述
需要手動修改名稱,這裏我們修改成num_1.inttemp、num_1.pffmtable、num_1.normproto、num_1.shapetable。
在這裏插入圖片描述

8 合併數據文件,生成字庫文件

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

combine_tessdata num_1.

在這裏插入圖片描述
生成字庫文件成功,會在當前目錄生成num_1.traineddata文件,這個語言就是跟我們下載的官方字庫一樣,例如eng,chi_sim一樣,不過這個字庫專門用於識別圖片中那種數字字體。
在這裏插入圖片描述
我們把這個字庫num_1放到tesseract-ocr的tessdata目錄下E:\jTessBoxEditorFX\tesseract-ocr\tessdata
在這裏插入圖片描述

9 驗證生成的語言包字庫

輸入命令:

tesseract --list-langs

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

在這裏插入圖片描述
我們用這個字庫來識別一張圖片

tesseract 72.png out -l num_1

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

在這裏插入圖片描述
打開out文件
在這裏插入圖片描述
發現識別結果與圖片完全符合,至此,自己製作的字庫就已經成功了,可以識別所有這種數字字體的圖片。

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