最近公司讓我做文字串識別,通過查閱資料,谷歌的開源框架 tesseract-ocr可以幫助我們進行識別圖像,文字等等,tesseract可以識別多種語言(一些常用的語言),多種圖片格式,非常強大。
首先體驗一下tesseract的強大功能,先安裝 tesseract_ocr ,下載地址爲http://code.google.com/p/tesseract-ocr/,請務必下載3.0.1版本,我前面下的最新3.0.2版本,生成字符特徵命令不能通過,最後勉強解決了,生成的字典識別出來的都是空字符
安裝完成之後 看下根目錄
tessdata文件夾主要存放字典文件,只要把字典文件放進去,就可以用tesseract 識別相關語言的文字
現在先來識別一張圖片
把他放入任意一個文件夾,cmd 命令cd到圖片放置的目錄,然後執行
[html] view plain copy
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 文件
執行命令
[html] view plain copy
tesseract why.tif why4 batch.nochop makebox
這個文件是通過 tesseract 識別出來的,標示了圖片集中 文字的位置,大小,識別後的字符結果。
3、調整,因爲 tesseract 識別的不準確,所以我們用 jTessBoxEditor來調整識別文字的位置、結果。
用 jTessBoxEditor打開生成的圖片集why4.tif ,注意 why4.tif 對應的box文件一定要和他處於同一個文件夾下(請保持文件名),否則,用jTessBoxEditor打開沒有 位置、識別結果等信息,然後就可以調整了,調整完之後保存
4、生成.tr文件
[html] view plain copy
tesseract why4.tif why4 nobatch box.train
5、計算字符集,從生成的 box文件中提取
[html] view plain copy
unicharset_extractor why4.box
6、生成字體特徵文件,現在文件夾下新建任意文件名的 特徵文件,裏面的內容格式爲
[html] view plain copy
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
fontname爲字體名稱,保持和 圖片集文件 .tif 和.box文件的前綴名一致 ,italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值爲1或0,表示字體是否具有這些屬性。
例如我新建了一個 名爲 font,內容 爲
[html] view plain copy
why4 0 0 0 0 0
的文件
輸入命令
[html] view plain copy
mftraining -F font -U unicharset why4.tr
【特別說明:本次如果不只是font文件的類型,不全名的話可能會mftraining 報錯】
正確的:mftraining -F font.txt -U unicharset why4.tr
7 、聚集tesseract 識別的訓練文件
[html] view plain copy
cntraining why4.tr
執行完這一步之後發現文件夾下生產了許多文件,把unicharset, inttemp, normproto, pfftable這幾個文件加上前綴 why4.
8、最後一步,合併相關文件,生成字典文件
[html] view plain copy
combine_tessdata why4.
好了,至此字典文件就生產了,我們把生成的字典文件why4.traineddata放入到 tesseract_ocr 根目錄下的 tessdata文件夾下
開始使用我們訓練過得字體庫
隨便找一張圖片測試一下
[html] view plain copy
tesseract 13.jpg 13 -l why4
可以看到,效果好了許多
說了這麼多,生成一個字庫還是挺麻煩的,尤其是調整,看得我眼睛都花了,心情煩躁,好不容易做好了一個字庫,但是不夠 ,還要多添加一些訓練內容進去該怎麼辦呢,經過我的研究,終於找到了3.0.1版本合併字庫的方法
首先,需要 生成的字符集.tif文件,位置文件 .box ,只要有這兩個文件在,就可以合併字典
好了,我現在有三個 需要合併的字典 why3 why4 why5,他他們的名字修改爲 name.num 的形式,分別改爲 why.3 why.4 why.5
1、先生成相對應的 .tr 文件
[html] view plain copy
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、從所有文件中提取字符
[html] view plain copy
unicharset_extractor why.3.box why.4.box why.5.box
3、生成字體特徵文件
新建的font文件中 把所有box文件對應的 字體特徵都加進去
[html] view plain copy
why.4 0 0 0 0 0
why.3 0 0 0 0 0
why.5 0 0 0 0 0
[html] view plain copy
mftraining -F font -U unicharset why.3.tr why.4.tr why.5.tr
4 、聚集所有.tr 文件
[html] view plain copy
cntraining why.3.tr why.4.tr why.5.tr
6 、重命名文件,我把unicharset, inttemp, normproto, pfftable 這幾個文件加了前綴why.
7、合併所有文件 生成一個大的字庫文件
[html] view plain copy
combine_tessdata why.