国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于深度學(xué)習(xí)的驗證碼識別Web應(yīng)用平臺

2020-04-20 10:46王昊康曉鳳盧志科施潤杰黃成鑫
軟件工程 2020年4期
關(guān)鍵詞:深度學(xué)習(xí)

王昊 康曉鳳 盧志科 施潤杰 黃成鑫

摘? 要:目前許多網(wǎng)站使用驗證碼阻止黑客進行暴力破解登錄口令,但是隨著技術(shù)的發(fā)展驗證碼識別的難度及成本日益提升,傳統(tǒng)的OCR(Optical Character Recognition)技術(shù)識別效率已不能滿足需求。Vcode Identify平臺使用TensorFlow建立深度學(xué)習(xí)模型并結(jié)合Web應(yīng)用開發(fā)的一款驗證碼識別軟件,使用該平臺用戶不僅可以通過調(diào)用接口或者上傳文件的形式對驗證碼進行識別,而且還可以建立新模型并訓(xùn)練,進而可以識別新類型驗證碼,該軟件使用簡單、擴展性強。

關(guān)鍵詞:深度學(xué)習(xí);Python Web;驗證碼識別;Vcode Identify平臺

中圖分類號:TP315? ? ?文獻標識碼:A

Abstract:At present,many websites use verification codes to prevent hackers from performing brute-forced login passwords.However,the re-adoption of technology to develop verification codes increases the complexity and cost of recognition.The traditional OCR (Optical Character Recognition) technology recognition has been unable to meet efficiency needs.The Vcode Identify recognition platform uses TensorFlow to build a deep learning model.The verification code recognition software was developed in conjunction with a web application.Using this platform,users not only can identify verification codes by calling interfaces or uploading files but also can build and train new models to identify the new type of verification code.This system is simple to use and highly scalable.

Keywords:deep learning;python web;captcha breaking;Vcode Identify platform

1? ?引言(Introduction)

在如今互聯(lián)網(wǎng)高速發(fā)展的時代,驗證碼識別作為一項基礎(chǔ)驗證手段,被廣泛應(yīng)用于網(wǎng)絡(luò)環(huán)境中以辨別用戶是真人或機器人,防止用戶利用網(wǎng)絡(luò)機器人自動注冊、登錄、注水,以及防止自動化腳本的等惡意行為,因此驗證碼識別技術(shù)的研究對研究互聯(lián)網(wǎng)應(yīng)用的安全性有著重要意義。目前驗證碼識別已經(jīng)有了一定的技術(shù)基礎(chǔ),但是隨著技術(shù)的發(fā)展,驗證碼的種類也愈加繁多。最一開始的驗證碼圖片只有幾個數(shù)字進行組合,后來就加入了英文字母和混淆曲線將其復(fù)雜化,甚至有的網(wǎng)站選擇了中文字符的驗證碼,且對驗證碼進行顏色改變,位置旋轉(zhuǎn)等方式使得識別越發(fā)困難。傳統(tǒng)的OCR識別已不再能滿足需求。而卷積神經(jīng)網(wǎng)絡(luò)在圖像識別相比于傳統(tǒng)驗證碼識別技術(shù)更具有獨特優(yōu)勢[1,2],避免了煩瑣的預(yù)處理過程。本平臺為更好地提高驗證碼的識別效率,將算法優(yōu)化,并將其與深度學(xué)習(xí)相結(jié)合,同時,為了更加方便于測試使用,將其與Web服務(wù)結(jié)合,便于在生產(chǎn)環(huán)境中人員調(diào)用接口直接使用獲取驗證碼結(jié)果,使用簡單。

2? Vcode Identify平臺設(shè)計(Platform design of Vcode Identify)

2.1? ?CNN簡介

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN),是目前深度學(xué)習(xí)中最常使用的神經(jīng)網(wǎng)絡(luò)模型之一,特別是在圖像識別應(yīng)用中已取得驚人表現(xiàn)。CNN在圖像識別上的優(yōu)勢主要體現(xiàn)在:可減少計算中的權(quán)重(Weights)數(shù)量,在物體識別過程中能抵輕微扭曲和形變等干擾,可以自動學(xué)習(xí)和特征歸納,對物體的識別結(jié)果不受物體在圖片中位置變動的影響。在圖像處理過程,往往會將一張圖像表示為一個或多個二維向量,若為RGB表示的彩色圖片,三個顏色通道可看作為三張二維向量。以前的神經(jīng)網(wǎng)絡(luò)都是使用全連接方式,即輸入層到隱藏層,以及隱藏層到輸出層之間的神經(jīng)元都是全連接的,使得參數(shù)量巨大,神經(jīng)網(wǎng)絡(luò)訓(xùn)練耗時過長,很難進行訓(xùn)練,而CNN則通過局部連接和權(quán)值共享等方式解決了這個難點[3]。

CNN的神經(jīng)層主要有三種:卷積層(Convolutional Layer)、池化層(Pooling Layer)、全連接層(Fully-Connected Layer),識別過程由三種神經(jīng)層協(xié)調(diào)發(fā)展。本平臺的識別功能,在創(chuàng)建識別模型的時候,使用卷積神經(jīng)網(wǎng)絡(luò)構(gòu)建。傳統(tǒng)的Lenet的模型結(jié)構(gòu)是:輸入層—卷積層—池化層—卷積層—池化層—全連接層—全連接層—輸出層。而本平臺識別模型如圖1所示,采用輸入層—卷積層—池化層—卷積層—池化層—卷積層—池化層—局部連接層—全連接層—全連接層—輸出層的結(jié)構(gòu)。相比較傳統(tǒng)模型進行了改進,多添加了一次卷積層—池化層的過程,并對每層dropout防止過擬合的問題,這主要是針對驗證碼類型進行的修改,提高了模型識別率[4]。

2.2? ?TensorFlow

TensorFlow是基于谷歌的神經(jīng)網(wǎng)絡(luò)算法庫DistBelief研發(fā)的人工智能學(xué)習(xí)系統(tǒng),2017年2月,正式發(fā)布了TensorFlow 1.0版。作為最受歡迎的深度學(xué)習(xí)框架之一,擁有豐富的算法庫,高度的靈活性,真正的可移植性,多語言支持,完善的文檔等特點。TensorFlow使用數(shù)據(jù)流圖來表示計算任務(wù),使用張量的形式表示數(shù)據(jù),對圖的節(jié)點可以進行數(shù)學(xué)運算,通過讀寫變量維護狀態(tài)。本平臺驗證碼識別功能使用Tensorflow框架來構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)模型。

2.3? ?Redis

Redis(Remote Dictionary Server)是一個開源的,且具有高性能的key-value存儲系統(tǒng)。Redis具有輕量級,低延遲,高并發(fā)的優(yōu)點。本平臺使用Redis充當消息隊列,通過Redis服務(wù)器使得web平臺和驗證碼識別應(yīng)用進行交互,具有較高性能,滿足使用需求。

3? Vcode Identify平臺實現(xiàn)(Build the platform of Vcode Identify)

本平臺使用python語言編寫,用CNN實現(xiàn)模型的建立、訓(xùn)練、識別,搭建web平臺服務(wù),使用Redis作消息隊列,連接web服務(wù)和驗證碼識別應(yīng)用,即可以分成三個層次架構(gòu):應(yīng)用層、傳輸層和平臺層。平臺軟件主要功能模塊如圖2所示,分為用戶注冊、用戶登錄、模型選擇、識別檢測還有生產(chǎn)接口。

3.1? ?驗證碼識別應(yīng)用層

該層主要負責將驗證碼圖片識別成對應(yīng)驗證碼結(jié)果。傳統(tǒng)的驗證碼識別通常需要將圖片切割成幾部分,使得每一張圖片中只包含一個字符,然后訓(xùn)練單個字符模型,識別每個字符,再將每個識別出來的結(jié)果按原先順序拼接成完整字符串,作為識別結(jié)果。而現(xiàn)在的字符型驗證碼很多字符都粘在一起,字符分布不均勻,很難做到將各個字符進行切割。操作流程如下:首先對彩色的驗證碼圖片進行灰度化處理,接著將灰度化后的圖像進行二值化,去除背景圖的干擾,保留其中的字符。如果二值化后的圖像還存在噪聲,則需要再對二值化圖像進行去噪處理。然后將單個字符切割完成分類保存建立訓(xùn)練集和測試集。使用訓(xùn)練集中的字符進行字符識別訓(xùn)練,當訓(xùn)練的準確率達到指定值,再用測試集進行測試。最后,使用此測試集進行驗證碼圖片的字符識別,輸出識別結(jié)果[5],如圖3所示。

相比較傳統(tǒng)驗證碼煩瑣的識別流程,本軟件采用的是基于卷積神經(jīng)網(wǎng)絡(luò)的驗證碼識別。簡化了原先對圖片進行預(yù)處理的人工干預(yù)過程,且能有效解決字符粘連,位置不定,噪聲干擾的問題。特征提取和分類器訓(xùn)練可以通過卷積神經(jīng)網(wǎng)絡(luò)端到端的學(xué)習(xí)得到,算法結(jié)構(gòu)簡單、訓(xùn)練耗時大大減少,并且效果更快速準確。這種過程其實可以看作一個多標簽分類過程,可以把每個字符當作一枚標簽,并且順序固定,只需要修改CNN最后一層的softmax,就可以實現(xiàn)多標簽分類。使得可以直接輸入圖片進行多標簽訓(xùn)練和識別,提高訓(xùn)練效率,降低訓(xùn)練成本[6,7]。

CNN訓(xùn)練模型在大量的人工標注的圖片訓(xùn)練后,每個字符可以在輸出層轉(zhuǎn)換為對應(yīng)字符集神經(jīng)元。如該驗證碼類型為五個字符(數(shù)字+大小寫字符),每個字符則可表現(xiàn)為62個神經(jīng)元。對應(yīng)變量:,,對應(yīng)映射函數(shù):

則每個字符對應(yīng)62個神經(jīng)元,5個字符,,建立神經(jīng)元索引,,當?shù)玫筋A(yù)測字符串索引為c(0-61的常數(shù))時,則對應(yīng)字符對應(yīng)關(guān)系為。

具體模型設(shè)計:首先根據(jù)字符集、是否存在干擾線以及字符個數(shù)確定該模型基礎(chǔ),獲取大量該類型驗證碼圖片進行標簽標出驗證碼后作為神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù),分為訓(xùn)練集、驗證集和測試集三部分。然后通過修改CNN模型,根據(jù)上述多標簽分類思想,設(shè)計多任務(wù)訓(xùn)練神經(jīng)網(wǎng)絡(luò),直接將縮放后的彩色驗證碼圖片標簽化后放入輸入層,將其作為樣本訓(xùn)練,當訓(xùn)練準確率達到指定值(根據(jù)驗證碼的復(fù)雜度進行變通,簡單的可到99%,復(fù)雜的95%就可以,過高的準確率耗費成本過高而且難以達到),再用測試集進行測試。最后,使用該測試集進行驗證碼圖片識別并輸出識別結(jié)果[8],如圖4所示。

3.2? ?驗證碼識別傳輸層

該層主要負責用戶與驗證碼識別應(yīng)用進行交互,使用Redis充當消息隊列,如圖5所示啟動Redis服務(wù)器后,通過web平臺提供的接口,將用戶請求的需要識別的驗證碼圖片轉(zhuǎn)換為base64文本傳輸給驗證碼識別接口,通過平臺的識別接口,以json傳參的方式上傳,然后應(yīng)用層接受并識別驗證碼圖片,識別成功后返回結(jié)果json字符串,并將結(jié)果返回至平臺。

3.3? ?驗證碼識別平臺層

該層主要負責用戶交互,選擇了基于python平臺的web應(yīng)用開發(fā)框架Django,具有強大的數(shù)據(jù)庫功能,具有較強的安全性,兼容性和可拓展性能,使用開源框架AdminLTE作為前端框架開發(fā),界面友好,兼容性強。如圖6所示,用戶可以通過登錄平臺后可以看到目前該支持的驗證碼識別模型,以及該模型對應(yīng)的模型編號和模型特點[9]。

如圖7所示,在模型檢測模塊用戶可以自己選擇對應(yīng)的模型,通過拖拽或者點擊上傳圖片驗證碼的方式進行模型檢測,如果符合該驗證碼識別模型則會識別出其驗證碼結(jié)果并將結(jié)果回顯在頁面中,否則會顯示識別錯誤。識別的成功率與應(yīng)用層的驗證碼的識別誤差大小有關(guān)。

提供web接口作生成環(huán)境測試使用,可直接通過接口獲取驗證碼圖片對應(yīng)驗證碼結(jié)果。用戶可以登錄平臺后,獲得對應(yīng)的驗證碼識別接口。腳本如下所示,將需要識別的驗證碼圖片進行base64加密成文本后,通過接口傳輸文本,平臺即會返回此驗證碼結(jié)果,如圖8所示。該功能適合生產(chǎn)環(huán)境,普通用戶可以用來提高日常登錄注冊的友好性,安全從業(yè)人員可以將其添加為插件,便于進行安全測試,提高測試效率。

4? ?結(jié)論(Conclusion)

基于卷積神經(jīng)網(wǎng)絡(luò)的驗證碼識別,只需要構(gòu)建一個合適的網(wǎng)絡(luò)模型,再直接將彩色驗證碼圖片轉(zhuǎn)換為多標簽分類樣本進行訓(xùn)練。相比較原先的方法,節(jié)省了預(yù)處理的步驟,解決了目前預(yù)處理中很難對黏合字符進行分離、干擾因素影響過大的難點,從而大大降低了訓(xùn)練成本,節(jié)省了訓(xùn)練資源,且提高了識別準確率。因此將CNN技術(shù)應(yīng)用于驗證碼識別中,具有較高的實用價值。再通過將其與web應(yīng)用相結(jié)合,開發(fā)出了Vcode Identify平臺軟件,只需要導(dǎo)入對應(yīng)模型的訓(xùn)練集,用戶即可通過平臺上傳方式或者調(diào)用測試接口進行驗證碼識別,界面友好,使用簡單,并具有較好的擴展性和實用性,具有良好前景。

參考文獻(References)

[1] Jinlong Wu,Xiaolong Yin,Heng Xiao.Seeing permeability from images:fast prediction with convolutional neural networks[J].Science Bulletin,2018,63(18):1215-1222.

[2] Yuan-Chao Wang,Ming-Tao Li,Zhi-Chen Pan,et al.Pulsar candidate classification with deep convolutional neural networks[J].Research in Astronomy and Astrophysics,2019,19(09):119-128.

[3] Zhai Qi,Jiang Mingyan.Supervised learning of enhancing convolutional Hash for image retrieval[J].The Journal of China Universities of Posts and Telecommunications,2019,26(04):51-61.

[4] 徐星,宋小鵬,杜春暉.基于深度學(xué)習(xí)的驗證碼圖像識別[J].測試技術(shù)學(xué)報,2019,33(02):138-142.

[5] 連曉巖.基于圖像識別和神經(jīng)網(wǎng)絡(luò)的驗證碼識別[C].2011年中國智能自動化學(xué)術(shù)會議論文集(第一分冊),2011:55-59.

[6] 毛燕.基于卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)上銀行驗證碼識別[D].哈爾濱理工大學(xué),2019.

[7] 王璐,張榮,尹東,等.粘連字符的圖片驗證碼識別[J].計算機工程與應(yīng)用,2011,47(28):150-153.

[8] 徐胤,袁浩巍,李智.基于卷積神經(jīng)網(wǎng)絡(luò)和TensorFlow的手寫數(shù)字識別研究[J].上海電氣技術(shù),2018,11(01):31-34;61.

[9] 姜鵬.驗證碼識別及其Web Service的實現(xiàn)研究[D].南京理工大學(xué),2007.

作者簡介:

王? ?昊(1998-),男,本科生.研究領(lǐng)域:信息安全.

康曉鳳(1978-),女,碩士,副教授.研究領(lǐng)域:信息安全.

盧志科(1998-),男,本科生.研究領(lǐng)域:信息安全.

施潤杰(2000-),男,本科生.研究領(lǐng)域:信息安全.

黃成鑫(2001-),男,本科生.研究領(lǐng)域:信息安全.

猜你喜歡
深度學(xué)習(xí)
有體驗的學(xué)習(xí)才是有意義的學(xué)習(xí)
電子商務(wù)中基于深度學(xué)習(xí)的虛假交易識別研究
MOOC與翻轉(zhuǎn)課堂融合的深度學(xué)習(xí)場域建構(gòu)
大數(shù)據(jù)技術(shù)在反恐怖主義中的應(yīng)用展望
深度學(xué)習(xí)算法應(yīng)用于巖石圖像處理的可行性研究