標籤:

Tesseract-OCR 字元識別---樣本訓練

Tesseract是一個開源的OCR(Optical Character Recognition,光學字元識別)引擎,可以識別多種格式的圖像文件並將其轉換成文本,目前已支持60多種語言(包括中文)。 Tesseract最初由HP公司開發,後來由Google維護,目前發布在Googel Project上。地址為code.google.com/p/tesse

使用默認的語言庫識別

1.安裝Tesseract

code.google.com/p/tesse下載Tesseract,目前版本為Tesseract3.02。因為只是測試使用,這裡直接下載winodws下的安裝文件tesseract-ocr-setup-3.02.02.exe。安裝成功後會在相應磁碟上生成一個Tesseract-OCR目錄。通過目錄下的tesseract.exe程序就可以對圖像字元進行識別了。

2.準備一副待識別的圖像,這裡用畫圖工具隨便寫了一串數字,保存為number.jpg,如下圖所示:

3. 打開命令行,定位到Tesseract-OCR目錄,輸入命令:

[plain] view plain copy

  1. tesseract.exe number.jpg result -l eng

其中result表示輸出結果文件txt名稱,eng表示用以識別的語言文件為英文。

3. 打開Tesseract-OCR目錄下的result.txt文件,看到識別的結果為7542315857,有3個字元識別錯誤,識別率還不是很高,那有沒有什麼方法來提供識別率呢?

其實Tesseract提供了一套訓練樣本的方法,用以生成自己所需的識別語言庫。下面介紹一下具體訓練樣本的方法。

訓練樣本

關於如何訓練樣本,Tesseract-OCR官網有詳細的介紹code.google.com/p/tesse。這裡通過一個簡單的例子來介紹一下如何進行樣本訓練。

1.下載工具jTessBoxEditor. Browse /jTessBoxEditor at SourceForge.net,這個工具是用來訓練樣本用的,由於該工具是用Java開發的,需要安裝JAVA虛擬機才能運行。

2. 獲取樣本圖像。用畫圖工具繪製了5張0-9的文樣本圖像(當然樣本越多越好),如下圖所示:

3.合併樣本圖像。運行jTessBoxEditor工具,在點擊菜單欄中Tools--->Merge TIFF。在彈出的對話框中選擇樣本圖像(按Shift選擇多張),合併成num.font.exp0.tif文件。4.生成Box File文件。打開命令行,執行命令:

[plain] view plain copy

  1. tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox

生成的BOX文件為num.font.exp0.box,BOX文件為Tessercat識別出的文字和其坐標。

註:Make Box File的命令格式為:

[plain] view plain copy

  1. tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

其中lang為語言名稱,fontname為字體名稱,num為序號,可以隨便定義。

5.文字校正。運行jTessBoxEditor工具,打開num.font.exp0.tif文件(必須將上一步生成的.box和.tif樣本文件放在同一目錄),如下圖所示。可以看出有些字元識別的不正確,可以通過該工具手動對每張圖片中識別錯誤的字元進行校正。校正完成後保存即可。

6.定義字體特徵文件。Tesseract-OCR3.01以上的版本在訓練之前需要創建一個名稱為font_properties的字體特徵文件。

font_properties不含有BOM頭,文件內容格式如下:

[plain] view plain copy

  1. <fontname> <italic> <bold> <fixed> <serif> <fraktur>

其中fontname為字體名稱,必須與[lang].[fontname].exp[num].box中的名稱保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值為1或0,表示字體是否具有這些屬性。

這裡在樣本圖片所在目錄下創建一個名稱為font_properties的文件,用記事本打開,輸入以下下內容:

[plain] view plain copy

  1. font 0 0 0 0 0

這裡全取值為0,表示字體不是粗體、斜體等等。7.生成語言文件。在樣本圖片所在目錄下創建一個批處理文件,輸入如下內容。

[plain] view plain copy

  1. rem 執行改批處理前先要目錄下創建font_properties文件
  2. echo Run Tesseract for Training..
  3. tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
  4. echo Compute the Character Set..
  5. unicharset_extractor.exe num.font.exp0.box
  6. mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
  7. echo Clustering..
  8. cntraining.exe num.font.exp0.tr
  9. echo Rename Files..
  10. rename normproto num.normproto
  11. rename inttemp num.inttemp
  12. rename pffmtable num.pffmtable
  13. rename shapetable num.shapetable
  14. echo Create Tessdata..
  15. combine_tessdata.exe num.

將批處理通過命令行執行。執行後的結果如下:

需確認列印結果中的Offset 1、3、4、5、13這些項不是-1。這樣,一個新的語言文件就生成了。

num.traineddata便是最終生成的語言文件,將生成的num.traineddata拷貝到Tesseract-OCR-->tessdata目錄下。可以用它來進行字元識別了。

使用訓練後的語言庫識別

用訓練後的語言庫識別number.jpg文件, 打開命令行,定位到Tesseract-OCR目錄,輸入命令:

[plain] view plain copy

  1. tesseract.exe number.jpg result -l eng

識別結果如如圖所示,可以看到識別率提高了不少。通過自定義訓練樣本,可以進行圖形驗證碼、車牌號碼識別等。感興趣的朋友可以研究研究。


推薦閱讀:

入場比特幣堪比大冒險?他用一千多種交易數據給你定心丸
阿里巴巴大數據之路
在輿情引導中發揮大數據技術優勢
陳書悅:如果你不用數據說話,數據就會替你說話
這家大數據公司,竟是英國脫歐與特朗普當選的背後功臣

TAG:大數據 |