圖片識別之驗證碼識別

許多網站在進行某些操作前會要求輸入驗證碼以此來抵禦爬蟲和***。此篇主要講述如何通過代碼來識別一些常見的驗證碼。以此探究圖片識別的過程以及如何避免生成容易被識別的驗證碼。

理論

圖片識別的過程

  1. 取樣本

  2. 清洗區分樣本

  3. 提取樣本特徵

  4. 提取目標的特徵與樣本進行對比

    操作過程

    Java有豐富的圖片處理類,本次操作使用java語言。
    一、取目標網站的驗證碼樣本。在web頁面中查看驗證碼請求的地址。通過http請求批量獲取驗證碼並保存在本地。
    圖片識別之驗證碼識別
    二、區分樣本。對每張驗證碼圖片進行人工識別區分,重命名爲該圖片的驗證碼。
    圖片識別之驗證碼識別
    三、清洗切割樣本,提取樣本特徵。圖片識別需要儘可能細地區分出特徵點。我們觀察上圖的驗證碼圖片可以發現多個信息:
    ● 驗證碼的背景存在着許多幹擾線。

● 每個數字分明,所佔的位置幾乎是均等的。

● 驗證碼的數字顏色比較深,干擾因素顏色較淺。

我們可以嘗試通過顏色的深淺去除干擾因素。先通過灰度處理,將驗證碼中顏色較淺的點置換成白色,顏色較深的點置換成黑色。
圖片識別之驗證碼識別
通過改變灰度閾值grayValue不斷嘗試去除干擾點。最後得到乾淨的驗證碼。
圖片識別之驗證碼識別
接下來通過識別圖片中的黑色點,使用下面的trainData()方法。

沿着黑色點進行矩形切割,得到單個數字的特徵樣本。
圖片識別之驗證碼識別
圖片識別之驗證碼識別
得到的驗證碼特徵樣本訓練集合如下:
圖片識別之驗證碼識別
四、提取目標驗證碼的特徵,與訓練集合做對比,識別目標驗證碼圖片
圖片識別之驗證碼識別
通過上面的三步,我們已經得到了一組樣本特徵,接下來只需要把將目標驗證碼同樣執行上面的3步。把提取出來的目標驗證碼特徵與樣本特徵作對比。如果雙方絕大部分像素點的顏色相同,則可認爲目標驗證碼與樣本內容一致。取樣本的文件名,即可等到目標驗證的內容了。以下爲對比識別的代碼。

總結

通過上面的四部操作,我們已經能夠識別出一些網站的驗證碼了。上面使用的方法是通過顏色的深淺,去除干擾素,再提取樣本特徵進行對比。面對其他的一些驗證碼需要我們通過觀察掌握圖片的規律,靈活地使用其他的算法來識別去除干擾素,提取出樣本特徵。

同樣地,在生成驗證碼的過程中,我們需要避免生成易於去除的干擾素。各個驗證碼之間在不影響人工識別的情況下儘可能粘連起來,避免被切割分類。
圖片識別之驗證碼識別

文章來自公衆號:睿江雲計算

睿江雲官網鏈接:https://www.eflycloud.com/home?from=RJ0024

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章