基於 CNN 的驗證碼破解實戰

在我們的實際生活中有很多的場景需要輸入驗證碼,在工程實踐中為了將數據採集、模擬登錄等一系列操作行為自動化處理就需要處理好驗證碼的識別工作,已有的工作中基於機器學習和深度學習都有很多的工作開展出來,效果也都不錯,今天本文的主要內容就是基於卷積神經網絡CNN模型來構建驗證碼圖片識別模型。


整體流程示意圖如下圖所示:

基於 CNN 的驗證碼破解實戰

其中,主要的工作分為三個部分:數據採集、數據預處理和模型構建與測試。上述是之前一個實際完成的項目流程示意圖,本文主要是實踐基於CNN來構建識別模型,對於數據採集和預處理部分不作為講解的內容,感興趣可以親身實踐一下,都是圖像處理領域內的比較基礎的內容。

經過處理後我們將原始的驗證碼圖片均進行了基本的去噪、二值化以及歸一化等處理得到了可用於模型直接訓練使用的特徵向量數據,原始的驗證碼圖像數據如下所示:

基於 CNN 的驗證碼破解實戰

處理後生成的特徵向量文件如下所示:

基於 CNN 的驗證碼破解實戰

上圖中,每一行表示一個字符子圖,每一列表示字符子圖的一維數據,向量的維數就是經過歸一化處理後的字符子圖【寬x高】的值,即:將二維的矩陣數據轉化為了一維的向量數據,這一步不是必須的,只是我這裡採用了這種處理方式。

生成得到原始驗證碼圖片數據的特徵向量後就可以搭建訓練模型了,具體的代碼實現如下所示:

默認設置了100次的迭代,不開啟提前終止策略,訓練完成後截圖如下所示:

基於 CNN 的驗證碼破解實戰

訓練完成後就得到了離線的識別模型文件,可重複加載使用,我們在訓練結束後繪製了模型的準確度和損失值對比曲線,如下所示:

基於 CNN 的驗證碼破解實戰

基於 CNN 的驗證碼破解實戰

從準確度和損失值對比曲線綜合來看可以發現:模型在20次迭代計算後就趨近於平穩,之後保持一個比較穩定的狀態。

之後對模型的識別能力進行測試分析,測試代碼實現如下:

測試結果截圖如下所示:

基於 CNN 的驗證碼破解實戰

使用了200張的驗證碼測試集來測試模型的識別能力,最終的準確度為87%,感覺還是不錯的,畢竟我只使用了不到2000的訓練數據來訓練CNN模型。

如果有數據集需求的可以聯繫我,或者是去隨機生成一些驗證碼數據集也是可以的,一個簡單的驗證碼數據集生成流程如下所示:

基於 CNN 的驗證碼破解實戰


分享到:


相關文章: