摘 要:針對傳統(tǒng)機器學(xué)習(xí)中應(yīng)用于多位字符驗證碼的分割識別方法具有整體準(zhǔn)確率低、泛化能力不足的問題,提出一種高效通用的識別方法。設(shè)計基于CNN模型的端到端字符型驗證碼識別流程,使用TensorFlow框架實現(xiàn)流程的數(shù)據(jù)訓(xùn)練和效果驗證。該方法可以高效地識別出字符型驗證碼,其平均準(zhǔn)確率為95%以上,輸入整張圖片,直接輸出整體識別結(jié)果,具有更強的通用性。使用CNN模型識別多位字符驗證碼相比于傳統(tǒng)機器學(xué)習(xí)方法具有更高的準(zhǔn)確率和通用性。
關(guān)鍵詞:驗證碼識別;TensorFlow;CNN;端到端
中圖分類號:TP391;TP18 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2024)13-0065-05
Research on Captcha Recognition Based on TensorFlow and CNN Model
MA Kai, HE Xiaosong
(Chongqing Institute of Engineering, Chongqing 400056, China)
Abstract: Aiming at the problems of low overall accuracy and insufficient generalization ability of segmentation and recognition methods applied to multi character captcha in traditional Machine Learning, an efficient and universal recognition method is proposed. It designs an end-to-end character captcha recognition process based on CNN model, and uses TensorFlow framework to implement data training and effectiveness verification of the process. This method can efficiently recognize character captcha with an average accuracy of over 95%. By inputting the entire image and directly outputting the overall recognition result, it has stronger universality. It uses CNN models to recognize multi character captcha has higher accuracy and versatility compared to traditional Machine Learning methods.
Keywords: captcha recognition; TensorFlow; CNN; end-to-end
0 引 言
驗證碼是一種用于驗證用戶身份或確保某些在線操作或交互是由真實人類而不是自動化程序(如機器人或惡意軟件)執(zhí)行的安全措施,在各大網(wǎng)站中已得到廣泛應(yīng)用。除常見的字符型驗證碼外,還有短信驗證碼、滑塊驗證碼、算術(shù)運算驗證碼等[1],本文提出的識別算法中用到的是字符型驗證碼。
傳統(tǒng)的字符型驗證碼識別方法主要分為圖像預(yù)處理、字符分割和字符識別三個步驟[2]。對于只包含字符的驗證碼圖像,一般采用先逐個分離字符,然后利用機器學(xué)習(xí)方法對子圖像進(jìn)行正確分類,再組合后作為整體的預(yù)測結(jié)果,因此字符分割是影響識別效果的關(guān)鍵。汪志華[3]提出基于一種基于廣義霍夫變換的識別算法針對驗證碼圖片中出現(xiàn)的字符部分形變、字符粘連、字符旋轉(zhuǎn)進(jìn)行有效處理和識別,取得較好的效果。簡獻(xiàn)忠[4]等提出一種基于SOM(self-organizing maps)神經(jīng)網(wǎng)絡(luò)聚類與維諾圖(Voronoi)骨架形態(tài)分析相結(jié)合的算法,對各種字符粘連類型及字體傾斜扭曲的驗證碼均能準(zhǔn)確分割。Zhang等[5]提出了改進(jìn)的垂直投影方法應(yīng)用于驗證碼字符分割,針對不同的粘連類型字符提出針對性的分割方法,得到分割后的單字符圖像,然后通過程序?qū)嶒瀸崿F(xiàn)了上述提出的分割和識別算法,從而提高了驗證碼識別的準(zhǔn)確率。
近年來,深度學(xué)習(xí)技術(shù)取得了顯著進(jìn)展,不僅在語音和圖像識別領(lǐng)域取得了令人矚目的成就,也開始在驗證碼識別領(lǐng)域得到廣泛應(yīng)用。在這一領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)是應(yīng)用最廣泛的深度學(xué)習(xí)技術(shù)之一,因為它能夠直接從驗證碼圖像中學(xué)習(xí)深層次的特征,從而消除了傳統(tǒng)方法中字符分割可能引起信息丟失的問題。李建平等[6]提出基于PSO-CNN的驗證碼識別算法對數(shù)字與字母混合驗證碼識別準(zhǔn)確率可達(dá)96.26%。劉靜等[7]一種通過Gabor小波變換提取圖像的細(xì)節(jié)紋理特征作為CNN模型的第一層輸入,實現(xiàn)了Gabor特征與CNN模型相結(jié)合的圖像驗證碼識別方法,充分提取驗證碼圖像中的不同特征,實驗結(jié)果表明,此種改進(jìn)的CNN模型提高了模型識別率,具有實際意義。
本文研究了一種基于卷積神經(jīng)網(wǎng)絡(luò)的端對端驗證碼識別方法,在模型訓(xùn)練過程中,數(shù)據(jù)從輸入端經(jīng)過各層的處理后得出一個預(yù)測結(jié)果,這個預(yù)測結(jié)果會與實際結(jié)果進(jìn)行比較,產(chǎn)生一個誤差,這個誤差將用于反向傳播中神經(jīng)網(wǎng)絡(luò)每一層權(quán)重參數(shù)的自動調(diào)整,這種訓(xùn)練直到模型收斂或達(dá)到預(yù)期的效果時結(jié)束,從而避免傳統(tǒng)方法中因過多人工干預(yù)造成圖像信息被破壞導(dǎo)致的誤差累積問題。
1 主要技術(shù)實現(xiàn)
1.1 TensorFlow
TensorFlow是由谷歌大腦團(tuán)隊于2015年11月開發(fā)的深度學(xué)習(xí)框架,已廣泛應(yīng)用于圖像識別、圖片分類、自然語言處理等領(lǐng)域。其命名來源于本身的運行原理,其運行原理基于計算圖的概念,通過構(gòu)建計算圖,執(zhí)行數(shù)據(jù)流動,反向傳播優(yōu)化等步驟來進(jìn)行模型的訓(xùn)練和推斷[8]。它的強大之處在于其擁有一個全面而靈活的生態(tài)系統(tǒng),并提供多種抽象層級的API接口,同時通過底層優(yōu)化和GPU加速提供高性能計算,可以快速迭代和調(diào)試模型,使得研究人員和工程師可以用它來解決各種復(fù)雜的深度學(xué)習(xí)問題。TensorFlow2.x版本更加緊密地集成了Keras,相較于1.x版本嚴(yán)重依賴隱式全局命名空間且必須使用靜態(tài)計算圖的方式,它提供了更簡潔和用戶友好的接口,使構(gòu)建、訓(xùn)練和評估模型變得更容易[9]。
1.2 CNN模型
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)是一種在計算機視覺和圖像處理任務(wù)中廣泛應(yīng)用的深度學(xué)習(xí)模型[10]。它是一種專門用于處理具有網(wǎng)格結(jié)構(gòu)數(shù)據(jù)(如圖像)的神經(jīng)網(wǎng)絡(luò),基本結(jié)構(gòu)如圖1所示,輸入層輸入圖像信息,卷積層提取圖像的底層特征,降采樣層將數(shù)據(jù)維度減小并防止過擬合,全連接層匯總圖像的底層特征和信息,最后輸出則根據(jù)全連接層的信息得到概率最大的結(jié)果。常見的CNN模型包括LeNet、AlexNet、VGG、GoogLeNet、ResNet和MobileNet等[11]。CNN模型在計算機視覺領(lǐng)域取得了許多重要的突破,如圖像分類、目標(biāo)檢測、語義分割、人臉識別等任務(wù)。
2 實驗和結(jié)果分析
2.1 實驗流程設(shè)計
本實驗流程設(shè)計如圖2所示,通過程序自動生成或其他途徑獲取驗證碼樣本集,將樣本集劃分成訓(xùn)練集和測試集,先對驗證碼圖片預(yù)處理,如圖片灰度化、二值化和圖像去噪,然后將訓(xùn)練集中預(yù)處理好的圖片輸入搭建的網(wǎng)絡(luò)模型中,利用網(wǎng)絡(luò)的學(xué)習(xí)能力自動提取驗證碼字符的特征信息進(jìn)行訓(xùn)練,產(chǎn)生最優(yōu)模型參數(shù)進(jìn)行字符識別,最后通過訓(xùn)練好的模型預(yù)測測試集并統(tǒng)計模型識別率。與傳統(tǒng)方法流程相比,除去了字符分割環(huán)節(jié),避免了機器學(xué)習(xí)過程中的誤差累計問題。
2.2 數(shù)據(jù)獲取及預(yù)處理
2.2.1 數(shù)據(jù)獲取
本文所用數(shù)據(jù)集是通過調(diào)用Python第三方庫Captcha的方式生成字符型驗證碼樣本集。Captcha庫提供了一種快捷自動生成驗證碼圖像的方法,可以根據(jù)需要對驗證碼字符進(jìn)行設(shè)定,如字體、字符數(shù)量等,生成包括數(shù)字、字母和數(shù)字字母組合的驗證碼圖片,并在此過程中程序會自動為驗證碼添加隨機的背景干擾條和噪聲,字符會存在旋轉(zhuǎn)、變形和粘連的情況,提升了識別難KXrVPlCIcdEvRzAPEsn14g==度[1]。實驗選用數(shù)字加大小寫字母組合的方式生成4位字符的驗證碼數(shù)據(jù)集。分別制作61 000張,其中50 000張為訓(xùn)練集、10 000張測試集和1 000張驗證集。圖片文件命名的方式為:“字符組合.png”,方便后續(xù)的模型訓(xùn)練,樣例如圖3所示。
2.2.2 數(shù)據(jù)預(yù)處理
數(shù)據(jù)集預(yù)處理分為兩部分:圖片預(yù)處理和標(biāo)簽One-Hot編碼。在對驗證碼訓(xùn)練之前,需要對其進(jìn)行預(yù)處理以提高識別準(zhǔn)確性。預(yù)處理一般包括圖片灰度化、圖片二值化、圖像去噪。其中灰度化是將彩色圖片的R、G、B三通道轉(zhuǎn)換為單通道的灰度圖像,因為色彩對識別驗證碼用處不大,同時可降低了圖片維度,簡化了后續(xù)處理步驟;二值化是將圖像轉(zhuǎn)換為二值圖像,提高字符邊緣的清晰度;圖像降噪是通過濾波等方法去除可能干擾識別的圖像噪聲點,因為每一步的預(yù)處理過程可能會導(dǎo)致一些信息的丟失,因此實際操作中可選擇其中一項或多項步驟進(jìn)行預(yù)處理。此次實驗中預(yù)處理只選擇將圖片灰度化、二值化、降噪處理,效果如圖4所示。標(biāo)簽One-Hot編碼是指將驗證碼的幾個字符,每個字符均變換成獨熱編碼。例如本文所示的驗證碼字符種類為62個(10個數(shù)字以及26個大小寫英文字母),驗證碼包含了4個字符,處理流程先把每一個字符變成One-Hot編碼向量,即每62個0-1編碼里會有一個對應(yīng)位置的正例為1其余61個為0的向量,最后把4個字符的One-Hot編碼向量拼接成一行。因此每個字符的標(biāo)簽長度為62×4 = 248個。
2.3 模型網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計
實驗中識別模型使用卷積神經(jīng)網(wǎng)絡(luò),并采用遷移學(xué)習(xí)和多任務(wù)學(xué)習(xí)的思想,由深度學(xué)習(xí)框架TensorFlow實現(xiàn)。首先加載預(yù)訓(xùn)練的ResNet50模型作為特征提取器。該模型在ImageNet數(shù)據(jù)集上訓(xùn)練,能提取通用的圖像特征,然后將驗證碼圖片作為輸入,經(jīng)過ResNet50得到特征映射。添加全局平均池化層進(jìn)行降維。接下來采用多任務(wù)學(xué)習(xí)框架,因為驗證碼是4個字符,設(shè)計4個不同的分類器,每個專門識別1個字符。具體是在特征輸出上連接4個全連接層,對應(yīng)4個字符類別的預(yù)測。最后使用Keras的函數(shù)式API將上述組件連接起來,定義模型的輸入和4個輸出,構(gòu)建起端到端的訓(xùn)練網(wǎng)絡(luò)。編譯模型時,定義4個不同的Loss函數(shù)針對4個字符進(jìn)行優(yōu)化。這樣可以充分利用數(shù)據(jù)集,提升識別效果。網(wǎng)絡(luò)結(jié)構(gòu)及參數(shù)配置如圖5所示。
2.4 訓(xùn)練與評估
2.4.1 實驗軟硬件環(huán)境
實驗運行環(huán)境為Windows 10專業(yè)版,64位操作系統(tǒng),選用TensorFlow 2.6.2版本的深度學(xué)習(xí)開源框架,Python 3.6.3作為編程語言。硬件環(huán)境中CPU采用Intel(R) Core(TM) i7-10700,主頻2.90 GHz,內(nèi)存32.0 GB。
2.4.2 參數(shù)設(shè)置及模型訓(xùn)練
在構(gòu)建驗證碼預(yù)測模型的過程中,實驗參數(shù)設(shè)置如表1所示。
實驗為驗證碼的4個字符分別設(shè)計了4個不同的分類器,分別對應(yīng)4個字符類別的預(yù)測,使用交叉熵?fù)p失函數(shù)計算訓(xùn)練損失,并使用SGD優(yōu)化算法進(jìn)行優(yōu)化,使用EarlyStopping來控制模型訓(xùn)練的停止,連續(xù)6個周期val_loss都沒降下來就結(jié)束訓(xùn)練,ModelCheckpoint保存所有訓(xùn)練周期中val_loss最低的模型,ReduceLROnPlateau學(xué)習(xí)率調(diào)整策略,連續(xù)3個周期val_loss沒有下降時當(dāng)前學(xué)習(xí)率乘以0.1,30個epoch在batch_size為128的情況下需要40 mins左右。訓(xùn)練集和測試集在4個字符類別上的準(zhǔn)確率和損失值隨著迭代次數(shù)的變化如圖6所示。我們可以看到訓(xùn)練集的4個任務(wù)準(zhǔn)確率都已經(jīng)是1了,測試集的4個任務(wù)準(zhǔn)確率大約為0.99左右,所以真正的識別正確率大約是4個任務(wù)的正確率相乘約等于0.96。
2.4.3 實驗評估測試
模型訓(xùn)練完成后,利用驗證集對模型性能進(jìn)行評估。模型采用準(zhǔn)確率指標(biāo)來評估驗證碼的識別效果,準(zhǔn)確率的計算公式為:
需要注意的是正確識別是指統(tǒng)計結(jié)果中4個字符均識別正確才能認(rèn)為該驗證碼被正確識別。加載上一步訓(xùn)練過程中保存的模型結(jié)果,對驗證碼集中1 000張驗證碼與流程預(yù)處理后進(jìn)行預(yù)測,模型準(zhǔn)確率為95.6%。通過模型在驗證集上的評估和預(yù)測,可以全面的判斷模型性能,是否達(dá)到實用場景落地要求,還可以進(jìn)行錯誤分析,指導(dǎo)進(jìn)一步優(yōu)化。
3 結(jié) 論
本文通過卷積神經(jīng)網(wǎng)絡(luò)對驗證碼識別項目的實現(xiàn),包括:1)數(shù)據(jù)集準(zhǔn)備。生成大量驗證碼圖片數(shù)據(jù)。2)數(shù)據(jù)預(yù)處理。將圖片灰度化、二值化、降噪等處理。3)模型設(shè)計。構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)。4)模型訓(xùn)練。設(shè)定超參數(shù)、回調(diào)函數(shù)等。5)模型評估。計算準(zhǔn)確率。在此實踐的基礎(chǔ)上,仍然有可擴(kuò)展和優(yōu)化的展望空間,如用更大規(guī)模的數(shù)據(jù)集提升性能;嘗試不同的模型結(jié)構(gòu)(如VGG16、Xception等);使用GPU提高模型訓(xùn)練速度;與集成學(xué)習(xí)相結(jié)合提高模型魯棒性。
參考文獻(xiàn):
[1] 張淳一.基于卷積神經(jīng)網(wǎng)絡(luò)的字符型驗證碼識別算法研究 [D].徐州:中國礦業(yè)大學(xué),2022.
[2] 崔新,白培瑞,張策,等.一種基于端對端深度卷積神經(jīng)網(wǎng)絡(luò)的驗證碼識別方法 [J].山東科技大學(xué)學(xué)報:自然科學(xué)版,2020,39(2):111-117.
[3] 汪志華.基于廣義霍夫變換的粘連字符驗證碼的識別 [J].集美大學(xué)學(xué)報:自然科學(xué)版,2018,23(1):75-80.
[4] 簡獻(xiàn)忠,曹樹建,郭強.SOM聚類與Voronoi圖在驗證碼字符分割中的應(yīng)用 [J].計算機應(yīng)用研究,2015,32(9):2857-2861.
[5] ZHANG L L,XIE Y X,LUAN X D,et al. Captcha Automatic Segmentation and Recognition Based on Improved Vertical Projection [C]//2017 IEEE 9th International Conference on Communication Software and Networks (ICCSN).Guangzhou:IEEE,2017:1167-1172.
[6] 李建平,王釗.基于PSO-CNN的驗證碼識別算法研究 [J].計算機技術(shù)與發(fā)展,2022,32(9):51-55.
[7] 劉靜,張學(xué)謙,劉全明.混合Gabor的輕量級卷積神經(jīng)網(wǎng)絡(luò)的驗證碼識別研究 [J].信息網(wǎng)絡(luò)安全,2020,20(7):77-84.
[8] MATTMANN C. Machine Learning with TensorFlow, Second Edition [M].[S.I.]:Manning,2021.
[9] MARTíNEZ J. TensorFlow 2.0 Computer Vision Cookbook: Implement machine learning solutions to overcome various computer vision challenges [M].[S.I.]:Packt,2021.
[10] 張松蘭.基于卷積神經(jīng)網(wǎng)絡(luò)的圖像識別綜述 [J].西安航空學(xué)院學(xué)報,2023,41(1):74-81.
[11] 包俊,董亞超,劉宏哲.卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展綜述 [C]//中國計算機用戶協(xié)會網(wǎng)絡(luò)應(yīng)用分會2020年第二十四屆網(wǎng)絡(luò)新技術(shù)與應(yīng)用年會論文集.北京:北京聯(lián)合大學(xué)北京市信息服務(wù)工程重點實驗室,2020:16:21.
作者簡介:馬凱(1985—),男,漢族,湖北襄陽人,講師,本科,研究方向:數(shù)據(jù)采集、輿情監(jiān)控;賀曉松(1989—),男,漢族,湖北荊州人,講師,碩士,研究方向:大數(shù)據(jù)、機器學(xué)習(xí)、深度學(xué)習(xí)。