
800819103
在線客服,實時響應
qq群
在線客服,實時響應
客服電話
13318873961
驗證碼的出現主要是為了區分用戶是計算機還是人,比如數字驗證碼、字符驗證碼、滑動驗證碼等等。通常驗證碼是用來防止爬蟲程序惡意抓取信息,或者防止批量注冊等等,但是這驗證碼并不是萬能的,還是可以突破的,那么這爬蟲怎么突破驗證碼限制?
本文介紹了一套字符驗證碼識別的完整流程,對于驗證碼安全和OCR識別技術都有一定的借鑒意義。
一、圖片素材收集
1.選定素材類型
此圖片能滿足要求,仔細觀察其具有如下特點。
有利識別的特點 :由純阿拉伯數字組成、字數為4位、字符排列有規律、字體是用的統一字體 。
不利識別的特點 :圖片背景有干擾噪點 。
2.爬取素材,主要步驟如下:
通過瀏覽器的抓包功能獲取隨機圖片驗證碼生成接口,批量請求接口以獲取圖片,將圖片保存到本地磁盤目錄中,循環執行N次,即可保存N張驗證素材了。代碼,如下:
效果圖:
二、圖片預處理
雖然目前的機器學習算法已經相當先進了,但是為了減少后面訓練時的復雜度,同時增加識別率,很有必要對圖片進行預處理,使其對機器識別更友好。
1.二值化圖片
將RGB彩圖轉為灰度圖,將灰度圖按照設定閾值轉化為二值圖:
由PIL轉化后變成二值圖片:0表示黑色,1表示白色。二值化后帶噪點的 6937 的像素點輸出后如下圖:
2.去除噪點
在轉化為二值圖片后,就需要清除噪點。本文選擇的素材比較簡單,大部分噪點也是最簡單的那種 孤立點,所以可以通過檢測這些孤立點就能移除大量的噪點。
關于如何去除更復雜的噪點甚至干擾線和色塊,有比較成熟的算法: 洪水填充法 Flood Fill ,后面有興趣的時間可以繼續研究一下。
經過預處理后的圖片如下所示:
對比文章開頭的原始圖片,那些 孤立點 都被移除掉,相對比較 干凈 的驗證碼圖片已經生成。
三、圖片字符切割
1.分割算法
使用圖像編輯軟件(PhoneShop或者其它)打開驗證碼圖片,放大到像素級別,觀察其它一些參數特點:
可以得到如下參數:
整個圖片尺寸是 40*10
單個字符尺寸是 6*10
左右字符和左右邊緣相距2個像素
字符上下緊挨邊緣(即相距0個像素)
這樣就可以很容易就定位到每個字符在整個圖片中占據的像素區域,然后就可以進行分割了,具體代碼如下:
然后就能得到被切割的 原子級 的圖片元素了:
2.尺寸歸一
本文所選擇的研究對象本身尺寸就是統一狀態:6*10的規格,所以此部分不需要額外處理。但是一些進行了扭曲和縮放的驗證碼,則此部分也會是一個圖像處理的難點。
在前面的環節,已經完成了對單個圖片的處理和分割了,后面就開始進行識別模型的訓練了。關于后續識別可以了解更多的精靈代理資訊。