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並實現簡單的轉換和訓練:
Tesseract實現
大體流程:Tesseract安裝 -> 開啟命令列 -> 生成目標檔案
Tesseract安裝
下載tesseract-ocr-setup-3.02.02.exe安裝包,安裝成功後會在相應磁碟下有Tesseract-OCR資料夾,如圖
開啟命令列
開啟命令列,輸入tesseract,回車;以下便是tesseract的大體面貌:
生成目標檔案
先準備一張圖片檔案,如test.png
將命令列切換至目標影象檔案目錄,比如我們轉換檔案為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。
開啟檔案output_1.txt,發現tesseract成功的將影象轉換成152408。
可喜可賀,說明老牌名將tesseract還是很強的!但是還是有點不夠準確,那麼我們有沒有什麼辦法能提高tesseract識別字符準確率呢?接下來,我們將使用配套訓練工具jTessBoxEditor
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 的錯誤。
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>有好多頁噢!
修改後記得儲存。
執行批處理檔案
在目標目錄下生成一個批處理檔案
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
儲存後執行即可,執行結果如圖:
最終資料夾內會有以下檔案,如圖:
將生成的traineddata放入tessdata中
最後將num.trainddata複製到Tesseract-OCR中tessdata資料夾即可。
最後的測試
按照之前步驟,使用命令列輸入
tesseract test.png output_2 -l num
我們可以看到新生成的檔案output_2的內容為762408,內容完全正確。細心的人會發現,最後一句指令,我們使用了指令[-l num]而不是[-l eng]。這說明,最後一次轉換我們使用的是新生成的num語言的匹配庫而不是預設的eng語言匹配庫。