轉載自:
原文鏈接:https://blog.csdn.net/whatday/article/details/38493551
由於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
其中,有關於–psm的訓練參數,可在cmd中,tesseract --help-psm查詢。
C:\Users\lei-pc>tesseract --help-psm
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
0 方向和腳本檢測(OSD)
1 自動頁面分割與OSD
2 自動頁面分割,但沒有OSD,而是OCR。
3 全自動頁面分割,但沒有OSD. (Default)
4 假設有一列大小不同的文本.
5 假設有一個垂直對齊的文本塊.
6 假設只有一個統一的文本塊.
7 將圖像視爲單個文本行.
8 將圖像看作一個單個詞.
9 將圖像視爲一個圓圈中的單個單詞.
10 將圖像視爲單個字符.
11 Sparse text. 在沒有特定順序的情況下,儘可能多地查找文本.
12 Sparse text with OSD.
13 Raw line. 將圖像視爲單個文本行,繞過特定於tesseract的技巧。
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
附:最終所有的生成文件:
可以發現命令很多 很複雜,這樣訓練較少樣本的字符可以。但耗時耗力,大多是重複性工作。都是命令行,因此可以寫一個批處理文件 自動化訓練字符。
請移步:
轉載自:
原文鏈接:https://blog.csdn.net/whatday/article/details/38493551