爬蟲系列(三十七):訓(xùn)練Tesseract

大多數(shù)其他的驗證碼都是比較簡單的筐乳。例如,流行的 PHP 內(nèi)容管理系統(tǒng) Drupal 有一個著 名的驗證碼模塊(https://www.drupal.org/project/captcha)太防,可以生成不同難度的驗證碼。酸员,可以生成不同難度的驗證碼杏头。)

image.png

那么與其他驗證碼相比,究竟是什么讓這個驗證碼更容易被人類和機器讀懂呢?

  • 字母沒有相互疊加在一起沸呐,在水平方向上也沒有彼此交叉。也就是說呢燥,可以在每一個字 母外面畫一個方框崭添,而不會重疊在一起。
  • 圖片沒有背景色叛氨、線條或其他對 OCR 程序產(chǎn)生干擾的噪點呼渣。
  • 雖然不能因一個圖片下定論,但是這個驗證碼用的字體種類很少寞埠,而且用的是 sans-serif 字體(像“4”和“M”)和一種手寫形式的字體(像“m”“C”和“3”)屁置。
  • 白色背景色與深色字母之間的對比度很高。

這個驗證碼只做了一點點改變仁连,就讓 OCR 程序很難識別蓝角。

  • 字母和數(shù)據(jù)都使用了阱穗,這會增加待搜索字符的數(shù)量。
  • 字母隨機的傾斜程度會迷惑 OCR 軟件使鹅,但是人類還是很容易識別的揪阶。
  • 那個比較陌生的手寫字體很有挑戰(zhàn)性,在“C”和“3”里面還有額外的線條患朱。另外這 個非常小的小寫“m”鲁僚,計算機需要進行額外的訓(xùn)練才能識別。 用下面的代碼運行 Tesseract 識別圖片:

tesseract captchaExample.png output

我們得到的結(jié)果 output.txt 是: 4N\裁厅,冰沙,,C<3

訓(xùn)練Tesseract

要訓(xùn)練 Tesseract 識別一種文字执虹,無論是晦澀難懂的字體還是驗證碼拓挥,你都需要向 Tesseract 提供每個字符不同形式的樣本。

做這個枯燥的工作可能要花好幾個小時的時間声畏,你可能更想用這點兒時間找個好看的視頻 或電影看看撞叽。首先要把大量的驗證碼樣本下載到一個文件夾里。

下載的樣本數(shù)量由驗證碼 的復(fù)雜程度決定;我在訓(xùn)練集里一共放了 100 個樣本(一共 500 個字符插龄,平均每個字符 8 個樣本;a~z 大小寫字母加 0~9 數(shù)字愿棋,一共 62 個字符),應(yīng)該足夠訓(xùn)練的了均牢。

提示:建議使用驗證碼的真實結(jié)果給每個樣本文件命名(即4MmC3.jpg)糠雨。 這樣可以幫你 一次性對大量的文件進行快速檢查——你可以先把圖片調(diào)成縮略圖模式,然后通過文件名 對比不同的圖片徘跪。這樣在后面的步驟中進行訓(xùn)練效果的檢查也會很方便甘邀。

第二步是準(zhǔn)確地告訴 Tesseract 一張圖片中的每個字符是什么,以及每個字符的具體位置垮庐。 這里需要創(chuàng)建一些矩形定位文件(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 個數(shù)字分別是包圍這個字符的最小矩形的坐標(biāo) (圖片左下角是原點 (0逗抑,0),4 個數(shù)字分別對應(yīng)每個字符的左下角 x 坐標(biāo)寒亥、左下角 y 坐標(biāo)邮府、右上角 x 坐標(biāo)和右上角 y 坐標(biāo)),最后一個數(shù)字“0”表示圖片樣本的編號溉奕。

顯然褂傀,手工創(chuàng)建這些圖片矩形定位文件很無聊,不過有一些工具可以幫你完成加勤。我很喜歡 在線工具 Tesseract OCR Chopper(http://pp19dd.com/tesseract-ocr-chopper/)仙辟,因為它不需要同波,因為它不需要) 安裝,也沒有其他依賴欺嗤,只要有瀏覽器就可以運行参萄,而且用法很簡單:上傳圖片,如果要 增加新矩形就單擊“add”按鈕煎饼,還可以根據(jù)需要調(diào)整矩形的尺寸讹挎,最后把新生成的矩形 定位文件復(fù)制到一個新文件里就可以了。

矩形定位文件必須保存在一個 .box 后綴的文本文件中吆玖。和圖片文件一樣筒溃,文本文件也是用 驗證碼的實際結(jié)果命名(例如,4MmC3.box)沾乘。另外怜奖,這樣便于檢查 .box 文件的內(nèi)容和文件的名稱,而且按文件名對目錄中的文件排序之后翅阵,就可以讓 .box 文件與對應(yīng)的圖片文件 的實際結(jié)果進行對比歪玲。

你還需要創(chuàng)建大約 100 個 .box 文件來保證你有足夠的訓(xùn)練數(shù)據(jù)。因為 Tesseract 會忽略那 些不能讀取的文件掷匠,所以建議你盡量多做一些矩形定位文件滥崩,以保證訓(xùn)練足夠充分。如果 你覺得訓(xùn)練的 OCR 結(jié)果沒有達到你的目標(biāo)讹语,或者 Tesseract 識別某些字符時總是出錯钙皮,多 創(chuàng)建一些訓(xùn)練數(shù)據(jù)然后重新訓(xùn)練將是一個不錯的改進方法。

創(chuàng)建完滿載 .box 文件和圖片文件的數(shù)據(jù)文件夾之后顽决,在做進一步分析之前最好備份一下這 個文件夾短条。雖然在數(shù)據(jù)上運行訓(xùn)練程序不太可能刪除任何數(shù)據(jù),但是創(chuàng)建 .box 文件用了你 好幾個小時的時間才菠,來之不易茸时,穩(wěn)妥一點兒總沒錯。此外赋访,能夠抓取一個滿是編譯數(shù)據(jù)的 混亂目錄可都,然后再嘗試一次,總是好的进每。

前面的內(nèi)容只是對 Tesseract 庫強大的字體訓(xùn)練和識別能力的一個簡略概述。如果你對 Tesseract 的其他訓(xùn)練方法感興趣命斧,甚至打算建立自己的驗證碼訓(xùn)練文件庫田晚,或者想和全世 界的 Tesseract 愛好者分享自己對一種新字體的識別成果,推薦閱讀 Tesseract 的文檔:https://github.com/tesseract-ocr/tesseract/wiki国葬,加油贤徒!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芹壕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子接奈,更是在濱河造成了極大的恐慌踢涌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件序宦,死亡現(xiàn)場離奇詭異睁壁,居然都是意外死亡,警方通過查閱死者的電腦和手機互捌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門潘明,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秕噪,你說我怎么就攤上這事钳降。” “怎么了腌巾?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵遂填,是天一觀的道長。 經(jīng)常有香客問我澈蝙,道長吓坚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任碉克,我火速辦了婚禮凌唬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漏麦。我一直安慰自己客税,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布撕贞。 她就那樣靜靜地躺著更耻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捏膨。 梳的紋絲不亂的頭發(fā)上秧均,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音号涯,去河邊找鬼目胡。 笑死,一個胖子當(dāng)著我的面吹牛链快,可吹牛的內(nèi)容都是我干的誉己。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼域蜗,長吁一口氣:“原來是場噩夢啊……” “哼巨双!你這毒婦竟也來了噪猾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤筑累,失蹤者是張志新(化名)和其女友劉穎袱蜡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慢宗,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坪蚁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婆廊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迅细。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淘邻,靈堂內(nèi)的尸體忽然破棺而出茵典,到底是詐尸還是另有隱情,我是刑警寧澤宾舅,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布统阿,位于F島的核電站,受9級特大地震影響筹我,放射性物質(zhì)發(fā)生泄漏扶平。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一蔬蕊、第九天 我趴在偏房一處隱蔽的房頂上張望结澄。 院中可真熱鬧,春花似錦岸夯、人聲如沸麻献。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勉吻。三九已至,卻和暖如春旅赢,著一層夾襖步出監(jiān)牢的瞬間齿桃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缚忧。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像香到,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容