tesseract-ocr訓練
參考文件:
http://my.oschina.net/lixinspace/blog/60124
http://blog.csdn.net/shuzui1985/article/details/8188993
https://code.google.com/p/tesseract-ocr/
http://blog.csdn.net/firehood_/article/details/8433077
http://blog.csdn.net/marvinhong/article/details/8459591
用tesseract進行簡單的驗證碼識別是可行的,但是其預設的識別檔案效果並不理想,所以需要針對你識別的目標專門進行訓練,然後使用訓練結果進行識別,識別率會大大提高的。
1,linux下安裝tesseract
下載tesseract-ocr:https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz
下載leptonica(tesseract依賴於它):http://www.leptonica.com/source/leptonica-1.70.tar.gz
下載eng語言識別檔案:https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.eng.tar.gz
先安裝leptonica:
$gunzip leptonica-1.70.tar.gz $tar xvf leptonica-1.70.tar $./configure $make $sudo make install
再安裝tesseract-ocr:
$gunzip leptonica-1.70.tar.gz
$tar xvf leptonica-1.70.tar
$./autogen.sh
$./configure
$make
$sudo make install
這中間可能會報一堆錯誤,按照提示安裝吧,比如可能缺少automake,那就yum install automake
最後將tesseract-ocr-3.02.eng.tar.gz拷貝到/usr/local/share/tessdata下:
#cp tesseract-ocr-3.02.eng.tar.gz /usr/local/share/tessdata #cd /usr/local/share/tessdata #gunzip tesseract-ocr-3.02.eng.tar.gz #tar xvf tesseract-ocr-3.02.eng.tar #mv tesseract-ocr/tessdata/* .
找一張圖片來看看識別結果:
$tesseract 1.bmp out -l eng -psm 7
這裡out為輸出識別的結果檔案,會自動加上字尾.txt,-l指定識別的字型檔案,這裡是eng英文數字,對應/usr/local/share/tessdata/eng.traineddata,-psm表示單行文字識別(還有很多型別,具體看幫助吧),可以看到識別的結果很不理想。
2,訓練tesseract-ocr
由於訓練的軟體要求使用tif格式的檔案,但是我安裝的linux版本不支援tif的識別,只支援bmp圖片,所以先安裝一個windows版本的tesseract-ocr,而且我的系統中發現3.0.2版本的在mftraining這一步要出錯,所以採用了3.0.1版本的,下載地址:http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.01-win32-portable.zip
這個下載下來之後,不需要安裝,直接解壓就可以使用,不過要在系統PATH變數中增加路徑,還要增加環境變數TESSDATA_PREFIX,這個環境變數是tesseract的解壓路徑,但後面一定要加上“\”。
訓練步驟:
1,準備一些需要識別的目標圖片,應該能夠覆蓋所有需要識別的字元
2,然後轉化為tif格式,可以使用imagemagick的convert命令
3,合併多個tif檔案為一個,這裡需要用到一個軟體:
http://jaist.dl.sourceforge.net/project/vietocr/jTessBoxEditor/jTessBoxEditor-1.0.zip
解壓之後執行:jTessBoxEditor.jar
4,開啟“Tools->Merge TIFF...”,選擇多個tif檔案,儲存為name.tif,所有下面的“name”,就是你所取的識別引擎檔案的名字,可以改成你自己的。
5,Make Box Files。在namt.tif所在的目錄下開啟一個命令列,輸入:
tesseract.exe name.tif name batch.nochop makebox
來生成一個box檔案,該檔案記錄了tesseract識別出來的每一個字和其位置座標。
6,使用jTessBoxEditor開啟name.tif檔案,需要記住的是第2步生成的name.box要和這個name.tif檔案同在一個目錄下。逐個校正文字,後儲存。
7,Run Tesseract for Training。輸入命令:
tesseract.exe name.tif name nobatch box.train
8,Compute the Character Set。輸入命令:
unicharset_extractor.exe name.box
9,新建檔案“font_properties”,並且輸入文字 :
name 0 0 0 0 0
大致意思就是說name這個語言的字型為普通字型。
並執行命令:
mftraining.exe -F font_properties -U unicharset name.tr
我使用3.0.2版本就是執行這一步時有問題,所以改成3.0.1版本的。
10,Clustering。輸入命令:
cntraining.exe name.tr
11,此時,在目錄下應該生成若干個檔案了,把unicharset, inttemp, normproto, pfftable這四個檔案加上字首“name.”。然後輸入命令:
combine_tessdata.exe name.
會顯示一個結果如:
Combining tessdata files
TessdataManager combined tesseract data files.
Offset for type 0 is -1
Offset for type 1 is 108
Offset for type 2 is -1
Offset for type 3 is 1660
Offset for type 4 is 327545
Offset for type 5 is 327781
Offset for type 6 is -1
Offset for type 7 is -1
Offset for type 8 is -1
Offset for type 9 is -1
Offset for type 10 is -1
Offset for type 11 is -1
Offset for type 12 is –1
必須確定的是第2、4、5、6行的資料不是-1,那麼一個新的字典就算生成了。
此時目錄下“name.traineddata”的檔案拷貝到tesseract程式目錄下的“tessdata”目錄。
以後就可以使用該該字典來識別了,例如:
tesseract.exe test.jpg out –l name -psm 7
將生成的檔案name.traineddata拷貝到linux相應的目錄下,一樣可以使用,整個訓練過程最麻煩的就是使用jTessBoxEditor進行文字的校正,需要非常耐心,這樣識別結果就會大大提高。