1. 程式人生 > >Linux下 (Ubuntu16.04 ) Tesseract4.0訓練字型檔,提高正確識別率Linux下

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