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目錄,輸入命令:
[plain] view plain copy- 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. 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- 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- 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- <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- font 0 0 0 0 0
這裡全取值為0,表示字體不是粗體、斜體等等。7.生成語言文件。在樣本圖片所在目錄下創建一個批處理文件,輸入如下內容。
[plain] view plain copy- 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目錄,輸入命令:
[plain] view plain copy- tesseract.exe number.jpg result -l eng
識別結果如如圖所示,可以看到識別率提高了不少。通過自定義訓練樣本,可以進行圖形驗證碼、車牌號碼識別等。感興趣的朋友可以研究研究。
推薦閱讀:
※入場比特幣堪比大冒險?他用一千多種交易數據給你定心丸
※阿里巴巴大數據之路
※在輿情引導中發揮大數據技術優勢
※陳書悅:如果你不用數據說話,數據就會替你說話
※這家大數據公司,竟是英國脫歐與特朗普當選的背後功臣
TAG:大數據 |