回覆列表
-
1 # 碼農波波
-
2 # pleatu
目前網站上的驗證碼以圖片驗證碼居多,另外還有滑動驗證碼,問題驗證碼,12306驗證碼等等。
圖片驗證碼識別本質上是影象識別,當前主流採用的方法是爬蟲獲取驗證碼圖片,透過打碼平臺獲取字元特徵,然後經過影象預處理(去噪/字元切分),利用這些樣本訓練CNN或RCNN模型,輸出預測的字元結果,達到識別的目的。
驗證碼識別的難度可以用模型識別的準確性高低來評價,結合驗證碼識別的流程,可以總結出影響模型識別準確性的因素主要有以下幾點:
1.驗證碼本身設計
有些驗證碼本身設計對人不太友好(扭曲嚴重or特殊相似字元),還有驗證碼字符集的大小,比如英文字元一般26個,中文字元的話就比較多。
2.打碼平臺的準確性
目前打碼平臺還是主要靠分流,人工識別結果。打碼人員的可靠性,導致獲取的圖片特徵有誤,而CNN屬於機器學習裡的監督學習,如果某字元的大部分特徵有誤,很可能導致模型歸類錯誤。
3.影象預處理的效果
一般驗證碼都會新增噪聲,顏色,背景,橫線,噪點等等,為了防止這些噪聲影響模型的權重訓練,需要採用合適的方法進行去噪處理,顏色處理、四鄰域去噪點、連通域去噪塊等等。
4.訓練模型的選擇
根據驗證碼的特點,設定適當的卷積神經網路引數,網路的層數,卷積核的大小。
例如中文驗證碼,一般字符集比較多,如果直接訓練RCNN模型,需要的樣本量較大,可以進行字元切分,單個字元圖片訓練模型。
當然,網站上的驗證碼也在不停地迭代,識別模型也需要不斷地更新。
不管是機器識別驗證碼也好還是識別人臉也好,其實最基礎的道理你該明白:所有的影象都是由畫素組成的。無非是畫素與畫素之間的顏色差異明顯度是區分影象資訊的關鍵因素,剩下的才是建立不同的數學模型去做資訊識別。