tesseract識別率,通過樣本數量提升,呈對數型增長,所以根據你的驗證碼的複雜程度來確定你的訓練樣本數量
因爲本身tesseract的識別精度很低,所以很有必要進行訓練
驗證碼:是由背景圖片和字符圖片複合而成,訓練的時候我們要告訴每個驗證碼樣本里,字符的位置(上下左右四個參數)和字符的值
定位元素的位置:
下載工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,這個工具是用來訓練樣本用的,由於該工具是用Java開發的,需要安裝JAVA虛擬機才能運行。
1.採集樣本,通過python圖片循環抓取寫入,寫入的時候把圖片命名爲 .tif 結尾
def data_sear():
if not os.path.exists('samples'):
os.makedirs('samples')
for i in range(1,351):
result = urllib2.urlopen("http://。。。。網址。。。").read()
file1 = open('samples/result%d.tif'%i,'wb')
file1.write(result)
file1.close()
2.合併 tif(爲了方便通過軟件產生每個元素的位置)
打開jtessboxeditor,點擊Tools->Merge Tiff ,按住shift鍵選擇前文提到的101個tif文件,並把生成的tif合併到新目錄下,命名爲langyp.fontyp.exp0.tif。
注意:langyp 是本人定義的語言名稱,fontyp是本人定義的字體名稱,後續都會用到,你可以修改成你喜歡的名字。
遇到warning沒有關係
3.生成box文件(每個元素的位置)
執行命令生成langyp.fontyp.exp0.box文件
tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 batch.nochop makebox
4,軟件識別的錯誤很多,我們要自己處理box文件
切換到jTessBoxEditor工具的Box Editor頁,點擊open,打開前面的tiff文件langyp.fontyp.exp0.tif,工具會自動加載對應的box文件。
檢查box數據,如下圖所示,數字8被誤認成字母H,手工修改H成8,並保存。
注意:修改:選中要修改的元素,點擊右上角character》》後面的》》,會出現參數,在這裏面修改,通過上下左右可以連續增減參數
下面的page,每個page就是你的每個驗證碼,你驗證碼的數量和page不一樣,是應爲一些識別不了的空白,這個軟件略過了
記得要及時點擊上面的save按鈕,保存
5.生成font_properties(告訴tesseract,你的box語法)
執行echo命令生成font_properties。
echo fontyp 0 0 0 0 0 >font_properties
也可以手工新建一個名爲font_properties的文本文件(注意該文件沒有擴展名),內容爲字體名fontyp,後面帶5個0,分別代表字體的粗體、斜體等屬性,這裏全部是0
6.生成訓練文件執行命令,生成langyp.fontyp.exp0.tr訓練文件
tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 nobatch box.train
7.生成字符集執行命令,生成名爲unicharset的字符集文件。
unicharset_extractor langyp.fontyp.exp0.box
8.生成shape文件
執行命令,生成shape文件
shapeclustering -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
9.生成聚集字符特徵文件
執行命令,生成3個特徵字符文件,unicharset、inttemp、pffmtable
mftraining -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
10.生成字符正常化文件
執行命令,生成正常化特徵文件normproto。
cntraining langyp.fontyp.exp0.tr
11.更名
執行命令,把步驟9,步驟10生成的特徵文件進行更名。
rename normproto fontyp.normproto
rename inttemp fontyp.inttemp
rename pffmtable fontyp.pffmtable
rename unicharset fontyp.unicharset
rename shapetable fontyp.shapetable
執行命令,生成fontyp.traineddata文件。
combine_tessdata fontyp.
注意:
a、fontyp.traineddata文件最終要拷貝tesseract安裝目錄的tessdata目錄下,才能被tesseract找到。
b、命令行最後必須帶一個點。