Tesseract-OCR的簡單使用與訓練


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,回車;以下便是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來訓練樣本,來提高我們的准確率!

 

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 的錯誤。

 

 

 

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文件夾即可。

 

3、最后的測試

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

tesseract test.png output_2 -l num

我們可以看到新生成的文件output_2的內容為762408,內容完全正確。細心的人會發現,最后一句指令,我們使用了指令[-l num]而不是[-l eng]。這說明,最后一次轉換我們使用的是新生成的num語言的匹配庫而不是默認的eng語言匹配庫。

 

 

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

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

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

 


免責聲明!

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



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