tesseract4.0用自己的樣本訓練字體庫

原文鏈接:https://blog.csdn.net/a745233700/article/details/80175883

轉載自:
原文鏈接: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

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