曹廷榮,陸 玲,龔燕紅,賈惠珍
1.東華理工大學(xué) 信息工程學(xué)院,南昌330013
2.南昌大學(xué) 信息工程學(xué)院,南昌330031
驗(yàn)證碼是為防止計(jì)算機(jī)惡意注冊、刷票和論壇灌水的一種自動(dòng)響應(yīng)程序,在2003年由Ahn等[1]提出后一直被廣泛使用。文本驗(yàn)證碼由多個(gè)隨機(jī)產(chǎn)生的字符組生成。為了增加識別難度通常會使字符扭曲、形變并且加入干擾噪聲。現(xiàn)階段雖然有很多文本驗(yàn)證碼替代方案,但許多網(wǎng)站和應(yīng)用程序仍然使用其作為安全和身份驗(yàn)證的主要手段。
驗(yàn)證碼從出現(xiàn)開始,人們對其識別和破解從未停止。目前已經(jīng)提出了很多識別方法。對于文本型驗(yàn)證碼的識別主要步驟如下:首先,通過二值化、空間濾波、變換等圖像處理技術(shù)去除驗(yàn)證碼中的干擾信息。其次,使用投影、類聚或目標(biāo)檢測等方法確定字符在圖像中的位置并進(jìn)行分割。最后,利用SVM、KNN或卷積神經(jīng)網(wǎng)絡(luò)等算法提取字符特征并進(jìn)行分類識別[2-6]。王專等[7]提出先使用中值濾波去除圖像中的噪點(diǎn),并使用門限算法進(jìn)行二值化。再通過分析圖像二值化矩陣算出驗(yàn)證碼的平均寬度,最后利用寬度對驗(yàn)證碼進(jìn)行分割的方法。王璐[8]提出了基于局部極小值和最小投影值的分割法和K-means聚類與豎直投影結(jié)合的分割方法。汪洋等[9]提出先使用RGB 三原色去噪法,再采用輪廓差投影法與水滴算法相結(jié)合的分割方法。最后利用KNN算法進(jìn)行識別。研究表明,只要能準(zhǔn)確地分割圖像中的字符,利用深度神經(jīng)網(wǎng)絡(luò)技術(shù)就能識別出字符本身。但是文本驗(yàn)證碼的安全性也不斷提高,新引入的安全特性使得許多傳統(tǒng)的識別方法不再適用。對于扭曲、粘貼的驗(yàn)證碼這種現(xiàn)象更加明顯。
針對文本驗(yàn)證碼中字符粘貼、扭曲、干擾信息難以去除、識別準(zhǔn)確率低等問題,本文提出一種基于對抗學(xué)習(xí)[10]的驗(yàn)證碼識別方法。對抗訓(xùn)練學(xué)習(xí)網(wǎng)絡(luò)在很多方面取得了很好的效果。劉昱等[11]利用對抗訓(xùn)練網(wǎng)絡(luò)對面部圖像進(jìn)行修復(fù)。Wang Z等[12]利用對抗性網(wǎng)絡(luò)在智能診斷方案及其在行星齒輪箱故障模式識別中的應(yīng)用。本文中,在預(yù)處理階段利用一個(gè)神經(jīng)網(wǎng)絡(luò)模型去除干擾信息[13],然后利用對抗訓(xùn)練方法訓(xùn)練一對神經(jīng)網(wǎng)絡(luò)模型,即分割網(wǎng)絡(luò)和識別網(wǎng)絡(luò)。分割網(wǎng)絡(luò)對驗(yàn)證碼進(jìn)行分割,同時(shí)篩選出分割困難的驗(yàn)證碼,識別網(wǎng)絡(luò)用于識別。通過實(shí)驗(yàn)表明該方法適用于各種文本型驗(yàn)證碼。與現(xiàn)有方法相比本文使用的方法有以下優(yōu)勢:(1)利用預(yù)處理模型去除文本驗(yàn)證碼的干擾信息,該方法具有通用性。不同形狀的驗(yàn)證碼只需重新訓(xùn)練模型而不需重寫代碼,甚至參數(shù)都可以不變。(2)在對抗訓(xùn)練階段本文引入一個(gè)分割網(wǎng)絡(luò)和一個(gè)識別網(wǎng)絡(luò),解決驗(yàn)證碼在分割過程中因信息丟失而導(dǎo)致識別率不高的問題,同時(shí)在訓(xùn)練過程中分割網(wǎng)絡(luò)會篩選出分割困難的驗(yàn)證碼。識別網(wǎng)絡(luò)也針對這些驗(yàn)證碼進(jìn)行訓(xùn)練。
文本型驗(yàn)證碼識別通常需要預(yù)處理、字符切割、字符特征提取和識別。這個(gè)過程中,預(yù)處理一般先進(jìn)行灰度化,然后經(jīng)過卷積和濾波等處理,最后再進(jìn)行二值化等。但是,不同的圖片使用的卷積大小不同,二值化閾值也不同。
文中提出的文本驗(yàn)證碼識別方法是基于最近提出的GAN架構(gòu)。GAN模型由生成式模型(Generative model)和判別式模型(Discriminative model)組成。生成模型G 捕捉樣本數(shù)據(jù)的分布,用服從某一分布(均勻分布、高斯分布等)的噪聲z 生成一個(gè)類似真實(shí)訓(xùn)練數(shù)據(jù)的樣本,其效果是生成的圖像越接近真實(shí)樣本越好;判別模型D 是一個(gè)二分類器,用于估計(jì)一個(gè)樣本來自于訓(xùn)練數(shù)據(jù)(而非生成數(shù)據(jù))的概率,如果樣本來自于真實(shí)的訓(xùn)練數(shù)據(jù),D 輸出大概率,否則,D 輸出小概率。GANs在圖像和自然語言處理方面都展示出令人印象深刻的結(jié)果。因此,本文利用GANs 為基礎(chǔ),提出通用的文本驗(yàn)證碼識別解決方案。
本文使用一個(gè)相對靈活并且通用的識別方法。該方法流程如圖1 所示。先利用網(wǎng)絡(luò)爬蟲或驗(yàn)證碼生成程序獲取一定數(shù)量的驗(yàn)證碼,然后用預(yù)處理模型對驗(yàn)證碼進(jìn)行預(yù)處理,接著將預(yù)處理后的驗(yàn)證碼放入神經(jīng)網(wǎng)絡(luò)訓(xùn)練識別。最后得到結(jié)果。
圖1 驗(yàn)證碼識別流程圖
為提高文本型驗(yàn)證碼的安全性,通常會在驗(yàn)證碼中加入干擾信息。對驗(yàn)證碼識別時(shí),如果不去除干擾信息就無法突出驗(yàn)證碼的文本字符特征,從而影響驗(yàn)證碼識別的準(zhǔn)確率。驗(yàn)證碼預(yù)處理就是去除驗(yàn)證碼的干擾信息并且最大可能保留文本字符特征。驗(yàn)證碼可以看作是由文本字符和帶有噪聲及干擾線的背景圖片通過一系列的變換而來。如圖2所示。
圖2 驗(yàn)證碼合成圖
圖中驗(yàn)證碼C 是由左邊的A 和B 兩個(gè)圖片而得的。圖像C 到圖像A 的過程稱為去噪或者“翻譯”。本文驗(yàn)證碼預(yù)處理使用的Pix2pix神經(jīng)網(wǎng)絡(luò)模型是一種完全監(jiān)督的方法,即利用完全配對的輸入圖像C 和輸出圖像A 訓(xùn)練模型,通過訓(xùn)練好的模型將輸入的圖像C 生成指定任務(wù)的目標(biāo)圖像A。目前該方法是圖像翻譯任務(wù)中完全監(jiān)督方法里面效果和通用性最好的一個(gè)模型。
Pix2pix是一種GAN對抗神經(jīng)網(wǎng)絡(luò),它由一個(gè)生成網(wǎng)絡(luò)和一個(gè)識別網(wǎng)絡(luò)組成。Pix2pix的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 預(yù)處理模型結(jié)構(gòu)
對于生成器G 的輸入是一個(gè)Y 類圖像y,輸出為生成的圖像G(y)。判別器D 的輸入為一個(gè)X 類的圖像x和一個(gè)Y 類圖像y。D 需要判斷x 圖像是否是真正的y 對應(yīng)的圖像,并輸出一個(gè)概率。設(shè)(x,y)是一對真實(shí)的圖像,G 生成的圖像G(y)就應(yīng)該很接近真實(shí)的圖像x。
Pix2pix是一種條件神經(jīng)網(wǎng)絡(luò)(Conditional Generative Adversarial Networks)。它除了具有cGAN[15]一樣的損失函數(shù)LcGAN外,還在生成圖像和真實(shí)圖像之間加上了L1損失函數(shù)。記y 為輸入的圖像,x 為真實(shí)圖像(輸出圖像),G 為生成器,D 為判別器,則標(biāo)準(zhǔn)的GAN 網(wǎng)絡(luò)的損失函數(shù)為:
對G 施加懲罰,即:
因此,最終GAN網(wǎng)絡(luò)的損失函數(shù)為:
這樣一來,標(biāo)準(zhǔn)的GAN 損失負(fù)責(zé)捕捉圖像高頻特征,而損失則負(fù)責(zé)捕捉低頻特征,使得生成結(jié)果既真實(shí)且清晰。
在對抗訓(xùn)練/識別階段,文中設(shè)計(jì)了兩個(gè)網(wǎng)絡(luò):分割網(wǎng)絡(luò)和識別網(wǎng)絡(luò)。其中分割網(wǎng)絡(luò)主要負(fù)責(zé)對驗(yàn)證碼進(jìn)行切分,而識別網(wǎng)絡(luò)則進(jìn)行分類識別,兩者相互聯(lián)系。分割網(wǎng)絡(luò)的好壞直接決定識別的網(wǎng)絡(luò)準(zhǔn)確率的高低。同時(shí),識別網(wǎng)絡(luò)的準(zhǔn)確率也反映分割網(wǎng)絡(luò)的質(zhì)量。因此,在訓(xùn)練時(shí)不是對兩個(gè)網(wǎng)絡(luò)分別訓(xùn)練,而是進(jìn)行對抗訓(xùn)練。通過對兩個(gè)網(wǎng)絡(luò)同時(shí)訓(xùn)練能有效解決網(wǎng)絡(luò)性能評估問題。特別是分割網(wǎng)絡(luò),盡管其分割結(jié)果與實(shí)際位置有一定差距,只要能正確識別出來都可以認(rèn)為是有效的。
對抗訓(xùn)練的流程如圖4所示。首先,將預(yù)處理后的文本驗(yàn)證碼使用平均法分割法分割后放入識別網(wǎng)絡(luò)。識別網(wǎng)絡(luò)經(jīng)過訓(xùn)練后得到準(zhǔn)確率和Loss值。其次,根據(jù)準(zhǔn)確率和Loss 值對切割的性能和難易程度進(jìn)行評估。接著訓(xùn)練分割網(wǎng)絡(luò)調(diào)整驗(yàn)證碼分割的位置,再放入識別網(wǎng)絡(luò)進(jìn)行訓(xùn)練。如此反復(fù),分割網(wǎng)絡(luò)就能學(xué)會切分驗(yàn)證碼,同時(shí)選出難以分割的驗(yàn)證碼。識別網(wǎng)絡(luò)也會在這個(gè)過程中學(xué)會識別驗(yàn)證碼。
圖4 對抗訓(xùn)練流程圖
3.2.1 分割網(wǎng)絡(luò)
在分割網(wǎng)絡(luò)中本文參考了在姿態(tài)識別中常用的UNet 網(wǎng)絡(luò)[16],U-Net 是一個(gè)端到端的網(wǎng)絡(luò)模型,它是一種編碼器-解碼器結(jié)構(gòu)。編碼器逐漸減少池化層的空間維度,解碼器逐步修復(fù)物體的細(xì)節(jié)和空間維度。編碼器和解碼器之間通常存在快捷連接。因此,它能幫助解碼器更好地修復(fù)目標(biāo)的細(xì)節(jié)。在進(jìn)行Pooling 的時(shí)候采用Maxpooling并且保留了位置信息,使得在進(jìn)行上采樣的時(shí)候能夠還原其位置信息。
本文中圖形驗(yàn)證碼是一個(gè)條形如圖5 所示,在切割調(diào)整的時(shí)候由原來的圖5(a)中的a,b 范圍調(diào)整到圖5(b)中所示的A,B,調(diào)整的范圍只是在x 反向進(jìn)行變化,在y 方向上不發(fā)生變化,因此為了避免很多無效的計(jì)算,本文借鑒了U-Net 網(wǎng)絡(luò)的思想,使用了一種類U-Net網(wǎng)絡(luò)。網(wǎng)絡(luò)結(jié)構(gòu)原理如圖6所示。
圖5 字符分割范圍調(diào)整情況
圖6 U-Net網(wǎng)絡(luò)結(jié)構(gòu)圖
通過對識別網(wǎng)絡(luò)和分割網(wǎng)絡(luò)的聯(lián)合訓(xùn)練,識別網(wǎng)絡(luò)不僅保留了傳統(tǒng)切割方法的識別率,而且通過分割網(wǎng)絡(luò)對抗學(xué)習(xí)也使性能得到提高。
3.2.2 識別網(wǎng)絡(luò)
這里采用一個(gè)多尺寸通道圖像輸入方法[17]。圖7(a)所示,假設(shè)a,b 分別是驗(yàn)證碼中字母E的位置,本文中將{a-δ,b+δ},{a,b+δ},{a-δ,b},{a,b}四個(gè)部分的內(nèi)容作為網(wǎng)絡(luò)的輸入,識別網(wǎng)絡(luò)的設(shè)計(jì)思想如圖7(b)所示:第一行為卷積路,由三個(gè)核尺度不同的卷積層(白色)串聯(lián)而成,間插有Batch Normalization(淺藍(lán))和ReLU(淺紫);第二行為跳級路,只包含一個(gè)核尺度為1的卷積層;如果跳級路的輸入輸出通道數(shù)相同,則這一路為單位映射。所有卷積層的步長為1,padding為1,不改變數(shù)據(jù)尺寸,只對數(shù)據(jù)深度(channel)進(jìn)行變更。整個(gè)模塊由兩個(gè)參數(shù)控制:輸入深度M 和輸出深度N ??梢詫θ我獬叽鐖D像操作。這樣的設(shè)計(jì)很好地解決了驗(yàn)證碼切割過程中信息丟失的問題,最大可能地保留驗(yàn)證碼信息,從而提高識別準(zhǔn)確率。
圖7 字符分割及識別網(wǎng)絡(luò)殘差模塊圖
在深度學(xué)習(xí)訓(xùn)練中為了增強(qiáng)模型的泛化性通常會使用數(shù)據(jù)增強(qiáng)和正則化方法(如dropout、BN)。一般的數(shù)據(jù)增強(qiáng)方法有:隨機(jī)裁剪、水平翻轉(zhuǎn)、平移、旋轉(zhuǎn)、增加噪音等。其中前兩個(gè)方法用得最多,也最有效。Zhong Z等[18]提出了很簡單且實(shí)用的無參數(shù)數(shù)據(jù)增強(qiáng)方法即隨機(jī)遮擋。該方法被證明在多個(gè)CNN架構(gòu)和不同領(lǐng)域中都可以提升模型的性能,并且與隨機(jī)裁剪、水平翻轉(zhuǎn)(還有正則化方法)具有一定的互補(bǔ)性。因此,本文中引入該方法能有效解決驗(yàn)證碼中的字符在預(yù)處理和分割過程中局部信息丟失問題,具有更好的魯棒性。在實(shí)驗(yàn)中本文參考了Devries T 等[19]提出的方法,隨機(jī)遮擋不是直接作用于原始輸入驗(yàn)證碼字符圖像,而是作用于feature map 層上。通過在訓(xùn)練過程中對深度特征進(jìn)行隨機(jī)遮擋。相當(dāng)于建立每個(gè)因子特征與相應(yīng)類別的權(quán)重關(guān)系,減弱背景(或噪音)因子的權(quán)重,可以產(chǎn)生更好的學(xué)習(xí)效果,增加識別網(wǎng)絡(luò)的穩(wěn)定性。
3.2.3 聯(lián)合訓(xùn)練
聯(lián)合訓(xùn)練分割網(wǎng)絡(luò)和識別網(wǎng)絡(luò)是一個(gè)很關(guān)鍵也比較復(fù)雜的過程。為了能夠保證網(wǎng)絡(luò)的正常進(jìn)行,文中引入一個(gè)獎(jiǎng)賞機(jī)制,即分割網(wǎng)絡(luò)的預(yù)測是根據(jù)識別網(wǎng)絡(luò)的狀態(tài)進(jìn)行更新的。首先,利用平均分割的方法將文本驗(yàn)證碼放入識別網(wǎng)絡(luò)進(jìn)行訓(xùn)練得到一個(gè)模型A。然后,訓(xùn)練分割網(wǎng)絡(luò)調(diào)整分割的位置,并利用模型A 來驗(yàn)證。同時(shí)更新分割信息。第二輪訓(xùn)練的時(shí)候,用新的分割信息放入識別網(wǎng)絡(luò)訓(xùn)練更新模型A。接著訓(xùn)練分割網(wǎng)絡(luò)再用新的模型A 驗(yàn)證,如此反復(fù),直到訓(xùn)練結(jié)束,這樣就得到分割網(wǎng)絡(luò)模型和識別網(wǎng)絡(luò)模型。
驗(yàn)證碼數(shù)據(jù)的來源有很多方法,如通過網(wǎng)絡(luò)爬蟲、利用代碼生成或者參加比賽獲得。本文實(shí)驗(yàn)中使用了5類樣本。其中2 類利用網(wǎng)絡(luò)爬蟲在一些流行的網(wǎng)站中獲取,2類利用代碼隨機(jī)生成,1類來源于比賽項(xiàng)目。每一類驗(yàn)證碼大約有5 000個(gè)并且都做好標(biāo)記。然后將每一類樣本按照7∶2∶1的比例進(jìn)行隨機(jī)拆分。其中的70%作為訓(xùn)練樣本,20%作為驗(yàn)證樣本,還有10%作為測試樣本。
4.1.1 預(yù)處理數(shù)據(jù)集制作
圖8(b)所示的是預(yù)處理數(shù)據(jù)集Pre-dataset,由去除干擾信息的驗(yàn)證碼和與之對應(yīng)的原始驗(yàn)證碼組成。實(shí)驗(yàn)中每一類驗(yàn)證碼制作500對預(yù)處理數(shù)據(jù)。在制作時(shí),首先使用數(shù)字圖像處理方法得到圖8(a)中的二值化驗(yàn)證碼圖像(Bin-dataset),然后通過人工的方法使用圖像處理軟件對Bin-dataset進(jìn)行篩選和矯正,最后編寫程序處理、合成預(yù)處理數(shù)據(jù)集。
圖8 預(yù)處理數(shù)據(jù)集樣例
4.1.2 分割數(shù)據(jù)集制作
接下來制作分割數(shù)據(jù)集Split-dataset,五類驗(yàn)證碼每一種100對。制作時(shí),首先采用連通區(qū)域標(biāo)記法對Bindataset進(jìn)行處理(其中第五類對Bin-dataset進(jìn)行形態(tài)學(xué)變換后再處理),生成標(biāo)記數(shù)據(jù)Tag-dataset。然后使用lableme 軟件對Tag-dataset 數(shù)據(jù)進(jìn)行人工校正。最后利用腳本程序合成分割數(shù)據(jù)集。
圖9 分割數(shù)據(jù)集樣例
在python3.6環(huán)境下利用pytorch深度神經(jīng)網(wǎng)絡(luò)框架完成整個(gè)算法流程。正如前面所說預(yù)處理模型是一個(gè)Pix2pix 轉(zhuǎn) 換 框 架。Pro-model 包 含GeneratorUNet 和Discriminator 兩個(gè)部分。在GeneratorUNet 部分中有兩個(gè)主要步驟UNetDown 和UNetUp。在UNetDown 中使用Conv2d、InstanceNorm2d和LeakyReLU,而在UNetUp中 采 用 一 次ConvTranspose2d、InstanceNorm2d 和ReLU。GeneratorUNet 部分先進(jìn)行5 次UNetDown 和4次UNetUp。對于Discriminator使用了4個(gè)discriminator_block,每個(gè)discriminator_block 包含1 個(gè)Conv2d、1 個(gè)InstanceNorm2d和1個(gè)LeakyReLU。在訓(xùn)練的時(shí)候使用學(xué)習(xí)率為0.000 2,batch-size為1,對模型訓(xùn)練2 100 epoch。
在對抗訓(xùn)練階段包含了兩個(gè)網(wǎng)絡(luò)。即分割網(wǎng)絡(luò)(SegmentNet)和識別網(wǎng)絡(luò)(IdentifyNet)。
在SegmentNet中使用了一個(gè)類U-Net網(wǎng)絡(luò)。類U-Net網(wǎng)絡(luò)的左側(cè)是convolution layers,右側(cè)則是upsamping layers,convolutions layers 中每個(gè)pooling layer 前一刻的activation 值會concatenate 到對應(yīng)的upsamping 層的activation 值中。因?yàn)閁-Net 左側(cè)部分和resnet、vgg、inception 等模型一樣,都是通過卷積層來提取圖像特征,所以U-Net可以采用resnet/vgg/inception+upsampling的形式來實(shí)現(xiàn),另外驗(yàn)證碼數(shù)據(jù)并不是非常復(fù)雜,這個(gè)項(xiàng)目中采用的是最簡單的LeNet-5+upsampling的架構(gòu)。
IdentifyNet 就是一個(gè)完全的分類器,常用的有resnet/vgg/inception等,由于驗(yàn)證碼圖像比較簡單,而且經(jīng)過預(yù)處理后數(shù)據(jù)識別更加簡單,根據(jù)圖7 所示的設(shè)計(jì),每一個(gè)尺寸通道使用一個(gè)Residual bloack模塊。一共有4個(gè)尺寸通道。
在預(yù)處理階段中每一類驗(yàn)證碼都使用了500 個(gè)樣本進(jìn)行訓(xùn)練,同時(shí)也利用傳統(tǒng)的數(shù)字圖像處理方法對每一類進(jìn)行處理比較,如表1所示。第一列是輸入文本驗(yàn)證碼圖片,第二列是使用傳統(tǒng)數(shù)字圖像處理方法預(yù)處理結(jié)果,第三列是本文方法處理的結(jié)果,第四列是預(yù)處理的目標(biāo)效果。第二列中,每一類都使用不同的代碼。表1中的第四類,首先將圖像二值化,然后用一個(gè)大小為5的方塊對其腐蝕去除干擾線條,最后再用大小為5的方塊進(jìn)行膨脹。而處理第五類時(shí)不能使用腐蝕或者膨脹的方法。因?yàn)闈h字的細(xì)節(jié)太多,而干擾信息的寬度大多都和漢字的寬度相同。根據(jù)實(shí)驗(yàn)結(jié)果得出:(1)傳統(tǒng)預(yù)處理方法在去除干擾信息的同時(shí)也會丟失部分字符信息。特別是干擾線條的寬度長度與字符接近的時(shí)候這種現(xiàn)象最為明顯,例如表1 中的第二類和第五類驗(yàn)證碼。(2)利用GAN神經(jīng)網(wǎng)絡(luò)作為預(yù)處理模型不僅能夠很好除去驗(yàn)證碼中的干擾信息,而且還能保留原彩色圖片的顏色信息。對于有顏色信息的驗(yàn)證碼(如表1中的第三行驗(yàn)證碼)又提供了更加有用的分割信息。對于這類文本驗(yàn)證碼可以根據(jù)不同顏色快速進(jìn)行分割。(3)這樣的預(yù)處理模型還有通用性,本文中所處理的五類驗(yàn)證碼在預(yù)處理時(shí)都使用同一個(gè)網(wǎng)絡(luò)模型,甚至它的超參數(shù)都是一樣的,只需要把數(shù)據(jù)導(dǎo)入模型進(jìn)行訓(xùn)練就能得到結(jié)果。
表1 預(yù)處理得到的結(jié)果
在對抗訓(xùn)練/識別階段,經(jīng)過對抗訓(xùn)練后得到兩個(gè)網(wǎng)絡(luò)模型,分割網(wǎng)絡(luò)G 和識別網(wǎng)絡(luò)D。
5.2.1 分割結(jié)果
使用分割網(wǎng)絡(luò)G 分別對這五類驗(yàn)證碼進(jìn)行訓(xùn)練后得到結(jié)果如圖10 所示。第一類準(zhǔn)確率為0.926,第二類準(zhǔn)確率為0.933,第三類準(zhǔn)確率為0.953,第四類準(zhǔn)確率為0.892,第五類準(zhǔn)確率為0.924。
圖10 分割網(wǎng)絡(luò)結(jié)果
5.2.2 識別結(jié)果
表2 是文本驗(yàn)證碼在不同階段的輸出結(jié)果。驗(yàn)證碼經(jīng)過分割網(wǎng)絡(luò)分割后不同字符會被標(biāo)記成不顏色,通過顏色就能快速進(jìn)行分割。然后利用識別網(wǎng)絡(luò)進(jìn)行分類得到最后結(jié)果。
表3顯示的是最終識別結(jié)果。在實(shí)驗(yàn)A中,首先使用傳統(tǒng)方法對文本驗(yàn)證碼進(jìn)行預(yù)處理,然后利用連通域分割法(CFS)對圖像進(jìn)行分割(有粘貼情況使用平均寬度分割),最后使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行分類(在實(shí)驗(yàn)過程中首先使用了VGG16 模型,但是由于驗(yàn)證碼圖像是經(jīng)過預(yù)處理后的圖像很容易過擬合,因此使用簡單的LeNet5 模型)。在實(shí)驗(yàn)B 中使用本文提出的識別方法。通過對比發(fā)現(xiàn):(1)如果文本驗(yàn)證碼的干擾線條和字符線條寬度相差很大時(shí),分割是影響準(zhǔn)確率的主要因素。如表3中第1、3、4類驗(yàn)證碼。(2)當(dāng)干擾線條寬度和字符線條寬度接近時(shí),預(yù)處理和分割都是很關(guān)鍵的步驟,如表3 中第5 類驗(yàn)證碼。在整個(gè)實(shí)驗(yàn)中,不管是預(yù)處理還是分割和識別,本文的方法在通用性和準(zhǔn)確性方面都能夠取得很好的效果。
表2 不同階段的處理結(jié)果
表3 測試結(jié)果比較
本文提出基于對抗學(xué)習(xí)的驗(yàn)證碼識別方法與以往的方法相比無論是在通用性和準(zhǔn)確率上都有明顯的提高。但也存在一些不足,首先,文本驗(yàn)證碼在收集和預(yù)處理階段需要大量人工參與。在未來工作中將嘗試使用超參數(shù)優(yōu)化合成的方式直接生成預(yù)處理數(shù)據(jù)集和分割數(shù)據(jù)集以減少人工干預(yù),湯戰(zhàn)勇等[20]做了類似的工作。其次,本文提出的方法是基于文本型驗(yàn)證碼的識別,希望在未來工作能運(yùn)用到其他相關(guān)領(lǐng)域。最后,雖然本文是文本驗(yàn)證碼識別,從安全的角度來說,盡管目前文本驗(yàn)證碼都有了很多的替代方案,但是文本型驗(yàn)證碼依然是最流行的方法。希望能引起更多的注意,在未來提出更加安全的文本驗(yàn)證碼。