版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
數(shù)字驗證碼識別的設計與實現(xiàn)[摘要]數(shù)字驗證碼在安全方面起著十分大的用處,因此在很多網(wǎng)站都可以看到數(shù)字驗證碼的使用。如今互聯(lián)網(wǎng)的發(fā)展相當快速,緊隨著我們也就需要思考安全問題,隱私的泄露會或重或輕的影響用戶,而數(shù)字驗證碼作為互聯(lián)網(wǎng)安全的常用的屏障,可以讓互聯(lián)網(wǎng)生態(tài)環(huán)境更加健康便利且很好的保護用戶隱私。目前,在網(wǎng)站上中相對常用的是由數(shù)字、字母組成的數(shù)字驗證碼。本文針對粘連且存在干擾噪聲的數(shù)字驗證碼圖像識別性能欠佳的情況,通過比較各種識別數(shù)字驗證碼的方法,最終選擇使用KNN算法作為數(shù)字驗證碼字符識別方法,本課題對有粘連扭曲情況的數(shù)字驗證碼的識別進行設計和分析,過程主要是以下三步:預處理、匹配識別、分析識別率。圖片預處理過程采用了灰度化、二值化、降噪和分割,在分割圖片階段,可能出現(xiàn)檢測出四、三、二和一個字符的情況,分別采用不同的方法進行處理,再采用Python工具進行單字符匹配,最后通過KNN算法來識別匹配數(shù)字驗證碼,得到了高達94.4%的識別率,這說明采用該算法能很好的識別粘連扭曲的數(shù)字驗證碼圖片。[關鍵詞]驗證碼識別;KNN算法;驗證碼匹配;PythonDesignandImplementationofDigitalAuthenticationCodeRecognitionStudent:LiXinyu,CollegeofElectronicInformationInstructor:WangYuanmei,CollegeofElectronicInformation[Abstract]DigitalAuthenticationCode(DAC)playsaveryimportantroleinsecurity,soitcanbeusedinmanywebsites.WiththerapiddevelopmentoftheInternet,wealsoneedtothinkaboutsecurityissues.Theleakofprivacywillaffectusersmoreorless.DigitalAuthenticationCode,asacommonbarriertoInternetsecurity,canmaketheInternetecologicalenvironmenthealthier,moreconvenientandbetterprotectuserprivacy.Atpresent,therelativelycommondigitalverificationcodeonwebsitesiscomposedofnumbersandletters.Inviewofthepoorperformanceofimagerecognitionofdigitalverificationcodeswithglueandinterferencenoise,thispaperchoosesKNNalgorithmasthecharacterrecognitionmethodofdigitalverificationcodesbycomparingvariousmethodsofidentifyingdigitalverificationcodes.Thistopicdesignsandanalyzestherecognitionofdigitalverificationcodeswithgluedistortion.Theprocessmainlyconsistsofthreesteps:preprocessing,Matchrecognition,analyzerecognitionrate.Picturepreprocessingprocessusesgrayscale,binarization,noisereductionandsegmentation.Inthephaseofimagesegmentation,four,three,twoandonecharactersmaybedetected.Differentmethodsareusedtoprocessthem,thensinglecharactermatchingisperformedwithPythontools.Finally,matchingnumberverificationcodesarerecognizedbyKNNalgorithm,andtherecognitionrateisupto94.4%.Thisdemonstratesthatthealgorithmcanrecognizethedistorteddigitalauthenticationcodepictureverywell.[Keywords]Verificationcodeidentification;KNNrecognition;VerificationCodeMatching;Python第一章緒論1.1研究目的及意義當前,隨著互聯(lián)網(wǎng)技術的不斷創(chuàng)新研發(fā),我國科技技術飛速發(fā)展,各類新興產(chǎn)品應運而生,在不斷豐富人們生活的同時,提高了人們生活質(zhì)量與生活水平。當前,隨著網(wǎng)絡技術不斷的應用與普及,各類識別技術運用其中,極大的提高了網(wǎng)絡使用的安全性與便捷性,當前識別技術應用較為廣泛,如語音識別,圖像識別,射頻識別,數(shù)字驗證碼識別等,對我國軍事,刑偵,醫(yī)學等各領域產(chǎn)生了積極的貢獻與作用。在本文中,主要對數(shù)字驗證碼識別技術進行研究,其作為識別技術中的一種,在當前電子設備廣泛應用的背景下,能夠有效完成多類復雜運算,具有較高的準確性與高效性。在當前互聯(lián)網(wǎng)時代背景下,大數(shù)據(jù)發(fā)展日益加快,需求增多,因此,為有效提高數(shù)據(jù)的準確性與安全性,保障用戶權益,識別數(shù)字驗證碼技術在其中扮演著重要角色。同時,與語言文字等相比,我們在現(xiàn)實生活中對數(shù)字的精準度有著更高要求,究其原因,主要在于一旦其中任意數(shù)字出現(xiàn)錯誤,便很可能造成重大失誤,如金融,快遞,財務等對數(shù)據(jù)的準確性有著較高要求。總而言之,為有效提高數(shù)據(jù)的精準性與安全性,數(shù)字驗證碼識別技術研究意義重大。而隨著互聯(lián)網(wǎng)的不斷發(fā)展,自動化程序日益增多,對互聯(lián)網(wǎng)的安全性所造成威脅逐漸增加,一旦網(wǎng)站被自動化程序所破解,很容易造成網(wǎng)站用戶信息泄露,資源非法使用等各類問題,嚴重時甚至造成系統(tǒng)崩潰,對網(wǎng)站的推廣與應用帶來一系列不利影響。為有效避免或減少該類問題的發(fā)生,通過數(shù)字驗證碼技術,實現(xiàn)對系統(tǒng)網(wǎng)站使用用戶合法性的驗證,進而提高系統(tǒng)網(wǎng)站的安全性。一般而言,數(shù)字驗證碼技術較多應用于系統(tǒng)網(wǎng)站的注冊,登錄,以及發(fā)帖頁面,避免出現(xiàn)自動化程序非法注冊,登錄以及使用該系統(tǒng)資源,對網(wǎng)站進行攻擊,有效提高了系統(tǒng)的安全性以及抗攻擊力。驗證碼,即CAPTCHA,其相關概念于2000年被首次公示,其本質(zhì)上作為一種全自動圖靈測試的程序,主要用于對人類使用系統(tǒng)以及計算機自動化程序使用系統(tǒng)的識別。驗證碼在系統(tǒng)使用中,主要由計算機程序自動產(chǎn)生,進而由人類用戶對驗證碼進行手動輸入或語音輸入,根據(jù)驗證碼輸入的準確性,進而對系統(tǒng)用戶進行合法性判斷,究其原因,主要在于驗證碼的輸入大多數(shù)人類能夠準確進行,而自動化程序大多數(shù)不具有輸入驗證碼的功能,因此,能夠有效實現(xiàn)對系統(tǒng)用戶合法性的判定。同時,通過對驗證碼識別技術的運用,能夠有效避免網(wǎng)站系統(tǒng)被暴力性攻擊,提高系統(tǒng)安全性,避免系統(tǒng)用戶相關信息泄漏,對用戶的安全性造成一定威脅。另外,驗證碼識別技術還可以防止網(wǎng)站出現(xiàn)惡意刷票,論壇灌水等問題,在現(xiàn)實生活中被廣泛運用。1.2研究歷史及發(fā)展現(xiàn)狀在國外,數(shù)字驗證碼的識別研究較早,是一個熱門的研究領域。1990年YannLecun等人使用反向傳播神經(jīng)網(wǎng)絡(BP_NN)設計了一種識別手寫數(shù)字的方法,其誤識率1%,拒識率為9%,識別率達90%。REF_Ref72078900\r\h[1]20世紀90年代末期,以M.A.Hearst為代表的學者研究出支持向量機算法,這是種基于統(tǒng)計學的回歸算法以及分類算法,該類識別技術在運用中具有較好的識別效果,為識別技術的推廣與應用打下良好的基礎。21世紀初期,以A.Bellili為代表的學者研究出MLP-SVM算法,該類算法能夠有效達到對數(shù)字的無約束識別效果,識別效果顯著,可高達98%左右,應用較為廣泛。同一年,Cheng-LinLiu等人通過研究,實現(xiàn)了對圖像數(shù)據(jù)的采集與識別,主要借助圖像的特征以及特征分類等技術,分類器則采用了K最近鄰算法(K-NearestNeighbor,KNN)以及支持向量機等算法,有效提高了圖像數(shù)據(jù)識別的準確性有高效性。以Cire?anDC為代表的學者提出借助反向傳播,能夠有效實現(xiàn)對普通多層感知器識別效果的提高,識別效果十分顯著,可達到99%的識別效果,有效促進了識別技術的發(fā)展與推廣。以MORI為代表的學者主要借助形狀上下文的研究辦法,實現(xiàn)了對兩種驗證碼的研究,一種是GIMPY驗證碼,另外一種是EZ—GIMPY驗證碼。相比于國外對數(shù)字驗證碼識別技術的研究,我國研究起步較晚,相關理論與技術不夠成熟與完善,但隨著我國科技技術的發(fā)展,以及對數(shù)字識別技術的逐漸重視,研究逐漸加快。以胡君萍為代表的學者研究出KNN數(shù)字識別器,借助主成分分析法實現(xiàn)了對數(shù)字維度的有效減少,進一步提高了數(shù)字識別的效率。張海生基于神經(jīng)網(wǎng)絡對數(shù)字驗證碼進行識別研究。借助深度置信網(wǎng)絡,我國以宋曉茹為代表的學者,實現(xiàn)了對數(shù)字識別算法的研究。我國以閔鋒為代表的學者,對數(shù)字驗證碼識別技術的研究,主要分為以下三步:第一,借助主成分分析法實現(xiàn)對數(shù)字維度的降低;第二,實施投影;第三借助svm算法實現(xiàn)對數(shù)據(jù)的分類,通過研究發(fā)現(xiàn)該類數(shù)字驗證碼識別技術有較好的識別效果以及識別效率,得到廣泛的應用與推廣。以曾文獻為代表的學者以MNIST數(shù)據(jù)為被識別對象,借助卷積神經(jīng)網(wǎng)絡以及自編碼器實現(xiàn)對數(shù)據(jù)的識別,識別效果顯著,高達99%,為我國數(shù)字驗證碼識別技術的發(fā)展與應用打下堅實基礎。]徐文進等人基于KNN算法的改進K-means算法進行數(shù)字識別。[15]1.3課題研究內(nèi)容本課題分析比較了以上幾種識別方法,最終選取KNN算法作為數(shù)字驗證碼識別研究的方法。KNN算法本質(zhì)上作為一種人工智能算法,主要通過對數(shù)字特征的統(tǒng)計,并在此基礎上,進行數(shù)字分類的一種算法,該算法操作簡單,便捷,適用性強,應用較為廣泛。在本文中借助KNN算法實現(xiàn)對數(shù)字驗證碼技術的研究,其中對于編程語言的選擇主要是Python,對于Python而言,其在運行過程中主要借助編譯器實現(xiàn),能夠高速完成人工智能算法以及機器學習,滿足本文中對自動化程序以及人工操作系統(tǒng)的識別。在本文中,對數(shù)字驗證碼圖像的研究,主要用于解決圖像中字符粘連扭曲以及噪聲較多的問題,有效提高對圖像數(shù)字驗證碼識別效果。通過Python進行圖片預處理和分割粘連字符后,基于KNN算法識別驗證碼圖像中包含有多個字母,字符以及數(shù)字之間相互粘連的驗證碼,并對其開展測試識別以及網(wǎng)絡訓練,進而分析出識別率并用Python界面展示出識別結果。本文的主要框架結果梳理如下:第一章作為本課題的前言介紹了數(shù)字驗證碼識別的研究目的和意義、數(shù)字驗證碼的研究歷史及發(fā)展現(xiàn)狀。第二章介紹了本課題涉及的相關圖像處理技術,分析比較了幾種識別方法并進行方案選擇,并闡明所采用的方案的特點。第三章介紹了數(shù)字驗證碼識別的設計實現(xiàn)過程,包括各功能模塊的詳細設計原理及相關程序的詳細說明。第四章是對數(shù)字驗證碼識別的設計過程的結果分析。第五章是對數(shù)字驗證碼識別的研究工作進行歸納和總結。第二章數(shù)字驗證碼識別的相關技術對于數(shù)字驗證碼而言,其對圖像的識別主要包括三大步驟:第一是對圖像的預處理操作,實現(xiàn)對圖像的灰度化、降噪、二值化等;第二是對數(shù)字驗證碼的分割,該環(huán)節(jié)在整個數(shù)字驗證碼識別過程中扮演著重要角色,決定著識別效果的高低,究其原因主要在于數(shù)字驗證碼的不同性特征,即不同的數(shù)字驗證碼,其粘連性,扭曲性程度有所不同,因此需對其進行不同分割,在一定程度上造成對數(shù)字驗證碼分割效果的不同;第三,是對數(shù)字驗證碼的識別。目前對驗證碼圖像的識別方法主要有三種:模板匹配分類算法、形狀上下文分類算法、人工智能領域的分類算法(KNN算法、神經(jīng)網(wǎng)絡算法)。2.1圖片預處理圖片預處理作為數(shù)字驗證碼識別的首要步驟,首先對圖像格式進行檢測,通過對圖像格式的判定,進而將其轉(zhuǎn)換成可識別格式,并進一步對圖像進行灰度化,降噪,以及二值化等處理。當前,在許多系統(tǒng)網(wǎng)站中,對于數(shù)字驗證碼的運用較多為彩色,因此為有效提高對數(shù)字驗證碼的識別效果,提高識別效率,一般將彩色的數(shù)字驗證碼轉(zhuǎn)變?yōu)楹诎咨臄?shù)字驗證碼,大大減少了復雜程度,便于后續(xù)操作。因此,在該圖片預處理階段的目標是除去不必要信息,包括圖像的背景,像素,噪聲等信息,減少數(shù)字驗證碼識別的程序與復雜性,實現(xiàn)對圖像的二進制點陣轉(zhuǎn)換,便于下一步操作。2.1.1灰度化彩色圖像,顧名思義,又可稱其為三通道圖像,主要由R、G、B共同組成圖像的像素。因此在對彩色圖像進行灰度化處理時,需分別處理R,G,B三通道,在該處理模式下,會耗費很多時間消耗多余的資源。鑒于此,為有效提高對彩色圖像的灰度化處理效果,提高對數(shù)字驗證碼識別的效率,減少處理數(shù)據(jù),對彩色圖像的灰度化處理需將三通道的彩色圖像進行轉(zhuǎn)換,將其轉(zhuǎn)換為單通道的灰度圖像。對于RGB模型而言,如果R、G、B三通道具有相同的值,即呈現(xiàn)為灰度,灰度值即代表著三通道的值。對于灰度圖像而言,每個像素處于0或255的灰度范圍內(nèi),當三個通道值不相同時,主要采用以下彩色圖像灰度處理法。1.單分量法在不同的圖像中,三個通道的值分別代表著相應的灰度值。因此,在對彩色圖像進行灰度化處理時,以三個通道中任一通道值作為處理對象,具體公式如下所示:f(x,y)=R(x,y)f(x,y)=G(x,y)(1)f(x,y)=B(x,y)其中f(x,y)為灰度化后的灰度圖像在位置(x,y)的像素值,R(x,y),G(x,y),B(x,y)代表著R、G、B三通道的各個值。2.最大化處理法:首先對R,G,B三通道的最大值進行計算,即代表著圖像灰度化后的最大值,具體公式如下所示:f(x,y)=max((R(x,y),G(x,y),B(x,y))(2)3.求取平均值法:對R、G、B三通道的值分別進行計算,在計算結果得出后,求取平均值,即代表著彩色圖像的灰度值,具體公式如下所示:f(x,y)=(R(x,y)+G(x,y)+B(x,y))/3(3)4.加權平均法在對彩色圖像灰度化處理中,單分量法,最大化法以及平均值法的具體運用較為簡單,對三通道的處理具有統(tǒng)一性,操作較為簡單,便捷。但不同的圖像,其特征也有所不同,分量比重也有所區(qū)別,因此根據(jù)三通道分量比重,需對其進行相應的權值分配,并對其進行加權計算,并進一步獲取均值,即灰度值。即按照下列公式對要處理的圖像進行灰度化:f(x,y)=0.30R(x,y)+0.59G(x,y)+0.11B(x,y)(4)在對彩色圖像灰度化處理法中,加權平均法在四類彩色圖像灰度處理法中應用最為廣泛,所得結果更準確。所以進行圖像灰度化時本課題采用了OpenCV中的BGR2GRAY方法,因為它的轉(zhuǎn)換原理與加權平均法的公式相似,即GRAY=B*0.114+G*0.587+R*0.299(5)2.1.2二值化在圖像的預處理中,二值化代表著對圖像灰度值數(shù)據(jù)的處理,將其轉(zhuǎn)換為灰度值0~255的范圍內(nèi),圖片由彩色轉(zhuǎn)換為黑白,便于圖像的下一步處理與識別。通過圖像二值化處理,實現(xiàn)對圖像局部特征以及整體特征的有效顯現(xiàn)。在對圖像進行預處理的整個流程中,二值化在其中扮演著重要角色,實現(xiàn)對圖像的有效處理,將獲取相應的二值化圖像,為下一步圖像處理打下堅實基礎。通過圖像的二值化處理,實現(xiàn)圖像像素灰度值的轉(zhuǎn)換,即圖像的灰度值始終處于0或255的范圍內(nèi),與像素的其他等級的值無關,這樣會使過程更加容易,且減小了信息的處理流程與復雜性。同時對于圖像二值化處理,為保證其二值化處理效果,需保證圖像的邊緣處于封閉以及連通狀態(tài)。當圖像灰度值大于閥值時,以255進行代表,且該類像素歸為特定物體,當圖像灰度值未在物體區(qū)域內(nèi)時,其灰度值以零進行代表。閾值主要分為以下兩類:1.對于全局閥值而言,其主要代表在被預處理圖像中,該圖像包含有多類信息,包括背景,噪聲以及目標物體等,在圖像中需對目標物體進行提取,在現(xiàn)實生活中,使用較多的方法為閥值的確定,將該閥值設為T,進而利用該閥值實現(xiàn)對圖像數(shù)據(jù)的分類,產(chǎn)生兩大像素群:一類<T,另一類>T。該方法在對圖像灰度處理中,應用較為廣泛,即為圖像二值化處理。2.對于局部閥值而言,其主要代表著在被預處理圖像中,各個區(qū)域的亮度有所不同。因此對于圖像的預處理,需根據(jù)各個區(qū)域進行不同閥值的設定,進而提高圖像預處理的效果。在本文中,主要運用全局閾值,即二值化處理,因其用于數(shù)字驗證碼圖片二值化時會更加有鮮明的對比且直觀。Python-OpenCV中提供閾值(threshold)函數(shù):threshold(src,thresh,maxval,type,dst=None)(6)
Method閾值類型一般分為五種:
cv2.THRESH_BINARY——大于閾值的部分像素值變?yōu)樽畲笾担渌優(yōu)?
cv2.THRESH_BINARY_INV——大于閾值的部分變?yōu)?,其他部分變?yōu)樽畲笾?/p>
cv2.THRESH_TRUNC——大于閾值的部分變?yōu)殚撝?,其余部分不?/p>
cv2.THRESH_TOZERO——大于閾值的部分不變,其余部分變?yōu)?
cv2.THRESH_TOZERO_INV——大于閾值的部分變?yōu)?,其余部分不變這里本課題采用OpenCV中的cv2.THRESH_BINARY_INV方法,即自定義閾值為N,像素值大于N的部分是黑色,小于N的部分是白色。使二值化后的數(shù)字驗證碼圖片中的字符更加直觀。2.1.3降噪在對圖像進行二值化處理后,會使圖像產(chǎn)生一定的噪聲以及圖像像素中含有相應的分割字符,在一定程度上會造成后期對數(shù)字驗證碼的識別效果。因此為有效提高后期對數(shù)字驗證碼的分割效果,需對圖像進行相應的降噪處理,減少因圖像傳輸或量化等處理過程中所產(chǎn)生的噪音。一般而言,噪聲主要包括4類:第一類是乘性噪聲,第二類是高斯噪聲,第三類是泊松噪聲,第四類是椒鹽噪聲。因為二值化后的圖像為二維元組,所以可應用OpenCV中的cv2.filter2D進行濾波處理,即利用內(nèi)核實現(xiàn)對圖像的卷積運算。而高斯模糊本質(zhì)上是低通濾波器,實現(xiàn)對低頻的有效通行,限制或減弱高頻,對于輸出圖像而言,其像素點代表著其對應像素點以及周圍像素點的加權和,原理并不復雜,就是用高斯分布權值矩陣與原始圖像矩陣做卷積運算。所以本課題采用高斯模糊對圖片進行降噪。高斯模糊的本質(zhì)是用高斯核和圖像做卷積,就是去除一些斑斑點點的。因為二值化難免不夠完美,去噪能使得二值化結果更好。2.1.4圖片分割圖像分割是數(shù)字驗證碼識別過程中很重要的一步,因為本課題是在Python軟件上設計實現(xiàn)的,所以這里用到的技術是opencv,opencv中可以基于閾值進行圖像分割也可以基于邊緣進行圖像分割。基于閾值的圖像分割基于閾值實現(xiàn)對圖像分割的預處理,該方法的運用主要借助圖像像素特征,實現(xiàn)對分割閥值的確定,并通過閥值以及特征值兩者之間的對比,實現(xiàn)對圖像像素的分類。一般而言,對于閥值的確定,主要以像素灰度值作為判斷依據(jù)。根據(jù)灰度級實現(xiàn)對像素集合的劃分,進而獲取相應的子集合,并在該子集合中,與圖像各個區(qū)域相對應,在同一子集合中,各區(qū)域具有一定的一致性,進而實現(xiàn)圖像的分割。該種圖像分割法,運用較為廣泛,其分割效率高,效果好,具有較穩(wěn)性能,在圖像預處理中扮演著重要角色。同時,該種圖像分割法能夠有效應用于不同灰度級別的圖像,即圖像中目標與背景處于不同區(qū)域,能夠有效實現(xiàn)對目標物的提取,操作簡單便捷,流程簡化,是圖像預處理中分析圖像,獲取特征以及識別的重要環(huán)節(jié)?;谶吘壍膱D像分割邊緣,主要是指結構或灰度級出現(xiàn)明顯突變的區(qū)域,實現(xiàn)了不同區(qū)域的有效劃分。對于圖像而言,其具有不同的灰度,邊緣特征較為明顯,進而能夠有效實現(xiàn)對圖像的分割。邊緣檢測的結果是一個個的點,并不能作為圖像分割的結果,必須采用進一步的處理。OpenCV中,可在圖像的邊緣檢測之后,使用findContours尋找到輪廓。即基于輪廓進行圖像分割。本課題研究的對象是數(shù)字驗證碼,該驗證碼由簡單的字母和數(shù)字組成,字母和數(shù)字的輪廓差別較大,所以本課題選擇采用更直觀的方法,即用opencv基于邊緣實現(xiàn)圖像分割。2.2字符識別方法2.2.1模板匹配分類算法對于模板匹配而言,顧名思義主要是指在圖像模板與圖像中,尋找相似區(qū)域的一種方法。對于模板匹配算法而言,其具體運用主要通過對模板庫的建立,實現(xiàn)對被匹配圖像和模板庫圖像兩者之間的對比,進而根據(jù)模板庫圖像尋找最匹配圖像的一種方法。對于文本驗證碼而言,當其組成成分數(shù)字以及字母形狀和大小不變時,便可借助模型匹配分類算法,實現(xiàn)對驗證碼的識別。對于驗證碼模板庫的建立,首先需對驗證碼相關字符進行統(tǒng)計,對數(shù)字與字母的形狀和大小進行搜集確定,進而確定相應的圖像模板,組成相應的模板庫。對數(shù)字驗證碼進行識別前,數(shù)字驗證碼通過預處理,形成單一字符,模板匹配分類算法通過對圖像特征的提取,并與模板庫進行相應對比,尋找匹配圖像,進而得出驗證碼的識別結果。對于模板匹配分類算法而言,其運用范圍較窄,具有一定的局限性,對于存在粘連,扭曲以及噪聲等問題的數(shù)字驗證碼,識別效果較差,僅能對固定形狀和大小的數(shù)字以及字母所組合而成的數(shù)字驗證碼進行相應識別,未能得到廣泛應用與推廣。2.2.2形狀上下文分類算法對于形狀上下文分類算法而言,其于2002年被首次提出與運用,其在具體運用中主要借助對圖像輪廓樣本點的識別與采集,實現(xiàn)對數(shù)字驗證碼的識別,因此,在借助形狀上下文分類算法實現(xiàn)對圖像的識別時,對圖像的預處理主要包括圖像邊緣采樣以及提取等工作,進而獲得所提取圖像形狀的點集合。一般主要借助向量集合進行呈現(xiàn)。形狀上下文算法充分抓住了識別對象的空間信息,對于非剛性物體而言,其在匹配中,魯棒性特征較為明顯。該算法與模板匹配分類算法具有一定的相似性,均需要對模板庫進行建立,進而通過被匹配對象與模板代價矩陣之間的對比實現(xiàn)對數(shù)字字符的識別,兩者之間代價越小,代表著被匹配對象與模板對象之間具有較高的相似度。該方法在具體運用中能夠較強的穩(wěn)定性,應用較為廣泛。但是對于有背景、噪聲點過多的情況,匹配效果很不好。2.2.3人工智能領域的分類算法1.KNN分類算法對于KNN法而言,又可稱其為k最近鄰法,其相關理論與技術已較為成熟。KNN算法對數(shù)字驗證碼進行匹配識別,也就是根據(jù)測試數(shù)據(jù)與每個訓練集數(shù)據(jù)距離的大小來判斷該測試數(shù)據(jù)分屬哪個類別——前提是有一堆已經(jīng)注明好它是哪個數(shù)字的圖片(這一堆圖片組成訓練集,也叫比較集、樣本空間)。對于KNN算法而言,主要包括三項指標數(shù)據(jù):第一,距離,通過被測試對象與模板,對象之間距離的計算,獲取距離數(shù)據(jù);第二,訓練集的確定,訓練集主要作為被測試對象的模板集;第三k的大小的確定,根據(jù)距離的遠近,對K個訓練對象進行確定,并進行分類,最后進行相應測試。圖1KNN算法識別流程對于KNN分類算法而言,其主要通過被測試對象與訓練集數(shù)據(jù)的對比,并根據(jù)兩者之間距離的大小對被測試對象進行分類的一種算法。該算法在一定程度上能夠有效解決實驗樣本不均的問題,根據(jù)被測試對象類別進行判斷識別。該方法操作簡單便捷,具有簡單流程。2.神經(jīng)網(wǎng)絡①人工神經(jīng)網(wǎng)絡人工神經(jīng)網(wǎng)絡本質(zhì)上作為一種數(shù)字運算模型,主要通過對人類大腦的模仿,借助神經(jīng)突出,實現(xiàn)對信息的處理與傳遞,人工神經(jīng)網(wǎng)絡于1943被首次提出,一經(jīng)問世,引起廣大學者的關注與重視。隨著不斷的研究和發(fā)展,人工神經(jīng)網(wǎng)絡被廣泛應用于各個領域,有效解決了多種問題,如生物,醫(yī)學,經(jīng)濟,金融,模式識別等各個領域。對于人工神經(jīng)網(wǎng)絡而言,其核心組成主要包括激勵函數(shù),網(wǎng)絡模型結構等。其中,激勵函數(shù),主要是指神經(jīng)網(wǎng)絡中大量節(jié)點以及節(jié)點之間的連接構成的輸出函數(shù)。②卷積神經(jīng)網(wǎng)絡CNN相比于人工神經(jīng)網(wǎng)絡,卷積神經(jīng)網(wǎng)絡擁有更強的網(wǎng)絡稀疏性和參數(shù)共享性。CNN通常由輸入層,隱藏層,輸出層構成,其中隱藏層中常見的有卷積層,池化層和全連接層。其常見的架構模式為一個或幾個卷積操作后跟著一個池化操作,以此為一個單元,重復數(shù)次。隨后是若干全連接層,最后常使用softmax函數(shù)來處理輸出。相較于單純使用全連接層建構的神經(jīng)網(wǎng)絡相比,在提升性能的同時,大量減少了參數(shù)量,降低了計算成本。CNN識別驗證碼不同于將圖片進行分割等處理的識別方法,而是直接對整個圖片進行學習。因此只要驗證碼的風格與原樣本不同時,識別準確率就比較低。對于卷積神經(jīng)網(wǎng)絡全連接層而言,其輸入的大小是固定不變的的,在該種情況下,若輸入的向量維數(shù)發(fā)生變化,便代表著其權值參數(shù)發(fā)生變化,使得網(wǎng)絡出現(xiàn)動態(tài)變化問題,進而無法達到預期效果器。所以,即使是同樣的驗證碼如果改變了圖片的大小,程序就會報錯。卷積神經(jīng)網(wǎng)絡由多層網(wǎng)絡結構組成,特別適合圖像識別等任務,但缺點是需要極大量的訓練數(shù)據(jù)集。本課題研究的對象是由字母和數(shù)字組成的驗證碼,相鄰字符之間的重疊部分可以忽略不計,訓練集數(shù)量大概是800個。人工智能領域的分類算法是如今最常用的算法,神經(jīng)網(wǎng)絡算法需要極大量的訓練集,且要通過一個或多個卷積層和頂端的全連通層(對應經(jīng)典的神經(jīng)網(wǎng)絡)組成來對圖像識別,相對來說程序更多更復雜,這里本課題選用了程序更簡單且識別率也不錯的KNN算法,KNN算法簡單、有效,重新訓練的代價較低,對于本課題研究的數(shù)字驗證碼來說,KNN可以說是一種最直接的用來分類未知數(shù)據(jù)的方法,較其他方法更為適合,且800張訓練集圖片也能滿足該算法的需要。研究過程是:把Python作為實現(xiàn)軟件,用cv2庫實現(xiàn)數(shù)字驗證碼圖片的預處理,再用opencv基于邊緣檢測后通過輪廓進行圖片分割獲得單字符,將單字符進行對應信息的標注,最后用KNN算法進行數(shù)字驗證碼的識別。第三章數(shù)字驗證碼識別的設計實現(xiàn)3.1數(shù)字驗證碼識別的界面對于PIL而言,其主要作為Python的第三方圖像處理庫運用,因圖像處理效果好,效率高,功能豐富,應用較為廣泛,得到大多數(shù)用戶的認可。Python創(chuàng)立于20世紀90年代初,相關理論與技術已較為成熟,因其操作簡單,易學,效率高以及可移植性等特征,得到廣泛運用。隨著科技技術的不斷創(chuàng)新和發(fā)展,PIL版本逐漸升級,功能十分強大。PIL主要用于對圖像的處理,具體功能主要可分為以下三類:第一,圖像展示功能。通過PIL能夠有效實現(xiàn)對圖像的展示,包括多個接口,如BitmapImage,GUI接口等;第二,圖像處理功能。通過PIL,能夠有效實現(xiàn)對圖像點的處理,圖像旋轉(zhuǎn)以及轉(zhuǎn)換圖像顏色空間等,功能十分強大,在我國圖像處理領域中扮演著重要角色;第三,圖像歸檔功能,通過PIL,能夠有效實現(xiàn)對圖像的歸檔處理,以及圖像打印,格式修改,圖像標注等。另外,通過PIL能夠有效實現(xiàn)對圖像的統(tǒng)計分析以及對比度調(diào)整等。這里本課題要搭建一個簡單的顯示數(shù)字驗證碼識別結果的系統(tǒng)界面,所以這里采用了Pythonimagelibrary中的imagedraw模塊功能,通過該模塊,有效實現(xiàn)了對2D圖像的制作。同時,通過該模塊,可建立新圖像或?qū)σ延袌D像進行編輯,形成所需圖像,滿足數(shù)字驗證碼識別所需。3.2數(shù)字驗證碼識別的實現(xiàn)驗證碼自動識別算法整體過程可分為3大模塊:1)圖片預處理;2)圖片字符分割;3)字符匹配識別。其中,識別過程中又包含建立模板庫和字符識別2個過程。圖2描述了整個數(shù)字驗證碼識別設計的過程。圖2識別的設計過程3.2.1數(shù)字驗證碼的圖片預處理圖3為要識別的數(shù)字驗證碼原始圖片:圖3數(shù)字驗證碼原始圖片從圖3中可以很明顯的看到,圖中的字符有扭曲變換的現(xiàn)象。再仔細觀察,還可以發(fā)現(xiàn)圖片中間的部分出現(xiàn)了一些顆粒化的形狀,也就是噪聲。為了讓數(shù)字驗證碼識別過程更加簡單要進行圖片預處理,通過圖片灰度化、二值化、降噪再二值化,得到易于系統(tǒng)分割的圖片。用Python讀取數(shù)字驗證碼圖片,并將圖片轉(zhuǎn)成灰度圖,經(jīng)過cv2庫的處理,彩色圖片變成了圖4所示的灰度圖:圖4灰度化后的圖片將圖片做二值化處理可得到像素點值只有0或255的二維元組圖片,減少數(shù)據(jù)量便于后續(xù)分割和識別,這里本課題采用了自定義閾值的方法,將閥值設定為127,判斷圖像的像素值是否大于127,若>127,則被二值化處理后的圖像像素點值為0,通過黑色呈現(xiàn),若<127時,則被二值化處理后的像素點值為255,通過白色呈現(xiàn),具體如圖5所示:圖5二值化后的圖片從二值化后的圖片上可以看出來有很明顯的斑點,說明圖片預處理到這里還沒有完成,還需要處理圖片中的噪聲,本課題用高斯模糊來對圖片進行降噪。經(jīng)過降噪處理后的圖片如圖6:圖6降噪后的圖片觀察經(jīng)過降噪處理后的圖片,可以看出來有一些顆粒化的噪聲被平滑掉了,之前圖片上的斑點也變得模糊了。但是降噪后的圖片相比之前也變得更模糊了,為了便于之后對圖片的分割,對圖片再做一輪二值化處理,得到僅有像素值為0和255的黑白清晰圖片。即經(jīng)過第二次二值化處理后得到了圖7:圖7第二次二值化后的圖片上述用cv2庫進行的圖像預處理的相關功能程序如下:#用來處理圖片數(shù)據(jù)集。灰度化、二值化和降噪
defprocess_im(im):
rows,cols,ch=im.shape
#轉(zhuǎn)為灰度圖
im_gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
#二值化,就是黑白圖。字符變成白色的,背景為黑色
ret,im_inv=cv2.threshold(im_gray,127,255,cv2.THRESH_BINARY_INV)
#應用高斯模糊對圖片進行降噪。高斯模糊的本質(zhì)是用高斯核和圖像做卷積。就是去除一些斑斑點點的。因為二值化難免不夠完美,去噪使得二值化結果更好
kernel=1/16*np.array([[1,2,1],[2,4,2],[1,2,1]])
im_blur=cv2.filter2D(im_inv,-1,kernel)
#再進行一次二值化。
ret,im_res=cv2.threshold(im_blur,127,255,cv2.THRESH_BINARY)
returnim_res圖片分割是為了分割出數(shù)字驗證碼圖片中的單字符,本課題在這一模塊的目標是得到經(jīng)過圖片預處理后的單字符圖片。本課題采用基于邊緣進行分割的方法,opencv中正好有很簡便的方法可以檢測圖片中字符的輪廓,opencv的findContours方法可以將圖片中的字符輪廓用矩形框框起來,這與本課題要達到的效果正好符合,因為本課題處理的對象是包含字母和數(shù)字的復雜數(shù)字驗證碼,而正常的字母和數(shù)字符號都是獨立的,用矩形框也能很好的框住。用該方法處理字符不粘連扭曲的數(shù)字驗證碼圖片的效果如圖8:圖8正常分割的圖片從圖中可以觀察到,每個字符都可以被檢測出來,所以這種情況可以正常分割4個字符。這一步的功能模塊代碼為:#定義函數(shù)get_rect_box,目的在于獲得切割圖片字符位置和寬度
defget_rect_box(contours):
#定義ws和valid_contours數(shù)組,用來存放圖片寬度和訓練數(shù)據(jù)集中的圖片。如果分割錯誤的話需要重新分割
ws=[]
valid_contours=[]
forcontourincontours:
#畫矩形用來框住單個字符,x,y,w,h四個參數(shù)分別是該框子的x,y坐標和長寬。因
x,y,w,h=cv2.boundingRect(contour)#計算圖像一系列點的外部矩形邊界
ifw<7:
continue
valid_contours.append(contour)
ws.append(w)
#w_min是二值化白色區(qū)域最小寬度,目的用來分割。
w_min=min(ws)
#w_max是最大寬度
w_max=max(ws)
result=[]
#如果切割出有4個字符。說明沒啥問題
iflen(valid_contours)==4:
forcontourinvalid_contours:
x,y,w,h=cv2.boundingRect(contour)
box=0([[x,y],[x+w,y],[x+w,y+h],[x,y+h]])#將矩形的四個角的坐標點取整
result.append(box)但這只是理想情況,其實很多數(shù)字驗證碼圖片中的字符有扭曲粘連的現(xiàn)象,因此可能會有扭曲粘連的相鄰字符被識別成同一個字符,要處理這種情況就要對數(shù)字驗證碼圖片做進一步的分割。在數(shù)字驗證碼的分割過程中,字符粘連會有下面幾種情況,每種情況都有它的處理方法:4個字符被檢測為3個字符圖9輪廓粘連的圖片①如圖9只能檢測出3個矩形框,中間2個字符因為粘連被檢測成了1個字符。對于這種情況,可以從中間分割2個粘連的字符,這樣就可以得到正常的能分割出4個字符的結果,該模塊的功能代碼如下:#如果切割出有3個字符。參照文章,中間分割
eliflen(valid_contours)==3:
forcontourinvalid_contours:
x,y,w,h=cv2.boundingRect(contour)
ifw==w_max:
box_left=0([[x,y],[x+w/2,y],[x+w/2,y+h],[x,y+h]])
box_right=0([[x+w/2,y],[x+w,y],[x+w,y+h],[x+w/2,y+h]])
result.append(box_left)
result.append(box_right)
else:
box=0([[x,y],[x+w,y],[x+w,y+h],[x,y+h]])
result.append(box)代碼實現(xiàn)后,得到了圖10的效果:圖10改進后分割字符數(shù)正常的圖片①4個字符被檢測為2個字符4個字符被檢測成2個字符有下面兩種情況:(1)第一種情況,圖片被檢測為左右各一個矩形框,每個矩形框框住粘連的兩個字符。圖11輪廓粘連的圖片②對于左右這兩個輪廓,可以分別從中間分割。同上述將粘連的兩個字符分割的功能代碼,代碼實現(xiàn)后,分割圖片如圖12:圖12改進后分割字符數(shù)正常的圖片②(2)對第二種情況,圖片被檢測出2個矩形框,一個矩形框包含1個字符,另一個矩形框包含了3個字符。圖13輪廓粘連的圖片③可以通過將包含3個字符的輪廓在水平方向上三等分來解決該情況,該功能代碼如下:#如果切割出有3個字符。參照文章,將包含了3個字符的輪廓在水平方向上三等分
eliflen(valid_contours)==2:
forcontourinvalid_contours:
x,y,w,h=cv2.boundingRect(contour)
ifw==w_maxandw_max>=w_min*2:
box_left=0([[x,y],[x+w/3,y],[x+w/3,y+h],[x,y+h]])
box_mid=0([[x+w/3,y],[x+w*2/3,y],[x+w*2/3,y+h],[x+w/3,y+h]])
box_right=0([[x+w*2/3,y],[x+w,y],[x+w,y+h],[x+w*2/3,y+h]])
result.append(box_left)
result.append(box_mid)
result.append(box_right)
elifw_max<w_min*2:
box_left=0([[x,y],[x+w/2,y],[x+w/2,y+h],[x,y+h]])
box_right=0([[x+w/2,y],[x+w,y],[x+w,y+h],[x+w/2,y+h]])
result.append(box_left)
result.append(box_right)
else:
box=0([[x,y],[x+w,y],[x+w,y+h],[x,y+h]])
result.append(box)代碼實現(xiàn)后,分割圖片如圖14:圖14改進后分割字符數(shù)正常的圖片③4個字符被檢測成1個字符如圖15,經(jīng)過系統(tǒng)處理只顯示了一個矩形框,這是由于圖片上的4個字符粘連在一起所以只能被檢測為1個字符。圖15輪廓粘連的圖片④這種情況對輪廓在水平方向上做4等分即可,該功能的代碼如下:#如果切割出有1個字符。參照文章,對輪廓在水平方向上做4等分
eliflen(valid_contours)==1:
contour=valid_contours[0]
x,y,w,h=cv2.boundingRect(contour)
box0=0([[x,y],[x+w/4,y],[x+w/4,y+h],[x,y+h]])
box1=0([[x+w/4,y],[x+w*2/4,y],[x+w*2/4,y+h],[x+w/4,y+h]])
box2=0([[x+w*2/4,y],[x+w*3/4,y],[x+w*3/4,y+h],[x+w*2/4,y+h]])
box3=0([[x+w*3/4,y],[x+w,y],[x+w,y+h],[x+w*3/4,y+h]])
result.extend([box0,box1,box2,box3])
eliflen(valid_contours)>4:
forcontourinvalid_contours:
x,y,w,h=cv2.boundingRect(contour)
box=0([[x,y],[x+w,y],[x+w,y+h],[x,y+h]])
result.append(box)
result=sorted(result,key=lambdax:x[0][0])
returnresult代碼實現(xiàn)后,分割圖片如圖16:圖16改進后分割字符數(shù)正常的圖片④3.2.2數(shù)字驗證碼的字符匹配和識別字符匹配對圖片分割完成后,要將分割后的單個字符的圖片分別儲存,以便下一步做人工標注。存取字符圖片的代碼如下:#借助第一個函數(shù)獲得待切割位置和長寬后就可以切割了,切割后放在char文件夾下
defsplit_code(filepath):
#獲取圖片名
filename=filepath.split("/")[-1]
#圖片名即為標簽
filename_ts=filename.split(".")[0]
im=cv2.imread(filepath)
im_res=process_im(im)
im2,contours,hierarchy=cv2.findContours(im_res,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#這里就是用的第一個函數(shù),獲得待切割位置和長寬
boxes=get_rect_box(contours)
#如果沒有區(qū)分出四個字符,就不切割這個圖片
iflen(boxes)!=4:
print(filepath)
#如果區(qū)分出了四個字符,說明切割正確,就可以切割這個圖片。將切割后的圖片保存在char文件夾下
forboxinboxes:
print(box)
cv2.drawContours(im,[box],0,(0,0,255),2)
roi=im_res[box[0][1]:box[3][1],box[0][0]:box[1][0]]
roistd=cv2.resize(roi,(30,30))
timestamp=int(time.time()*1e6)
filename="{}.jpg".format(timestamp)
filepath=os.path.join("char",filename)
print(filepath)
cv2.imwrite(filename,roistd)字符圖片保存在名為char的目錄下面,這個目錄里的文件大致是長這樣的(文件名用時間戳命名,確保不會重名):圖17分割出的單字符圖片標注數(shù)據(jù)是所有步驟里最耗費體力的一步了。依次打開char目錄中的每張被標注圖像,通過操作計算機,實現(xiàn)對圖像字符名的命名,并將其進行保存。該功能的代碼如下:#用來標注單個字符圖片,在label文件夾下,很明顯可以看到_后面的就是標簽。比如圖片里是數(shù)字6,_后面就是6
deflabel_data():
files=os.listdir("char")
forfilenameinfiles:
print(filename)
filename_ts=filename.split(".")[0]
patt="label/{}_*".format(filename_ts)
saved_num=len(glob.glob(patt))
ifsaved_num==1:
print("{}done".format(patt))
continue
filepath=os.path.join("char",filename)
im=cv2.imread(filepath)
cv2.imshow("image",im)
key=cv2.waitKey(0)
ifkey==27:
sys.exit()
ifkey==13:
continue
char=chr(key)
filename_ts=filename.split(".")[0]
outfile="{}_{}.jpg".format(filename_ts,char)
outpath=os.path.join("label",outfile)
cv2.imwrite(outpath,im)
#和標注字符圖反過來,我們需要讓電腦知道這個字符叫啥名字
defanalyze_label():
files=os.listdir("label")
label_count={}
forfilenameinfiles:
label=filename.split(".")[0].split("_")[1]
label_count.setdefault(label,0)
label_count[label]+=1
print(label_count)通過對圖片進行標注后,將其保存至下列模板庫中,據(jù)統(tǒng)計,共有八百張圖片,其中文件名由原文件名+標注名組成,如圖18所示:圖18label模板庫字符識別本課題采用KNN算法來識別數(shù)字驗證碼。運用KNN算法識別數(shù)字驗證碼時,K值的選取非常重要,本課題將K取不同值分別進行識別精確度的計算,從而選出最好的識別效果對應的K值。對于每一個要識別的數(shù)字驗證碼圖片,都需要先對圖片做圖片預處理。預處理主要包括圖片灰度處理,二值化處理,降噪處理以及圖片分割處理等,對于進行預處理后的圖片,假設其存在變量im_res內(nèi),圖片分割處理后的相關輪廓特征存在變量boxes內(nèi),識別驗證碼的代碼如下:#訓練模型,用的是k相鄰算法
defget_code(im):
#將讀取圖片和標簽
[samples,label_ids,id_label_map]=load_data()
#k相鄰算法
model=cv2.ml.KNearest_create()
#開始訓練
model.train(samples,cv2.ml.ROW_SAMPLE,label_ids)
#處理圖片。即二值化和降噪
im_res=process_im(im)
#提取輪廓
im2,contours,hierarchy=cv2.findContours(im_res,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#獲取各切割區(qū)域位置和長寬
boxes=get_rect_box(contours)
#判斷有沒有識別出4個字符,如果沒有識別出來就不往下運行,直接結束
iflen(boxes)!=4:
print("cannotgetcode")
result=[]
#如果正確分割出了4個字符,下面調(diào)用訓練好的模型進行識別。
forboxinboxes:
#獲取字符長寬
roi=im_res[box[0][1]:box[3][1],box[0][0]:box[1][0]]
#重新設長寬。
roistd=cv2.resize(roi,(30,30))
#將圖片轉(zhuǎn)成像素矩陣
sample=roistd.reshape((1,900)).astype(np.float32)
#調(diào)用訓練好的模型識別
ret,results,neighbours,distances=model.findNearest(sample,k=1)
#獲取對應標簽id
label_id=int(results[0,0])
#根據(jù)id得到識別出的結果
label=id_label_map[label_id]
#存放識別結果
result.append(label)
returnresult運行上面的代碼后得到圖19的運行結果,數(shù)字驗證碼中的字符成功被識別出來:圖19成功識別字符的運行界面第四章結果分析本課題研究的是具有噪聲且扭曲粘連的數(shù)字驗證碼,將訓練集數(shù)字驗證碼經(jīng)過圖片預處理和KNN算法識別匹配后得到的label模型庫與測試集數(shù)字驗證碼進行比較,可得到識別的精確度。這里本課題將K分別取1、2、3、4,計算識別后的精確度,結果如表1所示:表1不同K值對應的識別率K值1234識別精確度94.393%93.692%92.757%92.290%比較識別精確度可知:K=1時精確度最高。本課題的程序采用Python語言編寫,取106張測試集的數(shù)字驗證碼圖片(存在test目錄下)進行識別,由實驗結果可得:識別的精確度約為:94.393%,該準確率相對較高,雖然有部分特征不夠明顯的數(shù)字驗證碼圖片因字符輪廓不規(guī)范出現(xiàn)了識別錯誤的情況,但總體來說識別效果不錯。利用Python搭建系統(tǒng)界面,界面效果要展示出數(shù)字驗證碼識別的結果。界面展示的是測試集的識別結果,測試集中大概有100張左右的數(shù)字驗證碼圖片,對于用于測試的樣本,前2個過程與建立模板庫的過程相同,測試集圖片經(jīng)過圖像預處理后,再用KNN算法識別測試集圖片字符,本課題分析比較了不同K值的識別精確度,發(fā)現(xiàn)K取1時精確度最高,所以找到模板庫中與目標字符距離最小的1個字符后,再根據(jù)字符模板庫label對字符進行識別。最后要用系統(tǒng)界面展示識別結果,這里本課題用PIL庫ImageDraw模塊中的Draw和text方法將識別結果展示出來,運行后的系統(tǒng)界面如圖20:圖20識別結果的系統(tǒng)界面第五章總結隨著互聯(lián)網(wǎng)技術的普及,我國科技技術的不斷發(fā)展,網(wǎng)絡成為人們生活中重要的組成成分,其在不斷提高人們生活質(zhì)量與豐富人們生活的同時,也帶來了網(wǎng)絡安全隱患問題。因此,為有效提高網(wǎng)絡安全性,保障人們網(wǎng)絡安全隱私,我國不斷的研發(fā)與提高網(wǎng)絡防火墻的安全性與抵抗力,其中,數(shù)字驗證碼便是其中之一。數(shù)字驗證碼的運用主要用于對人類計算機使用與自動化程序使用的辨別,避免或減少出現(xiàn)密碼惡意破解,違規(guī)使用網(wǎng)絡資源,惡意刷帖,垃圾注冊,刷票,垃圾廣告,惡意登錄,活動作弊等違法行為,該類行為一旦發(fā)生,不僅僅影響網(wǎng)站的推廣與應用,甚至嚴威脅著我國社會公平,公正與公義,對我國人民群眾的權益造成一定損害,不利于我國互聯(lián)網(wǎng)的發(fā)展。同時,隨著互聯(lián)網(wǎng)的不斷發(fā)展,互聯(lián)網(wǎng)將應用至人們生活的方方面面,若僅通過政府等相關部門出臺法律法規(guī)對互聯(lián)網(wǎng)違法行為進行約束,雖然在一定程度上提高了違法成本,但互聯(lián)網(wǎng)的龐大與復雜性,必然存在一部分不法分子逍遙在外,因此,不斷的提高網(wǎng)絡的安全性,才是我國未來互聯(lián)網(wǎng)發(fā)展的重要趨勢與重要保障。隨著數(shù)字驗證碼的逐漸發(fā)展與應用,其技術將不斷的進行創(chuàng)新與提高,實現(xiàn)智能無感知數(shù)字驗證碼識別是未來發(fā)展趨勢,不斷的提高互聯(lián)網(wǎng)使用的安全性能,為用戶提供更優(yōu)的體驗,滿足人們各種所需,是未來互聯(lián)網(wǎng)發(fā)展的必要選擇。本課題研究的對象是數(shù)字驗證碼,因為純數(shù)字驗證碼僅有10個數(shù)字,提取出來的模板數(shù)較少,所以這里我采用的不是純數(shù)字驗證碼,而是包含數(shù)字和字母的復雜數(shù)字驗證碼,可以提取出更多的模板。本文以數(shù)字驗證碼識別技術作為研究對象,探究當前國內(nèi)外研究現(xiàn)狀,并對數(shù)字驗證碼識別技術所包含的三大功能模塊進行具體敘述,分別是圖片預處理技術,圖片分割技術以及字符匹配識別功能。在圖片預處理技術使用中,用加權平均法進行灰度化,將由RGB三通道的數(shù)據(jù)組成的彩色圖像變?yōu)閱瓮ǖ赖臄?shù)據(jù)的灰度圖像,減少數(shù)據(jù)處理量;用全局閾值中的自定義閾值方法對圖片進行二值化處理;借助高斯模糊實現(xiàn)對被二值化圖像的處理,減少噪聲,達到降噪效果。在數(shù)字驗證碼識別的整個過程中,圖片分割在其中扮演著重要角色,作為最重要的一步,直接影響著數(shù)字驗證碼的識別效果,本文中,通過運用OpenCV根據(jù)圖片中的字符輪廓進行分割。本文還研究了對輪廓探測出的不同數(shù)量字符的分割方法。在匹配識別階段,要對分割出的單字符進行信息的人工標注,這是本文研究過程中較為繁瑣的一步,最后再用KNN算法對測試集數(shù)據(jù)進行數(shù)字驗證碼的識別。訓練集和測試集均為從網(wǎng)上找到的不知名網(wǎng)站的排版相似的字符圖片。這里訓練集的圖片作為進行圖片預處理、分割和單字符匹配的樣本集,最終得到標注好單字符信息的label模型庫。測試集圖片用于最終識別精確度和本課題研究結果的分析。本課題目前的研究工作還存在一些問題,本人認為需從以下三方面解決:第一,對于數(shù)字驗證碼中存在較為嚴重粘連,扭曲的文字與符號,對其驗證碼識別技術仍需進一步改進,同時,對于因字符分割而產(chǎn)生的字符筆畫出現(xiàn)缺損問題需加強技術優(yōu)化;第二,在本文中,通過分析比較幾種識別算法后選擇了一種算法進行數(shù)字驗證碼識別,可以用其他識別算法進行研究,探索出更高識別率的方案;第三,在本文研究中,對數(shù)字驗證碼的處理對象是四字驗證碼,字數(shù)較為固定,一旦出現(xiàn)隨機驗證碼字數(shù),便無法借助本文數(shù)字驗證碼識別技術進行有效識別,無法達
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 6583:2024 EN Methanol as a fuel for marine applications - General requirements and specifications
- 2024廣東省林地流轉(zhuǎn)買賣合同
- 2024法律顧問委托合同
- 2024民間抵押借款合同民間借貸合同范本
- 2024房屋裝修合同(范本)
- 新車銷售合同范本樣式
- 不動產(chǎn)抵押借款合同范本解析
- 2024蔬菜買賣合同示范文本
- 2024年墻面裝飾分包工程合同
- 合租住房協(xié)議書樣本
- 空氣能室外機保養(yǎng)維護記錄表
- DB37∕T 5162-2020 裝配式混凝土結構鋼筋套筒灌漿連接應用技術規(guī)程
- 9-2 《第三方過程評估淋蓄水檢查內(nèi)容》(指引)
- 部編版七年級初一語文上冊《狼》公開課課件(定稿)
- 2015路面工程講義(墊層+底基層+基層+面層+聯(lián)合層+封層、透層與黏層)
- 信息安全保密控制措施資料
- 《現(xiàn)代漢語修辭》PPT課件(完整版)
- TTJCA 0007-2022 住宅室內(nèi)裝飾裝修工程施工驗收規(guī)范
- 構造柱工程施工技術交底
- 醫(yī)院科室質(zhì)量與安全管理小組工作記錄本目錄
評論
0/150
提交評論