Linux下 (Ubuntu16.04 ) Tesseract4.0訓練字型檔,提高正確識別率Linux下
由於tesseract的中文語言包“chi_sim”對中文手寫字型或者環境比較複雜的圖片,識別正確率不高,因此需要針對特定情況用自己的樣本進行訓練,提高識別率,通過訓練,也可以形成自己的語言庫。
Linux和windows的系統方法一樣,就是下面改名的地方,linux用的mv 命令,windows要用rename命令 , linux下要先安裝 tesseract-ocr
sudo apt install tesseract-ocr
步驟:
1、工具準備:
(1)官方文件:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00
(2)Java虛擬機器,由於jTessBoxEditor的執行依賴Java執行時環境,所以需要安裝Java虛擬機器。
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
(3)jTessBoxEditor2.0工具,用於調整圖片上文字的內容和位置,
下載地址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
安裝包解壓後執行的“jTessBoxEditor.jar”,,就可以開啟該工具了。
java -jar jTessBoxEditor.jar // linux下
2、樣本圖片準備:(進行訓練的樣本圖片數量越多越好)
這裡只准備2種不同字型樣本進行測試:
3、使用jTessBoxEditor生成訓練樣本的的合併tif圖片:
(1)開啟jTessBoxEditor,選擇Tools->Merge TIFF,進入訓練樣本所在資料夾,選中要參與訓練的樣本圖片:
(2)點選 “開啟” 後彈出儲存對話方塊,選擇儲存在當前路徑下,檔案命名為 “zwp.test.exp0.tif” ,格式只有一種 “TIFF” 可選。
tif文面命名格式[lang].[fontname].exp[num].tif
lang是語言,fontname是字型,num為自定義數字。
比如我們要訓練自定義字型檔 zwp,字型名test,那麼我們把圖片檔案命名為 zwp.test.exp0.tif
4、使用tesseract生成.box檔案:
在上一步驟生成的“zwp.test.exp0.tif”檔案所在目錄下開啟命令列程式,執行下面命令,執行完之後會生成zwp.test.exp0.box檔案。
tesseract zwp.test.exp0.tif zwp.test.exp0 -l chi_sim -psm 7 batch.nochop makebox
5、使用jTessBoxEditor矯正.box檔案的錯誤:
.box檔案記錄了每個字元在圖片上的位置和識別出的內容,訓練前需要使用jTessBoxEditor調整字元的位置和內容。
開啟jTessBoxEditor點選Box Editor ->Open,開啟步驟2中生成的“zwp.test.exp0.tif”,會自動關聯到“zwp.test.exp0.box”檔案,這兩檔案要求在同一目錄下。調整完點選“save”儲存修改。(有merge,split ,insert.delete等操作,同時可以將包含字的框進行調節 ,圖中用調整位置標紅)
6、生成font_properties檔案:(該檔案沒有後綴名)
(1)執行命令,執行完之後,會在當前目錄生成font_properties檔案
echo test 0 0 0 0 0 >font_properties
(2)也可以手工新建一個名為font_properties的文字檔案,輸入內容 “test 0 0 0 0 0” 表示字型test的粗體、傾斜等共計5個屬性。這裡的“test”必須與“zwp.test.exp0.box”中的“test”名稱一致。
7、使用tesseract生成.tr訓練檔案:
執行下面命令,執行完之後,會在當前目錄生成zwp.test.exp0.tr檔案。
tesseract zwp.test.exp0.tif zwp.test.exp0 nobatch box.train
8、生成字符集檔案:
執行下面命令:執行完之後會在當前目錄生成一個名為“unicharset”的檔案。
unicharset_extractor zwp.test.exp0.box
9、生成shape檔案:
執行下面命令,執行完之後,會生成 shapetable 和 zwp.unicharset 兩個檔案。
shapeclustering -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr
10、生成聚字元特徵檔案:
執行下面命令,會生成 inttemp、pffmtable、shapetable和zwp.unicharset四個檔案。
mftraining -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr
11、生成字元正常化特徵檔案:
執行下面命令,會生成 normproto 檔案。
cntraining zwp.test.exp0.tr
12、檔案重新命名:
重新命名inttemp、pffmtable、shapetable和normproto這四個檔案的名字為[lang].xxx。
這裡修改為zwp.inttemp、zwp.pffmtable、zwp.shapetable和zwp.normproto
執行下面命令:
mv normproto zwp.normproto
mv inttemp zwp.inttemp
mv pffmtable zwp.pffmtable
mv shapetable zwp.shapetable
13、合併訓練檔案:
執行下面命令,會生成zwp.traineddata檔案。
combine_tessdata zwp.
Log輸出中的Offset 1、3、4、5、13這些項不是-1 (其餘的不用在意),表示新的語言包生成成功。
** 將生成的“zwp.traineddata”語言包檔案複製到Tesseract-OCR 安裝目錄下的tessdata資料夾中,就可以使用訓練生成的語言包進行影象文字識別了。**
14、測試:
輸入下面命令,-l後面為訓練生成的語言包。(當然在輸入下面的命令之前,將生成的“zwp.traineddata”語言包檔案複製到Tesseract-OCR 安裝目錄下的tessdata資料夾中,就可以使用訓練生成的語言包進行影象文字識別了)
tesseract test.PNG test -l zwp
使用新訓練的語言包進行文字識別後,會發現之前識別不出來的文字也可以識別出來了。
原文:https://blog.csdn.net/a745233700/article/details/80175883