Tesseract-OCR 字符識別---樣本訓練 [轉]


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM