天天看點

Tesseract-OCR的簡單使用與訓練

Tesseract,一款由HP實驗室開發由Google維護的開源OCR(Optical Character Recognition , 光學字元識别)引擎,與Microsoft Office Document Imaging(MODI)相比,我們可以不斷的訓練的庫,使圖像轉換文本的能力不斷增強;如果團隊深度需要,還可以以它為模闆,開發出符合自身需求的OCR引擎。

源碼位址為:https://github.com/tesseract-ocr/tesseract;

EXE可執行檔案位址:http://download.csdn.net/download/whatday/7740469;

接下來,我們将在Windows環境下安裝Tesseract并實作簡單的轉換和訓練:

1、Tesseract實作

大體流程:Tesseract安裝 -> 打開指令行 -> 生成目标檔案

Tesseract安裝

下載下傳tesseract-ocr-setup-3.02.02.exe安裝包,安裝成功後會在相應磁盤下有Tesseract-OCR檔案夾,如圖

Tesseract-OCR的簡單使用與訓練

打開指令行

打開指令行,輸入tesseract,回車;以下便是tesseract的大體面貌:

Tesseract-OCR的簡單使用與訓練

生成目标檔案

先準備一張圖檔檔案,如test.png

Tesseract-OCR的簡單使用與訓練

将指令行切換至目标圖像檔案目錄,比如我們轉換檔案為test.png(圖檔檔案允許多種格式),位于C:\Users\Lian\Desktop\test;然後在指令行中輸入

tesseract test.png output_1 –l eng      

【文法】:  tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile…]

imagename為目标圖檔檔案名,需加格式字尾;outputbase是轉換結果檔案名;lang是語言名稱(在Tesseract-OCR中tessdata檔案夾可看到以eng開頭的語言檔案eng.traineddata),如不标-l eng則預設為eng。

Tesseract-OCR的簡單使用與訓練

打開檔案output_1.txt,發現tesseract成功的将圖像轉換成152408。

Tesseract-OCR的簡單使用與訓練

可喜可賀,說明老牌名将tesseract還是很強的!但是還是有點不夠準确,那麼我們有沒有什麼辦法能提高tesseract識别字元準确率呢?接下來,我們将使用配套訓練工具jTessBoxEditor來訓練樣本,來提高我們的準确率!

2、Tesseract訓練:

大體流程為:安裝jTessBoxEditor -> 擷取樣本檔案 -> Merge樣本檔案 –> 生成BOX檔案 -> 定義字元配置檔案 -> 字元矯正 -> 執行批處理檔案 -> 将生成的traineddata放入tessdata中

安裝jTessBoxEditor

下載下傳jTessBoxEditor,位址https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/;解壓後得到jTessBoxEditor,由于這是由Java開發的,是以我們應該確定在運作jTessBoxEditor前先安裝JRE(Java Runtime Environment,Java運作環境)。

擷取樣本檔案

我們可以用畫圖工具繪制樣本檔案,數量越多越好,我自己畫了5張圖,如圖:

【注意】:樣本圖像檔案格式必須為tif\tiff格式,否則在Merge樣本檔案的過程中會出現 Couldn’t Seek 的錯誤。

Tesseract-OCR的簡單使用與訓練
Tesseract-OCR的簡單使用與訓練
Tesseract-OCR的簡單使用與訓練
Tesseract-OCR的簡單使用與訓練
Tesseract-OCR的簡單使用與訓練

Merge樣本檔案

打開jTessBoxEditor,Tools->Merge TIFF,将樣本檔案全部選上,并将合并檔案儲存為num.font.exp0.tif

生成BOX檔案

打開指令行并切換至num.font.exp0.tif所在目錄,輸入,生成檔案名為num.font.exp0.box

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

【文法】:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox  

lang為語言名稱,fontname為字型名稱,num為序号;在tesseract中,一定要注意格式。

定義字元配置檔案

在目标檔案夾内生成一個名為font_properties的文本檔案,内容為

font 0 0 0 0 0        

【文法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>  

fontname為字型名稱,italic為斜體,bold為黑體字,fixed為預設字型,serif為襯線字型,fraktur德文黑字型,1和0代表有和無,精細區分時可使用。

字元矯正

打開jTessBoxEditor,BOX Editor -> Open,打開num.font.exp0.tif;矯正<Char>上的字元,記得<Page>有好多頁噢!

Tesseract-OCR的簡單使用與訓練

修改後記得儲存。

執行批處理檔案

在目标目錄下生成一個批處理檔案

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. 

echo. & pause      

儲存後執行即可,執行結果如圖:

Tesseract-OCR的簡單使用與訓練

最終檔案夾内會有以下檔案,如圖:

Tesseract-OCR的簡單使用與訓練

将生成的traineddata放入tessdata中

最後将num.trainddata複制到Tesseract-OCR中tessdata檔案夾即可。

3、最後的測試

按照之前步驟,使用指令行輸入

tesseract test.png output_2 -l num      

我們可以看到新生成的檔案output_2的内容為762408,内容完全正确。細心的人會發現,最後一句指令,我們使用了指令[-l num]而不是[-l eng]。這說明,最後一次轉換我們使用的是新生成的num語言的比對庫而不是預設的eng語言比對庫。

Tesseract-OCR的簡單使用與訓練

我們可以看到,經過簡單的訓練,我們對于數字資料的轉換準确率提高了很多。Tesseract的優點除了可以不斷學習以外,還因為是使用C++寫的開源程式,可以使用C#或者C++調用以及修改,很關鍵!

關于Tesseract,關于OCR,關于計算機,還有太多值得自己去學習,希望以後可以在這裡記錄下來。

如有錯誤或者建議,請盡情指教!

大二暑期實習

2016/8/12

作者:

小LiAn

出處:

http://www.cnblogs.com/cnlian/>

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出,

原文連結

如有問題, 可郵件([email protected])咨詢.

繼續閱讀