陳振昂,黃星期,秦中元
〔1.東南大學網絡空間安全學院,江蘇南京 211189;2.網絡空間國際治理研究基地(東南大學),江蘇南京211189〕
驗證碼技術的全稱是“全自動區分計算機和人類的圖靈測試”(Completely Automated Public Test to tell Computer and Humans Apart,CAPTCHA),基本思想:根據預先人為制定的規則,由計算機系統自動生成一個用戶可以很容易解決但是計算機系統卻很難或者根本無法解決的問題。其中文本驗證碼是使用最廣泛的驗證碼技術之一,目前對于它的識別研究已經成為了一個比較熱門的領域[1]。
George D等人[2]根據神經科學基礎—人體記憶物體時總是同時記憶該物體的輪廓和表面特征,提出了遞歸皮層網絡(Recursive Cortical Network,RCN),將驗證碼的識別過程分為表征、推理和學習三個步驟。盡管該方案能獲得較好的識別準確率,對訓練集樣本數量要求要較低,但計算量龐大,需要較好的硬件設備。Dazhen Lin等人[3]針對基于漢字的驗證碼提出了新的卷積神經網絡模型,對混合干擾的驗證碼進行測試,識別準確率均達到85%以上。但實驗樣本字符間有明顯間隔,且反分割手段較差。Xing Wu等人[4]對帶有噪聲的可變長的基于漢字的文本驗證碼進行了研究,實驗結果表明,所提出的方法能夠有效地識別出帶有噪聲的可變長漢字驗證碼。但該方法受數據集影響明顯,并且字符分割方案不適用于具有復雜反分割手段的驗證碼。
基于國內外學者的研究,本文提出了一種基于圖像處理和卷積神經網絡的文本驗證碼識別方案,本文設計的圖像分割算法具有較好的通用性,能夠有效提取出字符并且識別具有較高的準確率。
原始驗證碼圖片一般為RGB彩色圖片,并且帶有噪聲弧線等干擾。預處理階段的主要目的是去除驗證碼圖片中的冗余信息(如背景顏色、噪聲弧線等)。此階段的流程如圖1所示。其中,二值化過程采用最大類間方差法,采用3×3的中值濾波去除噪聲。經過預處理的圖像如圖2所示。

圖1 預處理流程圖

圖2 預處理效果圖
形態學腐蝕[5]可以細化字符,從而進一步減少噪聲,并去除毛刺,腐蝕后的效果圖如圖3所示。
顏色填充算法(Color Filling Segmentation,CFS)[6]是一種連通域分割算法,其基本思想是以某一像素點為起始點遍歷其所在的連通域。但是此方法的缺陷在于無法將斷裂的字符識別為同一連通域,因此本文將對其改進。

圖3 形態學腐蝕效果圖
滴水算法是一種用于分割手寫粘連字符的算法,它模擬水滴的滾動,通過水滴的滾動路徑來分割字符,可以解決直線切割造成的過分分割問題。但該方法無法處理圖中的水平線條遇到邊界導致算法異常結束,因此本文將對其改進。
本文研究方案對顏色填充算法做三個方面的修改:
(1)去除像素個數小于6的連通域;
(2)合并邊界重合率達到70%以上的連通域;
(3)計算保留連通域的平均像素個數,設為T,去除像素個數小于T的四分之一的連通域。
值得說明的是,邊界重合率是兩個不同連通域的位置重合程度指標。設連通域1的橫坐標范圍為[a,b],連通域2的橫坐標范圍為[c,d](其中a 算法效果如圖4所示。 圖4 改進顏色填充算法效果 為更好分割字符,本文對滴水算法做出的修改為: (1)水滴水平滾動時,記錄其左右邊界,當邊界距離超過8像素或再次到達邊界時,取中心位置為下一滴落點; (2)水滴到達底部時,若距離其左側邊界過近(小于右側三分之一)或過遠(大于右側的3倍),則將水滴起始位置分別向右或向左移動1像素,重新開始算法,校正次數超過8次,便判定為分割失敗。 滴水算法效果圖如圖5所示。 圖5 改進的滴水算法效果圖 對于已經預處理完畢的圖片,如果顏色填充算法所得連通域個數正好等于實際字符個數,則直接使用連通域分割,否則,使用滴水算法分割。 如圖6所示為提取的字符效果圖,為降低后續計算量,將其壓縮到32×32。 圖6 提取字符效果圖 本文利用卷積神經網絡(Convolutional Neural Network, CNN)構建了一個模型,并使用字符信息對其進行訓練。 本文設計的卷積神經網絡架構包含三個卷積層、三個池化層、兩個全連接層等,具體架構參數如表1所示。 表1 CNN模型架構參數列表 中心損失(Center Loss)函數是由Wen Y等人[7]針對人臉識別任務提出的一種可以增強深度學習模型判別力的損失函數。中心損失會學習每個類的深層特征從而得到一個類中心,并懲罰每個深層特征與其對應類中心的距離,即更關注類內差異。 具體實現過程可概括為: (1)初始化類中心、學習率等參數; 表2 實驗數據集 (2)如果已收斂,則結束;否則根據每批次輸入數據計算中心損失,根據梯度計算反向傳播誤差,再更新每個類的中心。 在本文設計的方案中,類深度特征中心的學習率η與誤差反向傳播的學習率相同,中心損失占總損失的權重λ為0.01。 本文數據集均來自生成和網絡采集,具體如表2所示。 本文設計并實現的字符分割算法,聯合投影分析、顏色填充算法等多種技術進行字符預分割操作,根據每張驗證碼圖片中字符間的實際情況決定采用連通域分割或者修改的滴水算法分割,從而提取出獨立字符。本文對于表2中的實驗數據集進行了試驗評估,各數據集的字符分割成功率如表3所示。可以看出,本文的方法在各數據集上的效果都很好。 為了進一步評估本文提出的文本驗證碼識別算法,本文還將實驗結果與相關研究進行了比較。本文復現了引言中提到的各方案,在各數據集上識別準確率的比較如表4所示,可以看出本文提出的方案在各實驗數據集上均能表現出一定優勢,僅在實驗數據集F和H略遜于RCN和FRN,這是由于本文使用了CNN作為識別網絡,該網絡需要較龐大的訓練數據集,而實驗數據集F和H卻偏小,造成了一定的過擬合,但在實驗數據集G和I(分別是對數據集F和H的擴充)上,本文方案識別準確率取得了明顯的提升,可以超過使用RCN和FRN的方案。值得說明的是,表4中存在一些空缺項,空缺原因是該算法不適用于對應的數據集。 總體來看,本文提出的文本驗證碼識別方案對于字符獨立和存在字符粘連、噪聲塊與噪聲線等反分割設計的文本驗證碼均能表現出更好的識別性能,當字符訓練數據集較小時也能通過擴充的方式提高識別準確率。 驗證碼是互聯網業務的安全基礎設施之一,也是目前保障電子商務業務安全的重要環節之一。本文提出了一種通用的文本驗證碼識別方案,即先進行預處理,再使用改進的顏色填充算法和滴水算法進行字符分割,最后進行字符識別。此外,本文構建了一個具有三個卷積層、三個池化層、兩個全連接層的卷積神經網絡,并引入了中心損失來最小化類內差異。實驗部分,本文復現了四種典型的文本驗證碼方法,通過準確率的比較發現,本文提出的方案在各實驗數據集上均能表現出一定優勢。雖然在數據集F和H上不如RCN和FRN,但是在擴充數據集G和I上,解決了過擬合現象后,實現了準確率的明顯提升。實驗結果表明,本文提出的方法能夠有效提取出驗證碼字符,并且能獲得更高的識別準確率。

3.2 改進的滴水算法

3.3 提取字符

4 字符識別
4.1 神經網絡結構

4.2 中心損失

5 實驗結果
5.1 實驗數據集
5.2 字符分割算法評估
5.3 模型評估
6 結束語