楊 佳,宋曉茹,高 嵩,吳 雪
(西安工業(yè)大學(xué) 電子信息工程學(xué)院,西安710021)
隨著科學(xué)技術(shù)的不斷發(fā)展,目標(biāo)檢測(cè)、目標(biāo)跟蹤和目標(biāo)識(shí)別技術(shù)已經(jīng)成為機(jī)器學(xué)習(xí)領(lǐng)域研究中的熱門方向。計(jì)算機(jī)硬件的不斷提高使得卷積神經(jīng)網(wǎng)絡(luò)在目標(biāo)檢測(cè)與識(shí)別方面已經(jīng)取得了巨大成就,例如行人跟蹤[1]、語音識(shí)別[2]、人臉識(shí)別[3]、驗(yàn)證碼識(shí)別[4]等。其中,驗(yàn)證碼能夠?qū)θ祟惡陀?jì)算機(jī)進(jìn)行自動(dòng)區(qū)分。為抵抗自動(dòng)化程序?qū)W(wǎng)站的非法侵害,防止網(wǎng)站重要信息泄露,越來越多的網(wǎng)站開始使用驗(yàn)證碼[5]。
目前,驗(yàn)證碼識(shí)別技術(shù)主要可分為2 種,一種是傳統(tǒng)的識(shí)別方法,提取出驗(yàn)證碼圖片最有效的特征后,設(shè)計(jì)分類器進(jìn)行訓(xùn)練識(shí)別。文獻(xiàn)[6]通過設(shè)計(jì)SVM 分類器,對(duì)某些網(wǎng)站驗(yàn)證碼進(jìn)行了識(shí)別;文獻(xiàn)[7]提出了基于模糊聚類和徑向基神經(jīng)網(wǎng)絡(luò)的動(dòng)態(tài)集成分類器對(duì)字符進(jìn)行訓(xùn)練識(shí)別的方法。這些方法的缺點(diǎn)是都需要手動(dòng)特征提取,復(fù)雜且既有盲目性。另一種是使用深度學(xué)習(xí)的方法進(jìn)行驗(yàn)證碼識(shí)別,常用算法為卷積神經(jīng)網(wǎng)絡(luò)CNN 算法。文獻(xiàn)[8]通過深度神經(jīng)網(wǎng)絡(luò)端到端地識(shí)別整張驗(yàn)證碼圖片中的字符,完成分類識(shí)別任務(wù);文獻(xiàn)[9]構(gòu)建的神經(jīng)網(wǎng)絡(luò)模型對(duì)識(shí)別不同類別的驗(yàn)證碼具有較好的識(shí)別率。這些方法單一使用卷積神經(jīng)網(wǎng)絡(luò),在驗(yàn)證碼圖片噪點(diǎn)較多、較復(fù)雜時(shí),識(shí)別效果不太顯著。
基于此,為避免傳統(tǒng)識(shí)別方法中復(fù)雜的特征提取,以及單一使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)混合驗(yàn)證碼低的識(shí)別率,將圖像處理技術(shù)與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合,首先使用圖像預(yù)處理的方法改善圖片質(zhì)量,再將圖片分割成單個(gè)字符后送入到設(shè)計(jì)好的網(wǎng)絡(luò)模型中進(jìn)行訓(xùn)練識(shí)別。通過由Python 程序自動(dòng)生成的驗(yàn)證碼圖像數(shù)據(jù)集進(jìn)行試驗(yàn)對(duì)比,結(jié)果表明該方法具有更高的準(zhǔn)確率。
Lecun 等人在1989年提出的LeNet 網(wǎng)絡(luò),用于對(duì)手寫數(shù)字的識(shí)別,準(zhǔn)確率可達(dá)99%。卷積神經(jīng)網(wǎng)絡(luò)基本結(jié)構(gòu)由輸入層、卷積層、池化層、全連接層和輸出層組成,將卷積層與池化層組合起來可以對(duì)目標(biāo)圖像的特征進(jìn)行自主提取,網(wǎng)絡(luò)之間的局部連接與權(quán)值共享減少了模型中的參數(shù)數(shù)量,并且模型具有較強(qiáng)的魯棒性和泛化能力[10]。為提高混合驗(yàn)證碼的識(shí)別準(zhǔn)確率,所設(shè)計(jì)的混合驗(yàn)證碼識(shí)別系統(tǒng)框架如圖1所示。
圖1 混合驗(yàn)證碼識(shí)別系統(tǒng)框架Fig.1 Framework of hybrid captcha recognition system
在使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時(shí),需要大量的試驗(yàn)數(shù)據(jù),獲取驗(yàn)證碼的方法通常有2 種——網(wǎng)絡(luò)爬蟲和程序生成,在此采用自動(dòng)程序生成驗(yàn)證碼數(shù)據(jù)庫(kù)。
自動(dòng)生成的驗(yàn)證碼圖片像素為20×20,由26 個(gè)字母和10 個(gè)數(shù)字隨機(jī)混合組成。為增加驗(yàn)證碼復(fù)雜程度,圖片上還含有噪點(diǎn)干擾以及字符的旋轉(zhuǎn)、形變,生成的部分驗(yàn)證碼圖片如圖2所示。數(shù)據(jù)庫(kù)共包含591769 張樣本圖片,采用7∶3 的比例將數(shù)據(jù)庫(kù)分為訓(xùn)練集和測(cè)試集。
圖2 部分試驗(yàn)數(shù)據(jù)Fig.2 Some experimental data
試驗(yàn)平臺(tái)為AMD A10-8700P Radeon R6,10 Compute Cores 4C+6G 1.80 GHz CPU,4G 內(nèi)存,使用Python 語言編寫程序,依賴開源框架Tensorflow和Keras,以及Open-CV,Captcha 庫(kù)。
在圖像分析中,圖片質(zhì)量的好壞在很大程度上會(huì)影響識(shí)別算法模型的設(shè)計(jì)和識(shí)別效果的準(zhǔn)確率。因此,在使用卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練前,首先進(jìn)行灰度化,將原始的彩色圖像轉(zhuǎn)化成灰度圖像。然后,將圖片二值化,確定分類閾值將圖像上像素點(diǎn)的256 級(jí)灰度值置為0 或255,使圖片達(dá)到“非黑即白”的效果。最后,通過去噪技術(shù)去除圖片中的噪點(diǎn),增大信噪比,加強(qiáng)相關(guān)信息的可檢索性,改善圖片信息提高圖片質(zhì)量,在圖像預(yù)處理的仿真中分別使用經(jīng)典算法進(jìn)行仿真試驗(yàn)。
針對(duì)由數(shù)字字母混合組成的驗(yàn)證碼圖片識(shí)別,設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)模型如圖3所示,各個(gè)網(wǎng)絡(luò)層神經(jīng)元使用ReLU(Rectified Linear Unit)激活函數(shù)進(jìn)行非線性轉(zhuǎn)換,使用Softmax 函數(shù)對(duì)輸出層進(jìn)行輸出分類。由于卷積操作存在圖像角落及邊界信息發(fā)揮作用不充分的問題,所以將卷積中的padding(填充)方式設(shè)為SAME,對(duì)每個(gè)卷積層輸入的圖片像素點(diǎn)周圍補(bǔ)0,使輸入輸出尺寸相同。
圖3 卷積神經(jīng)網(wǎng)絡(luò)模型設(shè)計(jì)Fig.3 Design drawing of convolutional neural network model
卷積神經(jīng)網(wǎng)絡(luò)模型中各網(wǎng)絡(luò)層的輸入輸出關(guān)系見表1。
表1 網(wǎng)絡(luò)層輸入輸出關(guān)系Tab.1 Network layer input/output relationships
1)灰度化 對(duì)彩色的驗(yàn)證碼原圖分別使用最大值法、平均值法和加權(quán)法對(duì)圖像進(jìn)行灰度處理,編程語言采用Python,灰度化結(jié)果如圖4所示。由圖可見,最大值法會(huì)使處理后的圖像整體偏亮;采用平均值方式處理的圖像更加柔軟;加權(quán)法得到的效果最好。故在此使用加權(quán)法進(jìn)行灰度預(yù)處理。
圖4 灰度化仿真結(jié)果Fig.4 Gray scale simulation results
2)二值化 通過設(shè)定分類閾值的方法對(duì)圖像進(jìn)行二值化,將圖像中的像素點(diǎn)分為大于設(shè)定閾值的像素群、小于設(shè)定閾值的像素群。常見的確定閾值方法有簡(jiǎn)單閾值法、自適應(yīng)閾值法、動(dòng)態(tài)閾值法等。圖像二值化處理的仿真結(jié)果如圖5所示。由圖可見,動(dòng)態(tài)閾值法的效果最好,故在此采用動(dòng)態(tài)閾值法進(jìn)行二值化預(yù)處理。
圖5 二值化仿真結(jié)果Fig.5 Binary simulation results
3)去噪 使用均值濾波、高斯濾波、中值濾波、雙邊濾波對(duì)圖像進(jìn)行去噪,仿真結(jié)果如圖6所示。由圖可見,中值濾波的去噪效果最好,故在此使用中值濾波進(jìn)行去噪預(yù)處理。
圖6 去噪仿真結(jié)果Fig.6 De-noising simulation results
4)圖像分割 在對(duì)所用樣本集進(jìn)行分割時(shí),采用灰度投影法,將圖像映射成灰度特征后作為分割依據(jù),分割結(jié)果如圖7所示。其中,圖7a 為對(duì)分割得到的36 類字符進(jìn)行分類標(biāo)記后的36 個(gè)文件夾;圖7b為圖7a 中字符2 文件夾下歸類標(biāo)記的所有單個(gè)字符。
在編程中,使用深度學(xué)習(xí)框架Keras2.2.4,Tensorflow1.3.0,網(wǎng)絡(luò)的訓(xùn)練參數(shù)設(shè)置見表2。
損失函數(shù)為多類的對(duì)數(shù)損失“categoryical_crossentropy”(交叉熵?fù)p失函數(shù)),并使用自適應(yīng)學(xué)習(xí)率優(yōu)化算法Adam 對(duì)網(wǎng)絡(luò)權(quán)重進(jìn)行更新。將數(shù)據(jù)的批量個(gè)數(shù)設(shè)置為64,共迭代2400 次,對(duì)該網(wǎng)絡(luò)進(jìn)行訓(xùn)練。
圖7 分割結(jié)果Fig.7 Segmentation results
圖像預(yù)處理與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的識(shí)別準(zhǔn)確率、損失率如圖8所示。由圖可見,經(jīng)過2400 次迭代訓(xùn)練完成后,識(shí)別準(zhǔn)確率為0.9997,損失率逐漸趨于0。
為驗(yàn)證所提方法的效果更好,使用未結(jié)合圖像處理時(shí)的單一卷積神經(jīng)網(wǎng)絡(luò)與其進(jìn)行仿真試驗(yàn)對(duì)比。未結(jié)合圖像處理技術(shù)的卷積神經(jīng)網(wǎng)絡(luò)與結(jié)合圖像處理技術(shù)的卷積網(wǎng)絡(luò),使用同一個(gè)卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),輸出層為144 維向量,訓(xùn)練時(shí)數(shù)據(jù)批量個(gè)數(shù)為64,在迭代2400 次后訓(xùn)練得出識(shí)別準(zhǔn)確率為0.9753。其仿真結(jié)果如圖9所示。
圖8 圖像預(yù)處理與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的識(shí)別率、損失率Fig.8 Recognition rate and loss rate of the combination of image preprocessing and convolutional neural network
圖9 單一卷積神經(jīng)網(wǎng)絡(luò)識(shí)別率和損失率Fig.9 Recognition rate and loss rate of a single convolutional neural network
識(shí)別率的對(duì)比見表3。由表可知,在此所提出的預(yù)處理方法與卷積神經(jīng)網(wǎng)絡(luò)結(jié)合的方法,相比于端到端的方法,識(shí)別率提高了2.44%。
表3 識(shí)別率仿真試驗(yàn)結(jié)果對(duì)比Tab.3 Comparison of simulation results of recognition rate
基于圖像處理技術(shù)與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的驗(yàn)證碼識(shí)別研究,不僅避免了傳統(tǒng)識(shí)別方法中手動(dòng)提取特征的復(fù)雜性,而且解決了混合驗(yàn)證碼圖片背景復(fù)雜時(shí)識(shí)別率不高的問題。通過對(duì)Python 自動(dòng)生成的驗(yàn)證碼樣本進(jìn)行仿真試驗(yàn),與未結(jié)合圖像處理技術(shù)時(shí)單一使用卷積神經(jīng)網(wǎng)絡(luò)的識(shí)別模型對(duì)比表明,使用圖像預(yù)處理與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的方法識(shí)別準(zhǔn)確率有了顯著的提高。