天天看點

tesseract_ocr訓練字庫、合并字庫

谷歌的開源架構 tesseract-ocr可以幫助我們進行識别圖像,文字等等,tesseract可以識别多種語言(一些常用的語言),多種圖檔格式,非常強大。

首先體驗一下tesseract的強大功能,先安裝 tesseract_ocr ,下載下傳位址為http://code.google.com/p/tesseract-ocr/,請務必下載下傳3.0.1版本,我前面下的最新3.0.2版本,生成字元特征指令不能通過,最後勉強解決了,生成的字典識别出來的都是空字元

安裝完成之後 看下根目錄

tesseract_ocr訓練字庫、合并字庫

tessdata檔案夾主要存放字典檔案,隻要把字典檔案放進去,就可以用tesseract 識别相關語言的文字

現在先來識别一張圖檔

tesseract_ocr訓練字庫、合并字庫

把他放入任意一個檔案夾,cmd 指令cd到圖檔放置的目錄,然後執行

[code]

  1. tesseract 1.jpg 1
               
tesseract_ocr訓練字庫、合并字庫
tesseract_ocr訓練字庫、合并字庫
tesseract_ocr訓練字庫、合并字庫

可以看到檔案夾下 生成了一個txt文本,發現識别的效果并不是很理想。為啥呢,因為我所用的這個圖檔中的字有所變形,我們的圖檔和 tesseract 存在的 字做比對,找相近的,但是字典中沒有這種變形的字型,自然識别容易出錯,為了 提高識别率,是以我們需要 訓練一套 字型來提高識别率

訓練 字庫還需要一個工具jTessBoxEditor,下載下傳位址為 http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

現在我們來實戰一下,首先要生成一個 .tif 的圖檔集,我們使用 jTessBoxEditor 來合并多張 格式為tif的圖檔

1、打開 jTessBoxEditor,選擇tools->merge tif ,選擇 tif圖檔,生成一個 格式為tif的 圖檔集

tesseract_ocr訓練字庫、合并字庫
tesseract_ocr訓練字庫、合并字庫

2、我生成一個名為 why4.tif 的圖檔集, 進入 cd進入 why4.tif 所在的目錄,生成對應的 .box 檔案

執行指令

[code]

  1. tesseract why.tif  why4 batch.nochop makebox  
               
tesseract_ocr訓練字庫、合并字庫

這個檔案是通過 tesseract 識别出來的,标示了圖檔集中 文字的位置,大小,識别後的字元結果。

3、調整,因為 tesseract 識别的不準确,是以我們用 jTessBoxEditor來調整識别文字的位置、結果。

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

tesseract_ocr訓練字庫、合并字庫

4、生成.tr檔案

[code]

  1. tesseract why4.tif  why4   nobatch box.train  
               
tesseract_ocr訓練字庫、合并字庫

5、計算字元集,從生成的 box檔案中提取 

[code]

unicharset_extractor why4.box  
           

6、生成字型特征檔案,現在檔案夾下建立檔案名為“"font_properties.txt"” 特征檔案,裡面的内容格式為

[text]

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

fontname為字型名稱,保持和 圖檔集檔案 .tif 和.box檔案的字首名一緻 ,italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值為1或0,表示字型是否具有這些屬性。

例如我建立了一個 名為 font,内容 為

[code]

  1. why4 0 0 0 0 0  
               

的檔案

輸入指令

[code]

  1. mftraining -F font_properties.txt -U unicharset why4.tr
               

7 、聚集tesseract 識别的訓練檔案

[code]

  1. cntraining why4.tr  
               

執行完這一步之後發現檔案夾下生産了許多檔案,把unicharset, inttemp, normproto, pffmtable, shapetable這幾個檔案加上字首 why4.

8、最後一步,合并相關檔案,生成字典檔案

[code]

  1. combine_tessdata why4.
               
tesseract_ocr訓練字庫、合并字庫

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

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

随便找一張圖檔測試一下

[code]

  1. tesseract 13.jpg 13 -l why4  
               
tesseract_ocr訓練字庫、合并字庫

可以看到,效果好了許多

說了這麼多,生成一個字庫還是挺麻煩的,尤其是調整,看得我眼睛都花了,心情煩躁,好不容易做好了一個字庫,但是不夠 ,還要多添加一些訓練内容進去該怎麼辦呢,經過我的研究,終于找到了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]

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

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

4 、聚集所有.tr 檔案

[code]

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

6 、重命名檔案,我把unicharset, inttemp, normproto, pfftable 這幾個檔案加了字首why.

7、合并所有檔案 生成一個大的字庫檔案

[code]

  1. combine_tessdata why.