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



轉載自:http://blog.csdn.net/firehood_/article/details/8433077

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


使用默認的語言庫識別


1.安裝Tesseract

        從http://code.google.com/p/tesseract-ocr/downloads/list下載Tesseract,目前版本爲Tesseract3.02。因爲只是測試使用,這裏直接下載winodws下的安裝文件tesseract-ocr-setup-3.02.02.exe。安裝成功後會在相應磁盤上生成一個Tesseract-OCR目錄。通過目錄下的tesseract.exe程序就可以對圖像字符進行識別了。
2.準備一副待識別的圖像,這裏用畫圖工具隨便寫了一串數字,保存爲number.jpg,如下圖所示:
        

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

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

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

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

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


     


訓練樣本


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

1.下載工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,這個工具是用來訓練樣本用的,由於該工具是用JAVA開發的,需要安裝JAVA虛擬機才能運行。

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

  

  


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

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

注:Make Box File的命令格式爲:

  1. tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox  
  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頭,文件內容格式如下:

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

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

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

  1. font 0 0 0 0 0  
font 0 0 0 0 0
這裏全取值爲0,表示字體不是粗體、斜體等等。

7.生成語言文件。在樣本圖片所在目錄下創建一個批處理文件,輸入如下內容。

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

echo Run Tesseract for Training..
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train

echo Compute the Character Set..
unicharset_extractor.exe num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr

echo Clustering..
cntraining.exe num.font.exp0.tr

echo Rename Files..
rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable 

echo Create Tessdata..
combine_tessdata.exe num.

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


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

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


使用訓練後的語言庫識別


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

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

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

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