李建平,王 釗
(東北石油大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院,黑龍江 大慶 163318)
驗(yàn)證碼是分辨用戶是機(jī)器還是人的一種公共全自動(dòng)算法程序。作為互聯(lián)網(wǎng)領(lǐng)域保證網(wǎng)絡(luò)安全的常用手段,驗(yàn)證碼技術(shù)的產(chǎn)生極大程度上阻止了非法用戶暴力破解用戶密碼、頻繁登錄與注冊(cè)等惡意行為,有效地保證了網(wǎng)站內(nèi)部數(shù)據(jù)的安全,避免了大量僵尸用戶的產(chǎn)生[1]。但是對(duì)于在機(jī)器人流程自動(dòng)化領(lǐng)域,為實(shí)現(xiàn)自動(dòng)化處理業(yè)務(wù)就必須實(shí)現(xiàn)驗(yàn)證碼自動(dòng)化識(shí)別。然而數(shù)量巨大且抽象的驗(yàn)證碼,人工識(shí)別都很難達(dá)到高的準(zhǔn)確率,更何況使用機(jī)器識(shí)別。這就間接導(dǎo)致了實(shí)現(xiàn)自動(dòng)化處理業(yè)務(wù)似乎變成了一個(gè)無(wú)法實(shí)現(xiàn)的難題。
傳統(tǒng)的驗(yàn)證碼識(shí)別方法一般基于OCR技術(shù)。OCR即光學(xué)字符識(shí)別,其實(shí)現(xiàn)原理是利用電子設(shè)備檢查圖形的亮暗的形狀來(lái)翻譯成計(jì)算機(jī)字符的過(guò)程。OCR識(shí)別驗(yàn)證碼之前需要對(duì)源數(shù)據(jù)進(jìn)行預(yù)處理。例如二值化、行切分、連通域分析等。雖然對(duì)于比較規(guī)整的字符序列采用OCR技術(shù)也會(huì)取得較好的識(shí)別效果,胡曉輝[2]利用Tesseract光學(xué)字符識(shí)別引擎實(shí)現(xiàn)了對(duì)驗(yàn)證碼的識(shí)別,并取得了較好的識(shí)別效果。但是隨著大量具有抽象、粘連、噪點(diǎn)等特征圖像驗(yàn)證碼的出現(xiàn),OCR技術(shù)識(shí)別效果卻收效甚微[3]。其缺點(diǎn)表現(xiàn)如下:(1)對(duì)于復(fù)雜驗(yàn)證碼圖像二值化處理會(huì)造成信息缺失;(2)人工干預(yù)過(guò)多。對(duì)方法參數(shù)的設(shè)定完全依賴于當(dāng)事人實(shí)踐經(jīng)驗(yàn);(3)OCR識(shí)別靈活性差,導(dǎo)致對(duì)復(fù)雜驗(yàn)證碼圖像處理修改空間急速變??;(4)大量的電子識(shí)別設(shè)備需要高額成本;(5)英文字母識(shí)別率低下。
直至本世紀(jì)初卷積神經(jīng)網(wǎng)絡(luò)理論的逐步成熟使得驗(yàn)證碼自動(dòng)化識(shí)別有了新的突破。相比于其他的驗(yàn)證碼識(shí)別技術(shù),卷積神經(jīng)網(wǎng)絡(luò)擁有更加強(qiáng)大的容錯(cuò)能力、自學(xué)習(xí)能力、泛化能力和并行處理能力[4]。改變?nèi)B接層神經(jīng)元個(gè)數(shù)所構(gòu)建的基于深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet多任務(wù)驗(yàn)證碼識(shí)別模型[5]以及通過(guò)Inception模塊替換Google-net的卷積層所構(gòu)建的基于端到端的驗(yàn)證碼識(shí)別模型[6]等都取得了不錯(cuò)的識(shí)別效果。故針對(duì)傳統(tǒng)驗(yàn)證碼識(shí)別技術(shù)上的不足,該文提出了一種基于PSO-CNN的驗(yàn)證碼識(shí)別技術(shù)。驗(yàn)證碼識(shí)別模型的建立通過(guò)四個(gè)部分來(lái)完成,分別為驗(yàn)證碼源數(shù)據(jù)預(yù)處理、搭建卷積神經(jīng)網(wǎng)絡(luò)識(shí)別模型、尋優(yōu)識(shí)別模型參數(shù)、評(píng)價(jià)驗(yàn)證碼識(shí)別效果。
針對(duì)合同管理系統(tǒng)的驗(yàn)證碼識(shí)別,采用粒子群優(yōu)化算法與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的方式。即利用卷積神經(jīng)網(wǎng)絡(luò)作為訓(xùn)練識(shí)別模型的基礎(chǔ),而粒子群尋優(yōu)算法則是為了找出最優(yōu)的識(shí)別模型參數(shù)。故為獲得優(yōu)化后的驗(yàn)證碼識(shí)別模型,該文以卷積核大小和網(wǎng)絡(luò)層數(shù)作為粒子群尋優(yōu)的問(wèn)題域,將驗(yàn)證碼識(shí)別的準(zhǔn)確率作為尋優(yōu)算法的標(biāo)準(zhǔn),并最終返回某一迭代范圍內(nèi)的最優(yōu)的卷積大小和網(wǎng)絡(luò)層數(shù)大小參數(shù)。進(jìn)而得到優(yōu)化后的驗(yàn)證碼識(shí)別模型。
卷積神經(jīng)網(wǎng)絡(luò)作為一種前饋神經(jīng)網(wǎng)絡(luò)是進(jìn)行大型圖像處理的利器,其網(wǎng)絡(luò)層級(jí)結(jié)構(gòu)由數(shù)據(jù)輸入層(原始圖像預(yù)處理)、卷積層(卷積神經(jīng)網(wǎng)絡(luò)中最重要的一層,完成提取特征的過(guò)程)、ReLU激勵(lì)層(將輸出結(jié)果做非線性映射。ReLU函數(shù)具有收斂快、計(jì)算梯度快的特點(diǎn))、池化層(用于壓縮數(shù)據(jù)和參數(shù)的量,減少過(guò)擬合現(xiàn)象的發(fā)生)和全連接層(“分類(lèi)器”的作用)依次構(gòu)成[7]。
基于上述卷積神經(jīng)網(wǎng)絡(luò)雖然為驗(yàn)證碼圖像識(shí)別提供了新的思路,但是在卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練參數(shù)的設(shè)置完全取決于技術(shù)人員的實(shí)際經(jīng)驗(yàn),這就直接導(dǎo)致不同的參數(shù)將會(huì)得到不同的驗(yàn)證碼識(shí)別準(zhǔn)確率。甚至有時(shí)因?yàn)閰?shù)設(shè)置的原因,不同的驗(yàn)證碼識(shí)別模型預(yù)測(cè)準(zhǔn)確率相差甚大。故從卷積核與卷積神經(jīng)網(wǎng)絡(luò)層數(shù)這兩個(gè)方向入手,該文利用粒子群優(yōu)化算法在卷積神經(jīng)網(wǎng)絡(luò)構(gòu)建驗(yàn)證碼預(yù)測(cè)模型的過(guò)程中尋找出適合于當(dāng)前驗(yàn)證碼識(shí)別模型的最優(yōu)參數(shù)。
為解決實(shí)際工程中的最優(yōu)化問(wèn)題,智能算法應(yīng)運(yùn)而生。遺傳算法(GA)、退火算法(SA)、粒子群優(yōu)化算法(PSO)等都是智能算法中的代表算法。其中粒子群優(yōu)化算法因簡(jiǎn)單易行、收斂速度塊、設(shè)置參數(shù)少的優(yōu)勢(shì)備受學(xué)界的青睞[8]。該算法思想是受鳥(niǎo)類(lèi)或魚(yú)類(lèi)覓食的行為的啟發(fā)。該文將尋優(yōu)的參數(shù)視為粒子群優(yōu)化算法中的“粒子”,將這些“粒子”置于解空間中進(jìn)行迭代搜索,在搜索的過(guò)程中利用“粒子”之間的協(xié)作與信息共享來(lái)最終得到驗(yàn)證碼識(shí)別模型的參數(shù)最優(yōu)解。
在粒子群優(yōu)化算法中,每一個(gè)尋優(yōu)粒子賦予記憶功能。其具有兩個(gè)屬性,分別為速度與方向。速度代表的是尋優(yōu)粒子在解空間中活動(dòng)的快慢。尋優(yōu)粒子后續(xù)狀態(tài)由自身的飛行經(jīng)驗(yàn)和同伴的飛行經(jīng)驗(yàn)共同決定。尋優(yōu)粒子的速度不宜過(guò)快,速度過(guò)快將很可能導(dǎo)致錯(cuò)過(guò)全局最優(yōu)解。方向代表尋優(yōu)粒子在解空間中活動(dòng)的方向[9]。每一個(gè)粒子所處位置與最優(yōu)解或滿意解之間的偏差通過(guò)測(cè)度函數(shù)來(lái)進(jìn)行衡量。其中尋優(yōu)粒子的速度更新公式為:
粒子i的位置更新公式為:
(2)
故驗(yàn)證碼識(shí)別模型的尋優(yōu)參數(shù)步驟如下:
(1)設(shè)定驗(yàn)證碼識(shí)別模型尋優(yōu)種群規(guī)模,隨機(jī)初始化每個(gè)尋優(yōu)粒子以及最大迭代次數(shù)。其中種群規(guī)模的設(shè)定不宜過(guò)小,太小則陷入局部最優(yōu)解的可能性就會(huì)加大。粒子群優(yōu)化算法優(yōu)化能力強(qiáng),當(dāng)種群數(shù)數(shù)目增至一定數(shù)量時(shí),再增長(zhǎng)所尋優(yōu)結(jié)果將不會(huì)發(fā)生太大變化。
(2)根據(jù)測(cè)度函數(shù)計(jì)算每一個(gè)尋優(yōu)粒子的適應(yīng)度。其中將驗(yàn)證碼識(shí)別模型的準(zhǔn)確率作為測(cè)度函數(shù)的返回值[10]。
(3)更新尋優(yōu)粒子本身歷史最好位置、種群歷史最好位置、粒子的速度與位置。
(4)當(dāng)達(dá)到最大迭代次數(shù)或者滿足設(shè)定最小誤差時(shí),停止迭代即完成驗(yàn)證碼識(shí)別模型的建立。否之返回步驟2繼續(xù)尋找最優(yōu)解。
驗(yàn)證碼預(yù)測(cè)模型構(gòu)建的過(guò)程大致分為三個(gè)部分:(1)向前傳播;(2)損失函數(shù)值計(jì)算;(3)反向傳播。識(shí)別模型不斷調(diào)整權(quán)重和偏置的值,當(dāng)誤差小于某一個(gè)設(shè)定誤差值時(shí),則停止迭代完成驗(yàn)證碼預(yù)測(cè)模型的構(gòu)建。驗(yàn)證碼預(yù)測(cè)模型的構(gòu)建流程如圖1所示。
圖1 驗(yàn)證碼預(yù)測(cè)模型的構(gòu)建流程
(1)向前傳播。向前傳播分為:卷積層向前傳播、池化層向前傳播、全連接層向前傳播。卷積層向前傳播指的是通過(guò)事先設(shè)定的卷積核大小對(duì)輸入驗(yàn)證碼圖像進(jìn)行卷積處理。傳播計(jì)算公式為:
池化層向前傳播。池化層也叫下采樣層,該層將卷積層提取的特征數(shù)據(jù)利用最大池化算法或者平均值池化算法[11],降低特征數(shù)據(jù)的計(jì)算難度,有效防止了過(guò)擬合現(xiàn)象的發(fā)生。
(4)
全連接層向前傳播。經(jīng)過(guò)卷積和池化操作之后將特征數(shù)據(jù)輸入至全連接層進(jìn)行輸入數(shù)據(jù)的分類(lèi),并建立預(yù)測(cè)模型。
(2)損失計(jì)算。損失函數(shù)用于衡量計(jì)算實(shí)際分類(lèi)結(jié)果與標(biāo)簽結(jié)果之間的偏差。偏差越大說(shuō)明模型分類(lèi)效果越差,反之偏差越小分類(lèi)結(jié)果相對(duì)越好。損失函數(shù)公式為:
(5)
其中,EP表示預(yù)測(cè)模型損失偏差的和,aL表示第L層的輸出節(jié)點(diǎn),y表示標(biāo)簽結(jié)果,P表示有數(shù)據(jù)的組數(shù)。
通過(guò)對(duì)預(yù)測(cè)模型損失函數(shù)的計(jì)算,再利用梯度下降法不斷更新權(quán)重W和偏置b。參數(shù)更新公式為:
(W,b)=argmin(EP(W,b))
(6)
(W,b)(n+1)=(W,b)n-α·grad(EP(W,b)n)
(7)
其中,α表示學(xué)習(xí)率,學(xué)習(xí)率表示模型對(duì)最優(yōu)參數(shù)W,b尋找的仔細(xì)程度。grad表示梯度下降函數(shù)。
(3)反向傳播算法。當(dāng)預(yù)測(cè)值與標(biāo)簽值損誤差值大于設(shè)定誤差時(shí),將誤差值一層一層返回,計(jì)算出每一層的誤差并更新權(quán)重參數(shù)。
獲取吉林某油田合同管理系統(tǒng)登錄頁(yè)面的驗(yàn)證碼數(shù)據(jù)集。源數(shù)據(jù)集包含三個(gè)特征:(1)抽象。字母、數(shù)字并不是規(guī)整排列的,而是歪歪扭扭并行排列;(2)粘連。有相當(dāng)一部分的驗(yàn)證碼相鄰的字母或數(shù)字之間相互連接在一起;(3)含噪點(diǎn)。每一張驗(yàn)證碼圖片包含了干擾識(shí)別準(zhǔn)確率大的噪點(diǎn)。其原始圖片效果如圖2所示。
圖2 未處理的驗(yàn)證碼
對(duì)于原始數(shù)據(jù)集的處理,該文主要分為灰度化處理、二值化、降噪三步?;叶然傅氖菍⒉噬珗D片轉(zhuǎn)化為灰度圖片的過(guò)程。由于彩色圖像具有R、G、B三個(gè)通道,直接用彩色圖片進(jìn)行訓(xùn)練將會(huì)導(dǎo)致建模時(shí)間過(guò)長(zhǎng),既耗時(shí)又耗力。故將源數(shù)據(jù)集進(jìn)行灰度化操作轉(zhuǎn)化為單色道的灰度圖片?;叶然僮饕话惆N算法:最大值法、平均值法和加權(quán)平均值法。加權(quán)平均值法[12]靈活度高、自定義性好,故使用該方法完成對(duì)圖像的灰度化操作。其公式如下:
(8)
其中,ω1、ω2和ω3分別為R、G、B的權(quán)值。取不同的權(quán)重參數(shù)可以得到不同的灰度圖像。ω1、ω2、ω3分別取值0.299、0.587、0.114。其得到的灰度驗(yàn)證碼圖片如圖3所示。
圖3 灰度化后的驗(yàn)證碼
為了更好地提取圖像中的信息,增加驗(yàn)證碼識(shí)別的準(zhǔn)確率,需要對(duì)圖片進(jìn)行二值化處理。二值化[13]處理顧名思義指的是按照某一個(gè)灰度閾值將灰度化后的驗(yàn)證碼圖像像素點(diǎn)劃分為白色(0)或者黑色(255)兩部分。故經(jīng)過(guò)二值化后的圖片只會(huì)呈現(xiàn)黑白兩種效果。二值化處理的關(guān)鍵點(diǎn)在于灰度閾值的選擇。該文選用全局閾值的方法將灰度閾值設(shè)定為200。其二值化處理后的效果如圖4所示。
圖4 二值化后的驗(yàn)證碼
降噪操作進(jìn)一步降低了識(shí)別模型的數(shù)據(jù)計(jì)算難度,剔除了大部分二值化驗(yàn)證碼圖像中的干擾點(diǎn)。即降噪[14]指的是刪除圖像中的干擾點(diǎn),保留圖像主體特征信息的過(guò)程。該文選用非局部均值降噪[15]的方法對(duì)二值化圖像進(jìn)行降噪處理。其處理結(jié)果如圖5所示。
圖5 降噪后的驗(yàn)證碼
硬件環(huán)境:Windows 7旗艦版。
軟件環(huán)境:PyCharm 2018;Jupyter Notebook;Tesseract 5.0.0;Python 3;Pytorch。
數(shù)據(jù)樣本來(lái)源:選取吉林某油田合同管理系統(tǒng)登錄界面的驗(yàn)證碼圖片作為數(shù)據(jù)集。
數(shù)據(jù)樣本類(lèi)型及構(gòu)成:數(shù)字與字母組合。
樣本數(shù)量及劃分:10 000張,按8∶2分為訓(xùn)練集和測(cè)試集。
實(shí)驗(yàn)數(shù)據(jù)、實(shí)驗(yàn)的軟硬件環(huán)境準(zhǔn)備就緒后,針對(duì)驗(yàn)證碼數(shù)據(jù)集的識(shí)別,將對(duì)比光學(xué)字符識(shí)別引擎Tesseract與粒子群優(yōu)化-卷積神經(jīng)網(wǎng)絡(luò)識(shí)別這兩個(gè)方法所建立的驗(yàn)證碼識(shí)別模型。
首先Tesseract是由HP實(shí)驗(yàn)室開(kāi)發(fā)的一款OCR引擎。在不同的實(shí)際生產(chǎn)環(huán)境,定制不同引擎模板,通過(guò)對(duì)數(shù)據(jù)的不斷訓(xùn)練來(lái)獲取驗(yàn)證碼圖像的識(shí)別模型[2]。該實(shí)驗(yàn)利用其封裝框架PyTesseract完成數(shù)據(jù)的預(yù)處理操作以及識(shí)別模型的建立。表1展示的是基于Tesseract識(shí)別合同管理登錄系統(tǒng)驗(yàn)證碼的準(zhǔn)確率,表2展示的是數(shù)據(jù)集處理后不同類(lèi)別的驗(yàn)證碼識(shí)別效果。
表1 基于Tesseract的合同管理登錄系統(tǒng)驗(yàn)證碼識(shí)別效果
表2 不同類(lèi)別的驗(yàn)證碼識(shí)別效果
表1的實(shí)驗(yàn)結(jié)果表明,基于Tesseract的合同管理登錄系統(tǒng)驗(yàn)證碼識(shí)別模型在數(shù)據(jù)預(yù)處理后識(shí)別準(zhǔn)確率有著較大的提升。其數(shù)據(jù)處理前驗(yàn)證碼識(shí)別準(zhǔn)率為11.3%,經(jīng)過(guò)灰度化、二值化、去噪點(diǎn)數(shù)據(jù)預(yù)處理之后識(shí)別準(zhǔn)確率可達(dá)60.5%。表2的實(shí)驗(yàn)表明,Tesseract對(duì)合同管理登錄系統(tǒng)的純數(shù)字驗(yàn)證碼比非純數(shù)字驗(yàn)證碼有著較好的識(shí)別效果??梢钥闯鰺o(wú)論是數(shù)據(jù)處理前還是處理后,驗(yàn)證碼識(shí)別準(zhǔn)確率都難以達(dá)到令人滿意的結(jié)果,而且在Tesseract識(shí)別的過(guò)程中識(shí)別出亂碼字符、空字符的情況也時(shí)有發(fā)生。故經(jīng)過(guò)以上的實(shí)驗(yàn),可以得出結(jié)論:基于Tesseract實(shí)現(xiàn)合同管理登錄系統(tǒng)驗(yàn)證碼識(shí)別的方案是不可行的。
利用PSO算法與CNN相結(jié)合的方法,找出卷積神經(jīng)網(wǎng)絡(luò)識(shí)別合同管理系統(tǒng)驗(yàn)證碼最優(yōu)的卷積核和網(wǎng)絡(luò)層數(shù)。在構(gòu)建驗(yàn)證碼預(yù)測(cè)模型的過(guò)程中,基本參數(shù)設(shè)置如表3所示。
表3 PSO-CNN驗(yàn)證碼預(yù)測(cè)模型基本參數(shù)設(shè)置
經(jīng)過(guò)168.5小時(shí)的模型訓(xùn)練后得到了優(yōu)化后的驗(yàn)證碼預(yù)測(cè)模型,其平均粒子群優(yōu)化算法每迭代依次需要花費(fèi)10小時(shí)左右。由于計(jì)算機(jī)本身的限制,隨著程序運(yùn)行時(shí)間的增加其模型每次迭代所花費(fèi)的時(shí)間也在逐步增加?;赑SO-CNN所構(gòu)建的驗(yàn)證碼識(shí)別模型的識(shí)別效果如表4所示。
表4 基于PSO-CNN的驗(yàn)證碼識(shí)別效果 %
從表4的實(shí)驗(yàn)結(jié)果可以看出,不同的卷積神經(jīng)網(wǎng)絡(luò)參數(shù)所建立的驗(yàn)證碼預(yù)測(cè)模型其識(shí)別準(zhǔn)確率有著較大的差異。文中初始驗(yàn)證碼識(shí)別模型參數(shù)設(shè)置為5*5卷積核以及四層網(wǎng)絡(luò)結(jié)構(gòu),即在沒(méi)有使用尋優(yōu)算法的情況下單純利用卷積神經(jīng)網(wǎng)絡(luò)識(shí)別驗(yàn)證碼的準(zhǔn)確率為90.01%。經(jīng)過(guò)尋優(yōu)算法優(yōu)化后所構(gòu)建的驗(yàn)證碼預(yù)測(cè)模型其驗(yàn)證碼識(shí)別準(zhǔn)確率最高可達(dá)96.26%。就卷積核而言,隨著卷積核的增大驗(yàn)證碼識(shí)別準(zhǔn)確率由于無(wú)法提取更多的特征信息,導(dǎo)致識(shí)別準(zhǔn)確率總體趨勢(shì)是下降的。從網(wǎng)絡(luò)層數(shù)方面來(lái)說(shuō),隨著網(wǎng)絡(luò)層數(shù)的增加識(shí)別準(zhǔn)確率有了明顯的提高,但是當(dāng)網(wǎng)絡(luò)層數(shù)為5時(shí),其所構(gòu)建的驗(yàn)證碼識(shí)別模型出現(xiàn)了不同程度的過(guò)擬合狀態(tài),導(dǎo)致驗(yàn)證碼識(shí)別準(zhǔn)確率出現(xiàn)了不同程度的下降。基于以上分析,圖6展示了Tesseract、CNN、PSO-CNN三種方式的識(shí)別準(zhǔn)確率的對(duì)比結(jié)果。
圖6 不同驗(yàn)證碼識(shí)別技術(shù)準(zhǔn)確率對(duì)比
針對(duì)傳統(tǒng)的驗(yàn)證碼識(shí)別技術(shù)識(shí)別粘連化、抽象化、含噪點(diǎn)的驗(yàn)證碼識(shí)別效果差的情況,提出了一種PSO-CNN的驗(yàn)證碼識(shí)別方案。該方案依托于卷積神經(jīng)網(wǎng)絡(luò),在此基礎(chǔ)之上利用粒子群優(yōu)化算法找出解空間里面的最優(yōu)模型參數(shù)。針對(duì)字母與數(shù)字混合的抽象復(fù)雜驗(yàn)證碼,傳統(tǒng)的Tesseract識(shí)別經(jīng)常識(shí)別出亂碼與空字符,其識(shí)別最優(yōu)準(zhǔn)確率僅為59.1%,通過(guò)文中方法所構(gòu)建的驗(yàn)證碼識(shí)別模型對(duì)于復(fù)雜驗(yàn)證碼的識(shí)別最優(yōu)準(zhǔn)確率可達(dá)96.26%,相對(duì)于傳統(tǒng)的驗(yàn)證碼識(shí)別方法其識(shí)別準(zhǔn)確率提高了37個(gè)百分點(diǎn),大大提高了復(fù)雜驗(yàn)證碼識(shí)別的準(zhǔn)確率。實(shí)驗(yàn)結(jié)果表明,該方案在驗(yàn)證碼識(shí)別領(lǐng)域提供了可靠的技術(shù)支持,業(yè)務(wù)構(gòu)建優(yōu)化后的圖像預(yù)測(cè)模型提供了一種嶄新的思路。