图像文字识别(三):Tesseract4.0训练字库,提高正确识别率
??由于tesseract的中文語言包“chi_sim”對中文手寫字體或者環境比較復雜的圖片,識別正確率不高,因此需要針對特定情況用自己的樣本進行訓練,提高識別率,通過訓練,也可以形成自己的語言庫。
?
步驟:
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”,或者雙擊該目錄下的“train.bat”腳本文件,就可以打開該工具了。
?
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”保存修改。
?
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
執行下面命令:
rename normproto zwp.normproto rename inttemp zwp.inttemp rename pffmtable zwp.pffmtable rename shapetable zwp.shapetable?
13、合并訓練文件:
執行下面命令,會生成zwp.traineddata文件。
combine_tessdata zwp.Log輸出中的Offset 1、3、4、5、13這些項不是-1,表示新的語言包生成成功。
將生成的“zwp.traineddata”語言包文件復制到Tesseract-OCR 安裝目錄下的tessdata文件夾中,就可以使用訓練生成的語言包進行圖像文字識別了。
?
14、測試:
輸入下面命令,-l后面為訓練生成的語言包。
tesseract test.PNG test -l zwp使用新訓練的語言包進行文字識別后,會發現之前識別不出來的文字也可以識別出來了。
?
附:最終所有的生成文件:
總結
以上是生活随笔為你收集整理的图像文字识别(三):Tesseract4.0训练字库,提高正确识别率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像文字识别(二):java调用tess
- 下一篇: Linux:常用命令大全