tesseract_ocr 字符識別基礎及訓練字庫、合併字庫

最近公司讓我做文字串識別,通過查閱資料,谷歌的開源框架 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

  1. 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

  1. tesseract why.tif  why4 batch.nochop makebox  


這個文件是通過 tesseract 識別出來的,標示了圖片集中 文字的位置,大小,識別後的字符結果。


3、調整,因爲 tesseract 識別的不準確,所以我們用 jTessBoxEditor來調整識別文字的位置、結果。

用 jTessBoxEditor打開生成的圖片集why4.tif ,注意 why4.tif 對應的box文件一定要和他處於同一個文件夾下(請保持文件名),否則,用jTessBoxEditor打開沒有 位置、識別結果等信息,然後就可以調整了,調整完之後保存



4、生成.tr文件

[html] view plain copy

  1. tesseract why4.tif  why4   nobatch box.train  



5、計算字符集,從生成的 box文件中提取 

[html] view plain copy

  1. unicharset_extractor why4.box  


6、生成字體特徵文件,現在文件夾下新建任意文件名的 特徵文件,裏面的內容格式爲 

[html] view plain copy

  1. <fontname> <italic> <bold> <fixed> <serif> <fraktur>  

fontname爲字體名稱,保持和 圖片集文件 .tif 和.box文件的前綴名一致 ,italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值爲1或0,表示字體是否具有這些屬性。

例如我新建了一個 名爲 font,內容 爲

[html] view plain copy

  1. why4 0 0 0 0 0  

的文件

輸入命令

[html] view plain copy

  1. mftraining -F font -U unicharset why4.tr 

    【特別說明:本次如果不只是font文件的類型,不全名的話可能會mftraining 報錯】

  2. 正確的:mftraining -F font.txt -U unicharset why4.tr


7 、聚集tesseract 識別的訓練文件

[html] view plain copy

  1. cntraining why4.tr  

執行完這一步之後發現文件夾下生產了許多文件,把unicharset, inttemp, normproto, pfftable這幾個文件加上前綴 why4.


8、最後一步,合併相關文件,生成字典文件

[html] view plain copy

  1. combine_tessdata why4.  



好了,至此字典文件就生產了,我們把生成的字典文件why4.traineddata放入到 tesseract_ocr 根目錄下的 tessdata文件夾下

開始使用我們訓練過得字體庫

隨便找一張圖片測試一下

[html] view plain copy

  1. 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

  1. tesseract why.3.tif why.3 nobatch box.train  

  2. tesseract why.4.tif why.4 nobatch box.train  

  3. tesseract why.5.tif why.5 nobatch box.train  

2、從所有文件中提取字符

[html] view plain copy

  1. unicharset_extractor why.3.box why.4.box why.5.box  

3、生成字體特徵文件

新建的font文件中 把所有box文件對應的 字體特徵都加進去

[html] view plain copy

  1. why.4 0 0 0 0 0  

  2. why.3 0 0 0 0 0  

  3. why.5 0 0 0 0 0  


[html] view plain copy

  1. mftraining -F font -U unicharset why.3.tr why.4.tr why.5.tr  

4 、聚集所有.tr 文件

[html] view plain copy

  1. cntraining why.3.tr why.4.tr why.5.tr  

6 、重命名文件,我把unicharset, inttemp, normproto, pfftable 這幾個文件加了前綴why.

7、合併所有文件 生成一個大的字庫文件

[html] view plain copy

  1. combine_tessdata why.  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章