谷歌的開源架構 tesseract-ocr可以幫助我們進行識别圖像,文字等等,tesseract可以識别多種語言(一些常用的語言),多種圖檔格式,非常強大。
首先體驗一下tesseract的強大功能,先安裝 tesseract_ocr ,下載下傳位址為http://code.google.com/p/tesseract-ocr/,請務必下載下傳3.0.1版本,我前面下的最新3.0.2版本,生成字元特征指令不能通過,最後勉強解決了,生成的字典識别出來的都是空字元
安裝完成之後 看下根目錄

tessdata檔案夾主要存放字典檔案,隻要把字典檔案放進去,就可以用tesseract 識别相關語言的文字
現在先來識别一張圖檔
把他放入任意一個檔案夾,cmd 指令cd到圖檔放置的目錄,然後執行
[code]
-
tesseract 1.jpg 1
可以看到檔案夾下 生成了一個txt文本,發現識别的效果并不是很理想。為啥呢,因為我所用的這個圖檔中的字有所變形,我們的圖檔和 tesseract 存在的 字做比對,找相近的,但是字典中沒有這種變形的字型,自然識别容易出錯,為了 提高識别率,是以我們需要 訓練一套 字型來提高識别率
訓練 字庫還需要一個工具jTessBoxEditor,下載下傳位址為 http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
現在我們來實戰一下,首先要生成一個 .tif 的圖檔集,我們使用 jTessBoxEditor 來合并多張 格式為tif的圖檔
1、打開 jTessBoxEditor,選擇tools->merge tif ,選擇 tif圖檔,生成一個 格式為tif的 圖檔集
2、我生成一個名為 why4.tif 的圖檔集, 進入 cd進入 why4.tif 所在的目錄,生成對應的 .box 檔案
執行指令
[code]
-
tesseract why.tif why4 batch.nochop makebox
這個檔案是通過 tesseract 識别出來的,标示了圖檔集中 文字的位置,大小,識别後的字元結果。
3、調整,因為 tesseract 識别的不準确,是以我們用 jTessBoxEditor來調整識别文字的位置、結果。
用 jTessBoxEditor打開生成的圖檔集why4.tif ,注意 why4.tif 對應的box檔案一定要和他處于同一個檔案夾下(請保持檔案名),否則,用jTessBoxEditor打開沒有 位置、識别結果等資訊,然後就可以調整了,調整完之後儲存
4、生成.tr檔案
[code]
-
tesseract why4.tif why4 nobatch box.train
5、計算字元集,從生成的 box檔案中提取
[code]
unicharset_extractor why4.box
6、生成字型特征檔案,現在檔案夾下建立檔案名為“"font_properties.txt"” 特征檔案,裡面的内容格式為
[text]
-
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
fontname為字型名稱,保持和 圖檔集檔案 .tif 和.box檔案的字首名一緻 ,italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值為1或0,表示字型是否具有這些屬性。
例如我建立了一個 名為 font,内容 為
[code]
-
why4 0 0 0 0 0
的檔案
輸入指令
[code]
-
mftraining -F font_properties.txt -U unicharset why4.tr
7 、聚集tesseract 識别的訓練檔案
[code]
-
cntraining why4.tr
執行完這一步之後發現檔案夾下生産了許多檔案,把unicharset, inttemp, normproto, pffmtable, shapetable這幾個檔案加上字首 why4.
8、最後一步,合并相關檔案,生成字典檔案
[code]
-
combine_tessdata why4.
好了,至此字典檔案就生産了,我們把生成的字典檔案why4.traineddata放入到 tesseract_ocr 根目錄下的 tessdata檔案夾下
開始使用我們訓練過得字型庫
随便找一張圖檔測試一下
[code]
-
tesseract 13.jpg 13 -l why4
可以看到,效果好了許多
說了這麼多,生成一個字庫還是挺麻煩的,尤其是調整,看得我眼睛都花了,心情煩躁,好不容易做好了一個字庫,但是不夠 ,還要多添加一些訓練内容進去該怎麼辦呢,經過我的研究,終于找到了3.0.1版本合并字庫的方法
首先,需要 生成的字元集.tif檔案,位置檔案 .box ,隻要有這兩個檔案在,就可以合并字典
好了,我現在有三個 需要合并的字典 why3 why4 why5,他他們的名字修改為 name.num 的形式,分别改為 why.3 why.4 why.5
1、先生成相對應的 .tr 檔案
[code]
tesseract why.3.tif why.3 nobatch box.train
tesseract why.4.tif why.4 nobatch box.train
tesseract why.5.tif why.5 nobatch box.train
2、從所有檔案中提取字元
[code]
-
unicharset_extractor why.3.box why.4.box why.5.box
3、生成字型特征檔案
建立的font檔案中 把所有box檔案對應的 字型特征都加進去
[code]
why.4 0 0 0 0 0
why.3 0 0 0 0 0
why.5 0 0 0 0 0
[code]
-
mftraining -F font -U unicharset why.3.tr why.4.tr why.5.tr
4 、聚集所有.tr 檔案
[code]
-
cntraining why.3.tr why.4.tr why.5.tr
6 、重命名檔案,我把unicharset, inttemp, normproto, pfftable 這幾個檔案加了字首why.
7、合并所有檔案 生成一個大的字庫檔案
[code]
-
combine_tessdata why.