呂 霽
(黎明職業(yè)大學信息與電子工程學院,福建 泉州 362000)
伴著21世紀的到來,各項科學技術有了質的飛躍,特別是在計算機科學領域的發(fā)展,而在這個領域中發(fā)展最快最為迅猛的一個學科便是計算機網(wǎng)絡技術,不管是在科研或者是在民用商用都是最為活躍的。在實際的應用過程中,卻有許多惡意的行為,例如:編寫惡意程序,機器人自動登錄注冊,群發(fā)信息和自動回復等等。驗證碼識別技術正是為了應對這些特殊情況而誕生。驗證碼識別技術的研究在國外進行的比較早,而且在技術的各領域也取得了一定的成績。字符識別的研究最先是在俄國,解決了當時視覺障礙的難題。接下來的四十幾年時間不斷攻克技術難關,研發(fā)出當時全世界第一臺字符識別機器。上個世紀九十年代,在圖像技術、人工智能技術以及模式識別領域飛速發(fā)展的基礎上,誕生了復雜的字符識別系統(tǒng)。此時,先進的神經網(wǎng)絡理論、自然語言處理技術、模糊集推理以及隱馬爾科夫模型被廣泛地應用于實際過程中。我國的驗證碼識別研究大概從80年代開始出現(xiàn),起步相對國外較晚,但最近幾年在CAPTCHA、驗證碼識別、OCR識別方面,我國的研究發(fā)展迅速,從事相關方面研究的學者和專家也越來越多。
圖像預處理的對象是圖像,屬于初級圖像的范圍內,處理輸入的數(shù)據(jù)及輸出的數(shù)據(jù)。為了便于對圖像進行分析,驗證碼圖像預處理要對圖像數(shù)據(jù)有目的性的圖像增強。預處理是源頭是最重要的一個步驟,任務是把原始圖像經過某種方式轉換為二值化圖像,去掉那些和類別不相關的因素,例如標準化位置及尺寸。整個過程分為三個步驟:灰度化、二值化、去噪,整個流程如圖1.1所示:
圖1.1 預處理流程圖
如何把色彩鮮艷光鮮亮麗的彩色圖像轉化為灰度圖像便是灰度化處理的過程。在這里采用的是RGB模型,假如RGB三個顏色值都一樣的話,那么它表示的顏色是黑白的,RGB的值便是灰度值。為了減少那些無謂的干擾,減小過程復雜度,縮短處理程序的時間,壓縮整個計算機,通常把24位真彩色轉換成灰度圖像,因為用戶在對字符識別的過程中經常受到彩色驗證碼圖像中各種顏色的刻意干擾,在轉換后的灰度圖像中我們可以獲得更多的圖像信息。
怎樣才能避免神經網(wǎng)絡中學習樣本的干擾,使分割的效果實現(xiàn)最大化?這就是圖像處理的任務,它將驗證碼圖像的背景淡化,前景有效增強。那么最簡單有效的辦法就是通過白色和黑色這兩種對比及其醒目的顏色才實現(xiàn),背景為灰度值255,既白色;自然前景色就是灰度值為0的黑色,這樣灰度值就被最小化為2級,并且方便了以后處理數(shù)據(jù)的工作。局部閾值法、全局閾值法和動態(tài)閾值法是二值化常用的三種方法。由于圖像的豐富多樣性使得簡單的二值化算法并不具備通用性。盡管在圖像的二值化方便進行了很多研究,目前都只是針對具體出現(xiàn)的問題,在二值化理論研究方面還沒有找到通用的方法。使用驗證碼的目的就是要增加圖像的辨別度,所以在生產驗證碼時通常會添加噪聲線和噪點以影響驗證碼的識別。在進行驗證碼識別的時候需要將這些添加的噪聲去掉。
下面介紹一種濾波的方法進行去除噪聲。對于噪聲一般都是相對單獨的像素點,而目標字符區(qū)域一般都是有很多個相似組成的,而且在物理位置上也有一定的關聯(lián),考慮到這樣的特性,可以使用中值法來對圖像中的噪點進行去除。如圖1.2所示:
圖1.2 去噪流程圖
字符分割將上一步驟二值化后的圖像中具有意義的各個字符分離出來,用于下一個步驟設計識別算法對每一個字符進行識別。字符分割的過程中包含兩個部分,一個是單個字符,另一個是字符區(qū)域。在對字符的分割方法中,通常采用對粘連字符進行分割或非粘連字符分割算法者兩種方法的組合。
對非粘連字符驗證碼的分割相對比較容易,可以采用基于投影分割法。在上一個步驟處理完畢之后,主要計算在X軸方向上,基于該方向的Y軸的黑色像素總數(shù)。如圖2.1所示,便是該方法的執(zhí)行過程圖樣,左圖為二值化原圖,右圖為基于投影分割算法的直方圖。
圖2.1 垂直投影直方圖分割算法
從結果中我們可以看到,雖然它可以輕松的將間隔比較明顯的字符驗證碼有效地切開,但是當遇到較為復雜的驗證碼還存在著很大的局限性。利用上下輪廓是另一種基于投影方法的直方圖字符驗證碼分割算法。這種算法的特點是采用字符的上下邊界來進行差值投影,與垂直投影方法類似。如圖2.2展示了上下輪廓方法的直方圖圖樣,利用直方圖的波谷區(qū)域進行字符串的分割。其中,左邊即原圖,右邊圖形是上下輪廓直方圖。
圖2.2 上下輪廓直方圖法
在字符分割技術中還有另外一種算法,連通域算法;除了處理噪聲之外,它還可以應用于其他方面。根據(jù)種子的填充算法,選擇一個種子標上標記,并作為初始的種子點,搜索驗證碼圖像中那些未被標記過的點,直到所有的點都已被標記,那么圖像中分離的區(qū)域就自動被尋獲。
最后,結合前面所描述的兩種方法再加上尋找最短路徑算法來設計一個最為高效的字符分割法。首先利用連通域分割法分割出驗證碼圖像的各個連通域,再利用連通域的數(shù)目和圖像上存在的字符個數(shù)的比較來判斷有多少個粘連字符,字符分割的范圍便得到確認,其中一些垂直投影沒有重合而且只是稍微粘連的字符,我們可以采用投影法最第二次的分割,那些又扭曲又黏貼的字符,只能采用最短路徑的方法做最后一次分割。
字符的識別其實就是將圖片進行處理并還原回字符文本的過程。通常分為基于字符分割的識別(包括卷積神經網(wǎng)絡、SVM、各種統(tǒng)計距的識別法)和模板匹配法識別。
這種識別方法的模板數(shù)量比較有限,但是制作簡單,只要很短的時間我們便可以借助相應的軟件為不能分割的驗證碼制作模板。模板是利用字符特征的N維向量制作的,在實際匹配中的模板就是字符的點陣圖。經過上面步驟分割后,便可以利用連通域的計算來匹配字符模板。用這種方法就避免了字符分割中的困難。它采用狄度相關的匹配,使用序貫相似性的檢測方法(SSDA)在驗證碼圖像中尋找最佳的匹配點。
早在1986年,當時的科學家便有了關于基于BP的神經網(wǎng)絡的理論概念,并組織了相關的學習方法。半個世紀過去了,它成為現(xiàn)今最流行的神經網(wǎng)絡模型中的一種。BP神經網(wǎng)絡是一個循環(huán)的過程,是一種多層前饋網(wǎng)絡,并且是按誤差逆?zhèn)鞑サ乃惴ú粩嘤柧毜模⒉恍枰孪戎垒敵鼋Y果和輸入信息之間有什么關系,通過反向傳播的數(shù)據(jù)來不斷地調整網(wǎng)絡的閾值和權值,利用最速下降法來訓練樣本,將網(wǎng)絡誤差的平方和降到最低?;贐P的神經網(wǎng)絡模型的拓撲結構由三個部分組成,既輸入層、輸出層和隱含層。輸出層得到的數(shù)據(jù)將被用來和實際情況做對比,如果有誤差,將返回神經網(wǎng)絡重新調整,整個過程循環(huán)進行到符合要求為止。如圖3.1所示為BP神經網(wǎng)絡的完整結構圖。
圖3.1 BP神經網(wǎng)絡
基于BP神經網(wǎng)絡的識別方法因其高效而準確的識別過程,被大多數(shù)字符驗證碼識別所采用。BP神經網(wǎng)絡根據(jù)字符驗證碼中所包含的三種形式:數(shù)字,小寫字母及大寫字母來設計對應的三種子網(wǎng)網(wǎng)絡,如圖3.2所示。
圖3.2 字符驗證碼對應神經網(wǎng)絡子網(wǎng)網(wǎng)絡
子網(wǎng)網(wǎng)絡如圖所示,它是基于驗證碼字符的特征,可以分為四個步驟:
(1)輸入信息由上而下順序傳播,從輸入層通向隱含層最后是輸出層;
(2)BP神經網(wǎng)絡的結果與實際數(shù)據(jù)肯定是會有一定的誤差信號。誤差信號的消除需要對輸入層、隱含層和輸出層之間的誤差進行反向傳播來逐層進行修正,是一個節(jié)點之間連接權逆向的過程。
(3)是一個由誤差信號逆向傳播修正與網(wǎng)絡數(shù)據(jù)順序傳播反復交替進行的,是記憶型的基于網(wǎng)絡的訓練過程;
(4)誤差信息有一個極值,BP神經網(wǎng)絡的全局誤差有一個趨向極值的收斂過程。
把分割后的二值化圖像輸入到學習訓練完成后的BP神經網(wǎng)絡中,便能準確有效地識別出二值化圖像里面的字符,分析出實際結果。構建合適的BP神經網(wǎng)絡,調整網(wǎng)絡學習訓練的目的性,調整網(wǎng)絡中神經單元的個數(shù),實現(xiàn)識別和記憶的不同復雜度,符合各種用戶的需求。
這里主要描述了驗證碼識別過程的三個步驟,驗證碼圖像預處理(灰度化、二值化和去噪),字符的分割以及字符的識別。對驗證碼圖像的預處理也分為三個步驟,其中的關鍵因素是二值化和去噪的問題。圖像的二值化一般采用局部閡值法和幾種全局閡值的方法,在大量的實際數(shù)據(jù)中發(fā)現(xiàn)全局閾值法中的迭代法和最大類間方差法在驗證碼圖像的二值化處理中適應性較強。根據(jù)不同驗證碼的特點,分別采用不同的處理方法進行去噪,均實現(xiàn)了理想的效果。根據(jù)粘連字符和非粘連字符驗證碼設計不同的分割字符方法。通過對結構分析法和模板匹配法所做的分析,這兩種方法不具備一般的通用性,故本文主要討論基于BP的神經網(wǎng)絡驗證碼的識別方法。
目前,驗證碼破解技術成功識別了互聯(lián)網(wǎng)上大部分的驗證碼,里面不乏一些相對困難的驗證碼。盡管如此,互聯(lián)網(wǎng)上仍有許多難以破解的驗證碼,例如google的Gmail登陸界面上的驗證碼等。故以本文研究為基礎,尚有大量工作需要我們去完成。
[1]張淑雅,趙一鳴,趙小宇等.認證碼字符識別方法的研究[J].寧波大學學報:理工版,2007
[2]坤燕昌,曾大海.淺析驗證碼在B/S系統(tǒng)安全性中的應用[J].西昌學院學報,2005.l9(3):79-80
[3]徐海蘭,劉彥婷,楊磊.模式識別中三種字符識別的方法[J].北京廣播學院學報,2005.l2(4):3,38
[4]賈少銳,李麗宏,安慶賓.BP神經網(wǎng)絡算法在字符識別中的應用[J].科技情報開發(fā)與經濟,2007.17(2):167-169
[5]王小波,王興芬.基于MODI的驗證識別系統(tǒng)設計與實現(xiàn)[J].背景信息科技大學學報,2010.25(1):85-88
[6]朱邵文,陳光喜.一種簡單的基于字符形狀的驗證碼識別技術[J].桂林電子科技大學學報,2010.30(1):59-62