[验证码识别技术]字符验证码杀手--CNN
字符驗證碼殺手--CNN
1 abstract?
目前隨著深度學習,越來越蓬勃的發展,在圖像識別和語音識別中也表現出了強大的生產力。對于普通的深度學習愛好者來說,一上來就去跑那邊公開的大型數據庫,比如ImageNet或者CoCo,可以會覺得這個屠龍之技離生活好遙遠。那么本文就是希望將此技術運用到一些普通用戶日常就能感知的場景上,讓普通用戶切實能夠體會到深度學習工具的非凡能力。
關鍵字:深度學習,驗證碼,破解,識別,CNN
2?驗證碼概述
很多普通程序員在入門爬蟲的時候,基本上都會遇到的環節---“驗證碼”。就是這個東西使得很多程序的自動化工作止步,讓人懊惱不已。關于驗證碼的功能,以前提到過(todo),本文不再贅述,只用一句話來概括下:驗證是一種防止程序自動化的一個措施,其最常見的表現形式就是看圖識別字符。
驗證碼技術就是一種反自動化技術。本文所解決的問題則是,使用深度學習技術來實現“全自動化的識別驗證碼”(這聽起來有那么點人工智能的味道了)。
因為現在新的形式的驗證產品很多,光從外界的展現形式上就有:
但是本文是以學習為目標,并不指向任何一種驗證形式,而是指向傳統的字符型驗證碼。由淺入深來對驗證碼進行一些科普。下圖就是網絡上的各色各樣的字符型驗證碼,敬請大家賞析:
??
3?驗證碼場景
首先說明本文的觀點:隨著深度學習技術在圖像處理技術上越來越強大的表現,這些傳統的純依靠簡單圖片的碼式驗證已經沒有任何的安全性可言。
但是這些不安全的驗證碼卻即使是在今天寫這篇文章的時候,還存在于互聯網的各個角落,存在于大互聯網公司,基于像銀行,證券和保險等等這些金融領域。
這些主要的應用場景包括:注冊,登錄,找回密碼,搶購下單,評論,投票等等。如果這個地方不安全的話,也就是說能夠通過程序做自動化,那么網絡上的資源就會全部被自動化程序搶奪過去,或者說直接落入少數會做自動化的人的手中。為什么呢?因為普通計算機程序的計算能力是人的幾萬甚至幾百萬倍。
如果還不能理解,我說一個簡單的例子吧,如果你自己去注冊你的帳號密碼需要3分鐘完成,但是通過程序可以一秒鐘注冊300個賬號。講到這個地方,如果你還不理解,那么你想象在去年的時候互聯網金融行業非常火爆時,每注冊一個賬號就有20塊錢可以拿。也就是說比較厲害的人可以通過這個程序,一秒鐘賺6000塊錢。
如果你還不能理解這個東西的話,再舉一些和大家日常生活中非常相關度高的一個場景:
類似的事情特別特別多。這個產業就叫做“薅羊毛”,顧名思義就是積少成多,有很小的成本把一點點的小的利益聚集起來就會變成一個比較可觀的利益。
4?應用舉例
4.1?互聯網大廠
4.1.1?美橙互聯
https://www.cndns.com/members/signin.aspx
?
4.1.2?中國互聯網絡信息中心
http://www.cnnic.net.cn/
?
4.1.3?百度
https://wappass.baidu.com/
?
4.1.4?阿里支付寶
?https://omeo.alipay.com/service/checkcode?sessionID=a2a5fc056b8e3ef8b32758835333d673&t=0.3144848125469759
??
4.1.5?網易郵箱
http://reg.email.163.com/unireg/call.do?cmd=register.entrance&from=163navi®Page=163
?
4.1.6 58同城
https://passport.58.com/validcode/get?vcodekey=d5S2Tk7dofqN30VwIN6WTwvOHP6AkyvC&time=1466065243496
?
4.2?互聯網金融
4.2.1?平安保險
https://www.pingan.com.cn/pinganone/pa/index.screen?sid_source=toagw
?
?
4.2.2?宜信
https://www.creditease.cn/a/user/loadRegisterUserPage
?
4.2.3?大地保險
http://www.95590.cn/ebiz/loginSkin.jsp?loginBackUrl=http://www.95590.cn/
?
5?圖像識別
下面是字符驗證碼兩種比較極端的表現形式:
???
簡單類型的特點:
復雜類型的特點:
在上一部分內容中舉的現在線上應用的例子,基本上屬于比較復雜的類型,但是由于它的設計理念仍然停留在圖像學上,所以對于現在的CNN來說,是完全沒有技術上的問題,畢竟很多深度學習框架的入門教程就是對手寫數字數據庫MNIST進行識別。它們有的區別只是前期準備工作的工作量的不同,這里所說的前期準備工作就是指:帶標記的數據的準備工作。所謂的“帶標記的數據”是指,需要人預先告訴計算機什么樣的圖片對應著是什么樣的字符串,因為本問題中所用的CNN方法是屬于有監督學習的范圍,需要有個場外的“老師”進行指導。
關于上面兩種極端的字符驗證碼的識別的技術方法,請移步文章末尾鏈接。
里面有兩個例子,并附上了完整的源碼:
當然后面的那種CNN的方法是對于解決此類問題是屬于核武器級別的,CNN模式的優點缺點都很明顯:
-???????優點:通用性強,換一個模式后,可以不用修改代碼就可以直接訓練出新的模型。
-???????缺點:需要大量的帶標注的數據,特別是端到端的復雜一點的,可能需要幾萬帶標記的先驗數據集。
在CNN的文章中給出的demo,因為只是做效果演示,里面的數據集的生成是直接用的第三方標準庫無限生成的。如果是在具體的場景去使用,則需要準備大量的帶標記數據,像本文提到的困難的字符驗證,如果要達到90%以上的正確識別率,估計需要5萬帶標記數據。下圖是生成的部分先驗數據集:
對于不同的多字符驗證碼,根據其難易程度分類,可以有一些不同的處理方式,有“蠻力型”的通用識別方法,也有“特事特辦”的特別識別方法。
5.1?通用識別方法
所謂的通用識別方法就是:流程化作業,基本不太需要在編程上思考太多。
通用步驟如下:
這其實是一個深度學習對分類問題處理的標準化流程。有不明白的地方,請補充一點相關的知識:
https://www.tensorflow.org/get_started/mnist/beginners
https://www.tensorflow.org/get_started/mnist/pros
由Google公司主推的深度學習框架tensorflow的入門文檔里面就介紹了分別用矩陣回歸和CNN神經網絡對手寫數字識別的方法。
當然,關于如何獲取帶標記的數據,目前也有比較便宜的獲取渠道,直接在網上搜索“打碼平臺”,提供這“人工智能”領域的“人工”服務的廠家也不少,而且是明碼標價:
對于字符型驗證碼,基本上是幾分錢一張標記圖吧。
5.2?特別識別方法
雖然上面的通用型方法可以百試不爽,但是每次來一個新的問題,你都要準備大量的帶標記數據,這個未免也太繁瑣了,而且像一些簡單的字符驗證碼的問題,其實倒沒有必要去大動干戈。那么這個時候就需要一些小的技巧了。
這里所說的特別識別方法,仍然是基于深度學習這種通用方法來做的,只是我們可以將一些復雜問題進行適當的簡化,這個思想有點類似于“降維”處理的意思。
因為深度學習具有這樣的神奇效果:理論上對絕大多數的線性或者非線性問題都能實現非常好的擬合。
但是對于越復雜的問題,對數據的需求量越大。這個現狀是無法避免的,但是我們卻能夠做一些人為的自動化工作,以達成此目標。
比如像這些驗證:
??
不管它們色彩有多么的變化,不管背后加些啥亂七八糟的干擾點或者線,但是有一個事實他們無法回避,就是:他們的字符之間都是非常好分割的。也就是說,像這些類型的驗證碼,可以很容易將一個本來要判定N位字符串的問題簡化為“判定1位字符,然后將N個這樣的圖片再組合起來”。這樣網絡的復雜度可以大大的簡化,訓練所需要的樣數量,還有訓練的時長都會大量減少。
如果驗證碼圖片可以從N維“降維”到1維了,這個字符的字體如果是單一的,比如下面這些驗證:
?
那么問題就更簡單了:只需要為每個字符分類準備一張圖片即可。也不是說如果你的驗證碼范圍是[0,9],則只需要從下載的圖片集中對0~9這幾個數字每個標記一張即可,然后就是使用一些普通的數據增強技術:貼圖,綻放,上下自由截取,隨機噪點等等,可以生成無限多的數據集了,當然這些全部是由程序自動化完成。
好的圖像預處理也很重要,所謂好的圖像預處理,就是指能夠將圖像里面的主體特征變得更加明顯,例如:
好的圖像預處理會使識別問題難度直線下降,比如上面左圖如果用CNN估計可能要1萬樣本,而右邊的那個經過預處理后,估計只需要1千樣本就OK了。
?
關于如何做數據增強,在后續的文章中會進行具體介紹。
6?文末小結
如果對本話題有興趣請持續關注本系列文章。
如果還想進一步討論相應的技術,請加入QQ群:592109504
手機QQ掃描二維碼:https://mp.weixin.qq.com/s/7RCtZH0ljuF5Ti6jgQxyww
驗證識別合輯技術文章:https://zhuanlan.zhihu.com/p/30871712
后續會有更多干貨文章,敬請期待。。。?
?
?
我的博客即將搬運同步至騰訊云+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?
轉載于:https://www.cnblogs.com/beer/p/7877570.html
總結
以上是生活随笔為你收集整理的[验证码识别技术]字符验证码杀手--CNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美颜我迪!
- 下一篇: FireFox IE Opera Saf