本發(fā)明涉及智能信息處理
技術(shù)領(lǐng)域:
,具體地說是一種基于神經(jīng)網(wǎng)絡(luò)的字符粘連驗證碼的識別方法。
背景技術(shù):
:驗證碼的發(fā)明與使用是為了保證網(wǎng)絡(luò)的安全,加強對信息的保護,防止有些不法分子通過高性能的硬件設(shè)備、特定功能的惡意程序、網(wǎng)絡(luò)爬蟲和網(wǎng)站設(shè)計漏洞等各種手段破解賬戶密碼、盜取用戶信息、惡意自動注冊。與其他的安全驗證方式相比驗證碼所包含的數(shù)據(jù)量較小,而且有效的提高了網(wǎng)站安全性能及抗攻擊能力。驗證碼是區(qū)分計算機和人類的全自動圖靈測試程序。但由于網(wǎng)絡(luò)的不斷發(fā)展,驗證碼也在不斷地革新,識別驗證碼可以了解驗證碼設(shè)計的規(guī)律與原理,有助于發(fā)現(xiàn)驗證碼設(shè)計的缺陷,以便設(shè)計出更安全、更成熟、更加符合用戶使用體驗的驗證碼。同時驗證碼的識別也為需要大量從網(wǎng)絡(luò)上抓取數(shù)據(jù)的大數(shù)據(jù)分析的工作者提供便利,推動相關(guān)研究的發(fā)展。網(wǎng)絡(luò)上的驗證碼類型有很多種,主要有基于文本模式的、基于圖像模式的、基于語音模式和少部分基于視頻模式的,以基于文本模式的驗證碼使用最為廣泛?;谖谋镜尿炞C碼最初只包含簡單的數(shù)字與字母,光學(xué)字符識別(opticalcharacterrecognition,ocr)技術(shù)可以將圖像中的文本直接提取識別且有良好的識別效果。網(wǎng)絡(luò)的安全推動著驗證碼的識別難度不斷增加,開始改變字符顏色,增加圖像背景,增加圖像噪音干擾等等,對于這類驗證碼可以先對圖像進(jìn)行簡單預(yù)處理后再使用ocr提取,也有較為不錯的效果。隨著驗證碼的不斷發(fā)展,開始通過對驗證碼圖像中的文本進(jìn)行扭曲、粘連等方法來增加其識別的難度。這種類型的驗證碼的難度在于將粘連的字符進(jìn)行分割,研究人員提出了很多字符提取算法,例如骨架提取算法,顏色填充法,滴水算法等等,通過這些算法將驗證碼中的字符進(jìn)行分割或輪廓的提取,再通過ocr,樸素貝葉斯,支持向量機等進(jìn)行訓(xùn)練。但是分割效果往往并不理想,從而導(dǎo)致最終的識別正確率不高。技術(shù)實現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是提供一種基于神經(jīng)網(wǎng)絡(luò)的字符粘連驗證碼的識別方法,解決目前驗證碼字符粘連、背景復(fù)雜難以識別的問題。本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是:一種基于神經(jīng)網(wǎng)絡(luò)的字符粘連驗證碼的識別方法,包括以下步驟:步驟一、從網(wǎng)站中自動截取一定數(shù)量的驗證碼圖片,存入文件夾備用;步驟二、對存入的驗證碼圖片的圖像進(jìn)行基礎(chǔ)預(yù)處理,使原始的驗證碼圖像更易于字符切割,具體方法為:(1)將收集的驗證碼圖片中的彩色圖像灰度化;(2)灰度圖像去燥處理:對圖像進(jìn)行腐蝕處理,縮小圖像中的噪點,使用門限算法,選擇適當(dāng)?shù)拈撝?,將圖像進(jìn)行二值化處理,并對二值化處理后的圖像取反,最后使用中值濾波法去除圖像中的大部分噪點;(3)定位驗證碼的大小,對步驟(2)去噪后的圖像去除邊框;(4)對去邊框后的圖像通過連通區(qū)域降噪發(fā)進(jìn)一步去除噪聲,即選取圖像中所有的連通區(qū)域,選定一個合適的閾值,去除連通區(qū)域較小的噪音,保留連通區(qū)域較大的字符;步驟三、將步驟二預(yù)處理后的圖像中的字符分割成單個字符,具體方法為:(1)將步驟二處理后的圖像的灰度值進(jìn)行豎直方向的投影,得到圖像豎直方向的投影直方圖;(2)以得到的豎直方向的投影直方圖中波谷的位置為字符切割點將字符圖像分割為單個字符圖像;(3)將單個字符圖像灰度值進(jìn)行水平方向上的投影,得到單個字符圖像水平方向的投影直方圖,通過水平方向的投影直方圖確定字符的上下邊界并進(jìn)行分割;步驟四、將分割完的字符圖像進(jìn)行歸一化處理;步驟五、通過人工神經(jīng)網(wǎng)絡(luò)對歸一化的字符圖像進(jìn)行識別訓(xùn)練;步驟六、計算識別準(zhǔn)確率。本發(fā)明所述步驟五中,對歸一化的字符圖像進(jìn)行識別訓(xùn)練的具體方法為:選定bp神經(jīng)網(wǎng)絡(luò)作為訓(xùn)練手段,選用三層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),即輸入層、單個隱含層和輸出層,采用隨機梯度法的訓(xùn)練類型及自適應(yīng)的調(diào)整學(xué)習(xí)率進(jìn)行識別訓(xùn)練。本發(fā)明的有益效果是:本發(fā)明通過選擇合適的去噪方式及去噪方法的順序?qū)︱炞C碼圖像進(jìn)行預(yù)處理,通過不同程度的降噪處理,能很好的將驗證碼復(fù)雜的背景噪聲去除,對于粘連的字符的分割也有較好的效果。將腐蝕處理應(yīng)用到降噪的過程中,不僅去除了背景中的微小顆粒噪聲,同時也去除了附著在字符邊緣的噪點,使字符輪廓更加清晰;在基礎(chǔ)的降噪處理完成后利用連通區(qū)域降噪的方法,將中值濾波難以去除的噪點去除,基本可以達(dá)到進(jìn)行零噪聲字符分割;使用神經(jīng)網(wǎng)絡(luò)的訓(xùn)練驗證,該方法對于帶有粘連字符的復(fù)雜背景驗證碼有較高的識別率。附圖說明圖1為本發(fā)明所涉及的驗證碼識別方法的流程圖;圖2為本發(fā)明實施例驗證碼原始圖像;圖3為本發(fā)明實施例驗證碼圖像灰度化以后的圖像;圖4為本發(fā)明實施例驗證碼圖像腐蝕以后的效果圖;圖5為本發(fā)明實施例驗證碼二值化并取反的圖像;圖6為本發(fā)明實施例驗證碼中值濾波后的效果圖;圖7為本發(fā)明實施例驗證碼連通區(qū)域降噪后的效果圖;圖8為本發(fā)明實施例驗證碼圖像投影直方圖分割說明;圖9為本發(fā)明實施例驗證碼字符分割效果圖;圖10為本發(fā)明實施例自適應(yīng)學(xué)習(xí)率與誤差變化曲線圖。具體實施方式下面結(jié)合說明書附圖對本發(fā)明的具體實施方式(實施例)進(jìn)行描述,使本領(lǐng)域的技術(shù)人員能夠更好地理解本發(fā)明。一種基于神經(jīng)網(wǎng)絡(luò)的字符粘連驗證碼的識別方法,包括以下步驟:步驟1、通過c++編碼自動刷新網(wǎng)站頁面并自動截取驗證碼圖片,獲取一定量的圖片并保存在特定的文件夾中備用;步驟2、對截取的驗證碼圖片的圖像進(jìn)行預(yù)處理,使原始的驗證碼圖像變成適于分割的圖像,具體方法為:2.1、對于待識別的驗證碼的圖像首先按照公式進(jìn)行彩色圖像灰度化處理,其中,r、g、b分別表示彩色圖像中像素點紅、綠、藍(lán)的像素值,gray為所求點的灰度值,效果如圖3所示;2.2、灰度圖像中的噪音會影響圖像分割的結(jié)果,因此對灰度圖像進(jìn)行去噪處理,由于驗證碼圖像背景復(fù)雜,需要選用合適的去噪方法及合適的降噪順序,使得待分割的圖像即達(dá)到了降噪的效果,同時保留了字符的清晰輪廓。具體方法為:2.2.1、腐蝕是一種消除邊界點,使邊界向內(nèi)部收縮的過程,膨脹可以看做是腐蝕的對偶運算。使用膨脹公式的反向操作對灰度圖像進(jìn)行腐蝕處理,其中a是待處理的圖像,b為所使用的結(jié)構(gòu)元素,表示b擊中a,即存在一個點既是b中的元素也是a中的元素,是把結(jié)構(gòu)元素b平移z后得到,若擊中a,記下這個z點,所有滿足條件的z點的集合稱做a被b膨脹的結(jié)果。通過腐蝕處理可以使圖像內(nèi)部字符的區(qū)域相對縮小,并腐蝕掉了圖像字符邊緣粘連的一些噪點,使字符輪廓更加清晰,同時還可以將背景圖像中顆粒較小的噪點輕松的去除,效果如圖4所示;2.2.2、使用門限算法,選擇適當(dāng)?shù)拈撝?,將步驟2.2.1處理過的圖像進(jìn)行二值化處理,并對二值化后的圖像取反,這樣黑底白字的圖像可以更加清楚的觀察背景中的噪點,了解剩余噪點的特征方便進(jìn)行下一步的去噪工作,效果如圖5所示;2.2.3、由于噪點顆粒較小且位置孤立,因此采用3×3的中值濾波模板進(jìn)行濾波,去除圖像中大部分噪點,若開始直接使用中值濾波,會導(dǎo)致背景與字符模糊,字符輪廓不夠清晰,而增加后期字符識別的難度,效果如圖6所示;2.3、定位驗證碼圖像大小,對去噪后的圖像去除妨礙處理的邊框;2.4、對步驟2.3處理過的圖像通過連通區(qū)域降噪法進(jìn)一步去除噪聲,即將圖像中所有的連通區(qū)域進(jìn)行標(biāo)記,由于圖像中大部分噪聲已經(jīng)去除,所以圖像中較大且孤立的噪點就會清晰的標(biāo)注出來,由于所需的字符必然是一個大的連通區(qū)域,所以對比連通區(qū)域的大小設(shè)定合適閾值,刪除較小的連通區(qū)域,保留包含字符的大的連通區(qū)域,以達(dá)到去噪的目的。若開始就使用連通區(qū)域降噪,會使粘連在字符周圍的噪點一同計算到屬于字符的連通區(qū)域中,導(dǎo)致字符輪廓模糊不清,分割難度加大,效果如圖7所示;步驟3、對步驟2預(yù)處理過的圖像分割成單個字符圖像,具體方法為:3.1、將預(yù)處理后的圖像的灰度值進(jìn)行豎直方向的投影,得到圖像豎直方向的投影直方圖,由于底色為黑色,而黑色的灰度值為0,對于未粘連的字符,灰度值為0的位置即為兩個字符之間的空隙,判斷單個字符的相對寬度;3.2、對于粘連字符,字符粘連部分較小,灰度值也相對較小,所得到的投影直方圖就會形成相應(yīng)的波谷,結(jié)合字符的相對寬度選擇波谷的位置,確定字符切割點,投影直方圖分割說明如圖8所示;3.3、依照切割點將預(yù)分割的字符圖像分割為單個字符圖像,字符分割效果如圖9所示;3.4、將單個字符圖像灰度值進(jìn)行水平方向上的投影,通過水平方向的投影直方圖中灰度值為0的區(qū)域?qū)挾却_定字符的上下邊界并進(jìn)行分割;步驟4、將步驟3分割完的字符圖像進(jìn)行歸一化處理,其目的是由于神經(jīng)網(wǎng)絡(luò)的輸入維度需要統(tǒng)一,歸一化的尺寸為;步驟5、將歸一化完的字符圖像通過bp神經(jīng)網(wǎng)絡(luò)進(jìn)行識別訓(xùn)練,具體方法為:5.1、選用三層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),即輸入層、單個隱含層和輸出層,獲取單個字符的像素信息,并將其作為bp神經(jīng)網(wǎng)絡(luò)的輸入層;設(shè)置隱含層節(jié)點數(shù)為126,若設(shè)置過多的節(jié)點容易導(dǎo)致過擬合并且使訓(xùn)練速度減緩;設(shè)定輸出層為一個包含37個(10個數(shù)字、26個字母及一個未知)目標(biāo)輸出的線性神經(jīng)元,其中神經(jīng)網(wǎng)絡(luò)中隱含層所使用的激活函數(shù)是雙曲正切函數(shù)(tanh),在輸出層使用的是sigmoid函數(shù);5.2、采用隨機梯度法的訓(xùn)練類型,設(shè)置最大訓(xùn)練輪數(shù)為256時有較快的訓(xùn)練速度和正確率;5.3、采用自適應(yīng)的調(diào)整學(xué)習(xí)率,當(dāng)訓(xùn)練誤差下降時學(xué)習(xí)率升高,以增加學(xué)習(xí)過程使訓(xùn)練結(jié)果更為準(zhǔn)確;但是當(dāng)達(dá)到目標(biāo)誤差時則直接結(jié)束訓(xùn)練,因此目標(biāo)誤差數(shù)值不宜設(shè)置過大,學(xué)習(xí)率與誤差變化曲線如圖9所示。神經(jīng)網(wǎng)絡(luò)中其他參數(shù)設(shè)置如表1所示。表1參數(shù)設(shè)置參數(shù)名初始學(xué)習(xí)率動量目標(biāo)誤差參數(shù)值0.0001學(xué)習(xí)率*0.90.002步驟6、計算識別準(zhǔn)確率,采用九折交叉驗證的方法,其中識別正確率為所有字符正確率p的均值,并計算九次的正確率的均值,以達(dá)到一個相對公平準(zhǔn)確的結(jié)果。其中正確率p的計算公式為:,其中tp為某一字符被正確識別的數(shù)量,fn為該字符被錯誤識別成其他字符數(shù)量。通過不同程度的降噪處理,能很好的將驗證碼復(fù)雜的背景噪聲去除,基本可以達(dá)到進(jìn)行零噪聲字符分割。同時對于粘連的字符的分割也有較好的效果,通過神經(jīng)網(wǎng)絡(luò)的訓(xùn)練對于帶有粘連字符的復(fù)雜背景驗證碼有較高的識別率。當(dāng)前第1頁12