Python機器學習:訓練Tesseract
訓練Tesseract
大多數其他的驗證碼都是比較簡單的。例如,流行的 PHP 內容管理系統 Drupal 有一個著 名的驗證碼模塊(https://www.drupal.org/project/captcha),可以生成不同難度的驗證碼。
那么與其他驗證碼相比,究竟是什么讓這個驗證碼更容易被人類和機器讀懂呢?
字母沒有相互疊加在一起,在水平方向上也沒有彼此交叉。也就是說,可以在每一個字 母外面畫一個方框,而不會重疊在一起。
圖片沒有背景色、線條或其他對 OCR 程序產生干擾的噪點。
雖然不能因一個圖片下定論,但是這個驗證碼用的字體種類很少,而且用的是 sans-serif 字體(像“4”和“M”)和一種手寫形式的字體(像“m”“C”和“3”)。
白色背景色與深色字母之間的對比度很高。
這個驗證碼只做了一點點改變,就讓 OCR 程序很難識別。
字母和數據都使用了,這會增加待搜索字符的數量。
字母隨機的傾斜程度會迷惑 OCR 軟件,但是人類還是很容易識別的。
那個比較陌生的手寫字體很有挑戰性,在“C”和“3”里面還有額外的線條。另外這 個非常小的小寫“m”,計算機需要進行額外的訓練才能識別。 用下面的代碼運行 Tesseract 識別圖片:
tesseract captchaExample.png output
我們得到的結果 output.txt 是: 4N\,,,C<3
訓練Tesseract
要訓練 Tesseract 識別一種文字,無論是晦澀難懂的字體還是驗證碼,你都需要向 Tesseract 提供每個字符不同形式的樣本。
做這個枯燥的工作可能要花好幾個小時的時間,你可能更想用這點兒時間找個好看的視頻 或電影看看。首先要把大量的驗證碼樣本下載到一個文件夾里。
下載的樣本數量由驗證碼 的復雜程度決定;我在訓練集里一共放了 100 個樣本(一共 500 個字符,平均每個字符 8 個樣本;a~z 大小寫字母加 0~9 數字,一共 62 個字符),應該足夠訓練的了。
提示:建議使用驗證碼的真實結果給每個樣本文件命名(即4MmC3.jpg)。 這樣可以幫你 一次性對大量的文件進行快速檢查——你可以先把圖片調成縮略圖模式,然后通過文件名 對比不同的圖片。這樣在后面的步驟中進行訓練效果的檢查也會很方便。
第二步是準確地告訴 Tesseract 一張圖片中的每個字符是什么,以及每個字符的具體位置。 這里需要創建一些矩形定位文件(box file),一個驗證碼圖片生成一個矩形定位文件。一 個圖片的矩形定位文件如下所示:
4 15 26 33 55 0
M 38 13 67 45 0
m 79 15 101 26 0
C 111 33 136 60 0
3 147 17 176 45 0
第一列符號是圖片中的每個字符,后面的 4 個數字分別是包圍這個字符的最小矩形的坐標 (圖片左下角是原點 (0,0),4 個數字分別對應每個字符的左下角 x 坐標、左下角 y 坐標、右上角 x 坐標和右上角 y 坐標),最后一個數字“0”表示圖片樣本的編號。
顯然,手工創建這些圖片矩形定位文件很無聊,不過有一些工具可以幫你完成。我很喜歡 在線工具 Tesseract OCR Chopper(http://pp19dd.com/tesseract-ocr-chopper/),因為它不需要?安裝,也沒有其他依賴,只要有瀏覽器就可以運行,而且用法很簡單:上傳圖片,如果要 增加新矩形就單擊“add”按鈕,還可以根據需要調整矩形的尺寸,最后把新生成的矩形 定位文件復制到一個新文件里就可以了。
矩形定位文件必須保存在一個 .box 后綴的文本文件中。和圖片文件一樣,文本文件也是用 驗證碼的實際結果命名(例如,4MmC3.box)。另外,這樣便于檢查 .box 文件的內容和文件的名稱,而且按文件名對目錄中的文件排序之后,就可以讓 .box 文件與對應的圖片文件 的實際結果進行對比。
你還需要創建大約 100 個 .box 文件來保證你有足夠的訓練數據。因為 Tesseract 會忽略那 些不能讀取的文件,所以建議你盡量多做一些矩形定位文件,以保證訓練足夠充分。如果 你覺得訓練的 OCR 結果沒有達到你的目標,或者 Tesseract 識別某些字符時總是出錯,多 創建一些訓練數據然后重新訓練將是一個不錯的改進方法。
創建完滿載 .box 文件和圖片文件的數據文件夾之后,在做進一步分析之前最好備份一下這 個文件夾。雖然在數據上運行訓練程序不太可能刪除任何數據,但是創建 .box 文件用了你 好幾個小時的時間,來之不易,穩妥一點兒總沒錯。此外,能夠抓取一個滿是編譯數據的 混亂目錄,然后再嘗試一次,總是好的。
前面的內容只是對 Tesseract 庫強大的字體訓練和識別能力的一個簡略概述。如果你對 Tesseract 的其他訓練方法感興趣,甚至打算建立自己的驗證碼訓練文件庫,或者想和全世 界的 Tesseract 愛好者分享自己對一種新字體的識別成果,推薦閱讀 Tesseract 的文檔:https://github.com/tesseract-ocr/tesseract/wiki,加油!
Python 機器學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。