如何識別高級的驗證碼的技術(shù)總結(jié)
更新時間:2008年06月26日 22:24:13 作者:
這個問題,本身是人工智能,計算機(jī)視覺,模式識別領(lǐng)域的一個難題。作為破解者來說,是出于劣勢地位。要做的很好,是很難得。總體來說,我走的是比較學(xué)院派的線路,能真正的破解難度比較高的驗證碼,不同于網(wǎng)上很多不太入流的破解方法。
五、高級驗證碼的破解分析
時間關(guān)系,我簡單介紹如何利用圖像處理和模式識別技術(shù),自動識別比較高級的驗證碼。
(以風(fēng)頭正勁的Google為例)

1)至少從目前的AI的發(fā)展程度看,沒有簡單的做法能自動處理各種不同的驗證碼,即使能力很強(qiáng),那么系統(tǒng)自然也十分復(fù)雜強(qiáng)大。所以,要想在很簡單的算法實現(xiàn)比較高級的驗證碼破解,必須分析不同驗證碼算法的特點:
作為一般的圖像處理和計算機(jī)視覺,會考慮色彩,紋理,形狀等直接的特征,同時也考慮直方圖,灰度等統(tǒng)計特征,還考慮FFT,Wavelet等各種變換后的特征。但最終目標(biāo)都是Dimension Reduction(降維)然后利于識別,不僅僅是速度的考慮。從圖像的角度看,很多系統(tǒng)都考慮轉(zhuǎn)換為灰度級甚者黑白圖片。
Google的圖片可以看出,顏色變化是虛晃一槍,不存在任何處理難度。難度是字體變形和字符粘連。
如果能成功的分割字符,那么后期識別無論是用SVM等分類算法,還是分析筆順比劃走向來硬識別,都相對好做。
2)圖像處理和粘連分割
代碼中的part1目錄主要完成圖像預(yù)處理和粘連字符分割
001:將圖像從jpg等格式轉(zhuǎn)換為位圖便于處理
002:采用Fix/Adaptive的Threshold門限算法,將圖片Bin-Value二值化。(可用003算法)
003:采用OSTU分水嶺算法,將圖片Bin-Value二值化。(更通用,大部分時候效果更好)
005:獲取ROI感興趣的區(qū)域。
006:Edge Trace邊緣跟蹤。
007:Edge Detection邊界檢測。
008:Thin細(xì)化去骨架。
009:做了一些Tidy整理。(這個一般要根據(jù)特定的Captcha算法調(diào)整)
010:做切割,注意圖片中紅色的交叉點。
011:將邊緣檢測和骨干交叉點監(jiān)測的圖像合并。(合并過程可以做分析: 比如X坐標(biāo)偏移門限分析,交叉點區(qū)域紋理分析,線條走勢分析,等等各種方法,找出更可能的切分點和分離后部件的組合管理。)

注:在這里,我們可以看到,基本的部件(字母是分割開了,但可以造成統(tǒng)一字母的被切割成多個Component。 一種做法是:利用先驗知識,做分割; 另外一種做法是,和第二部分的識別結(jié)合起來。 比如按照從左至右,嘗試增加component來識別,如果不能識別而且component的總寬度,總面積還比較小,繼續(xù)增加。 當(dāng)然不排除拒識的可能性。)
3)字符部件組合和識別。
part2的代碼展示了切割后的字母組合,和基于svm的字符識別的訓(xùn)練和識別過程。
Detection.cpp中展示了ImageSpam檢測過程中的一些字符分割和組合,layout的分析和利用的簡單技術(shù)。 而Google的驗證碼的識別,完全可以不用到,僅做參考。
SVM及使用:
本質(zhì)上,SVM是一個分類器,原始的SVM是一個兩類分類的分類器??梢酝ㄟ^1:1或者1:n的方式來組合成一個多類分類的分類器。 天生通過核函數(shù)的使用支持高維數(shù)據(jù)的分類。從幾何意義上講,就是找到最能表示類別特征的那些向量(支持向量SV),然后找到一條線,能最大化分類的Margin。
libSVM是一個不錯的實現(xiàn)。
訓(xùn)練間斷和識別階段的數(shù)據(jù)整理和歸一化是一樣的。這里的簡單做法是:
首先:
#define SVM_MAX +0.999
#define SVM_MIN +0.001
其次:
掃描黑白待識別字幕圖片的每個像素,如果為0(黑色,是字母上的像素),那么svm中該位置就SVM_MAX,反之則反。
最后:
訓(xùn)練階段,在svm的input的前面,為該類打上標(biāo)記,即是那一個字母。
識別階段,當(dāng)然這個類別標(biāo)記是SVM分類出來。
注意:
如果是SVM菜鳥,最好找一個在SVM外邊做了包裝的工具,比如樣本選擇,交叉驗證,核函數(shù)選擇這些,讓程序自動選擇和分析。
六、對驗證碼設(shè)計的一些建議
1.在噪音等類型的使用上,盡力讓字符和用來混淆的前景和背景不容易區(qū)分。盡力讓壞人(噪音)長得和好人(字母)一樣。
2.特別好的驗證碼的設(shè)計,要盡力發(fā)揮人類擅長而AI算法不擅長的。 比如粘連字符的分割和手寫體(通過印刷體做特別的變形也可以)。 而不要一味的去加一些看起來比較復(fù)雜的噪音或者其他的花哨的東西。即使你做的足夠復(fù)雜,但如果人也難識別,顯然別人認(rèn)為你是沒事找抽型的。
3. 從專業(yè)的機(jī)器視覺的角度說,驗證碼的設(shè)計,一定要讓破解者在識別階段,反復(fù)在低階視覺和高階視覺之間多反復(fù)幾次才能識別出來。 這樣可以大大降低破解難度和破解的準(zhǔn)確率。
七、鄭重申明
1.這個問題,本身是人工智能,計算機(jī)視覺,模式識別領(lǐng)域的一個難題。作為破解者來說,是出于劣勢地位。要做的很好,是很難得??傮w來說,我走的是比較學(xué)院派的線路,能真正的破解難度比較高的驗證碼,不同于網(wǎng)上很多不太入流的破解方法。我能做的只有利用有限的知識,拋磚引玉而已。很多OCR的技術(shù),特別是離線手寫體中文等文字識別的技術(shù),個人了解有限的很,都不敢在這里亂寫。
五、高級驗證碼的破解分析
時間關(guān)系,我簡單介紹如何利用圖像處理和模式識別技術(shù),自動識別比較高級的驗證碼。
(以風(fēng)頭正勁的Google為例)

1)至少從目前的AI的發(fā)展程度看,沒有簡單的做法能自動處理各種不同的驗證碼,即使能力很強(qiáng),那么系統(tǒng)自然也十分復(fù)雜強(qiáng)大。所以,要想在很簡單的算法實現(xiàn)比較高級的驗證碼破解,必須分析不同驗證碼算法的特點:
作為一般的圖像處理和計算機(jī)視覺,會考慮色彩,紋理,形狀等直接的特征,同時也考慮直方圖,灰度等統(tǒng)計特征,還考慮FFT,Wavelet等各種變換后的特征。但最終目標(biāo)都是Dimension Reduction(降維)然后利于識別,不僅僅是速度的考慮。從圖像的角度看,很多系統(tǒng)都考慮轉(zhuǎn)換為灰度級甚者黑白圖片。
Google的圖片可以看出,顏色變化是虛晃一槍,不存在任何處理難度。難度是字體變形和字符粘連。
如果能成功的分割字符,那么后期識別無論是用SVM等分類算法,還是分析筆順比劃走向來硬識別,都相對好做。
2)圖像處理和粘連分割
代碼中的part1目錄主要完成圖像預(yù)處理和粘連字符分割
001:將圖像從jpg等格式轉(zhuǎn)換為位圖便于處理
002:采用Fix/Adaptive的Threshold門限算法,將圖片Bin-Value二值化。(可用003算法)
003:采用OSTU分水嶺算法,將圖片Bin-Value二值化。(更通用,大部分時候效果更好)
005:獲取ROI感興趣的區(qū)域。
006:Edge Trace邊緣跟蹤。
007:Edge Detection邊界檢測。
008:Thin細(xì)化去骨架。
009:做了一些Tidy整理。(這個一般要根據(jù)特定的Captcha算法調(diào)整)
010:做切割,注意圖片中紅色的交叉點。
011:將邊緣檢測和骨干交叉點監(jiān)測的圖像合并。(合并過程可以做分析: 比如X坐標(biāo)偏移門限分析,交叉點區(qū)域紋理分析,線條走勢分析,等等各種方法,找出更可能的切分點和分離后部件的組合管理。)

注:在這里,我們可以看到,基本的部件(字母是分割開了,但可以造成統(tǒng)一字母的被切割成多個Component。 一種做法是:利用先驗知識,做分割; 另外一種做法是,和第二部分的識別結(jié)合起來。 比如按照從左至右,嘗試增加component來識別,如果不能識別而且component的總寬度,總面積還比較小,繼續(xù)增加。 當(dāng)然不排除拒識的可能性。)
3)字符部件組合和識別。
part2的代碼展示了切割后的字母組合,和基于svm的字符識別的訓(xùn)練和識別過程。
Detection.cpp中展示了ImageSpam檢測過程中的一些字符分割和組合,layout的分析和利用的簡單技術(shù)。 而Google的驗證碼的識別,完全可以不用到,僅做參考。
SVM及使用:
本質(zhì)上,SVM是一個分類器,原始的SVM是一個兩類分類的分類器??梢酝ㄟ^1:1或者1:n的方式來組合成一個多類分類的分類器。 天生通過核函數(shù)的使用支持高維數(shù)據(jù)的分類。從幾何意義上講,就是找到最能表示類別特征的那些向量(支持向量SV),然后找到一條線,能最大化分類的Margin。
libSVM是一個不錯的實現(xiàn)。
訓(xùn)練間斷和識別階段的數(shù)據(jù)整理和歸一化是一樣的。這里的簡單做法是:
首先:
#define SVM_MAX +0.999
#define SVM_MIN +0.001
其次:
掃描黑白待識別字幕圖片的每個像素,如果為0(黑色,是字母上的像素),那么svm中該位置就SVM_MAX,反之則反。
最后:
訓(xùn)練階段,在svm的input的前面,為該類打上標(biāo)記,即是那一個字母。
識別階段,當(dāng)然這個類別標(biāo)記是SVM分類出來。
注意:
如果是SVM菜鳥,最好找一個在SVM外邊做了包裝的工具,比如樣本選擇,交叉驗證,核函數(shù)選擇這些,讓程序自動選擇和分析。
六、對驗證碼設(shè)計的一些建議
1.在噪音等類型的使用上,盡力讓字符和用來混淆的前景和背景不容易區(qū)分。盡力讓壞人(噪音)長得和好人(字母)一樣。
2.特別好的驗證碼的設(shè)計,要盡力發(fā)揮人類擅長而AI算法不擅長的。 比如粘連字符的分割和手寫體(通過印刷體做特別的變形也可以)。 而不要一味的去加一些看起來比較復(fù)雜的噪音或者其他的花哨的東西。即使你做的足夠復(fù)雜,但如果人也難識別,顯然別人認(rèn)為你是沒事找抽型的。
3. 從專業(yè)的機(jī)器視覺的角度說,驗證碼的設(shè)計,一定要讓破解者在識別階段,反復(fù)在低階視覺和高階視覺之間多反復(fù)幾次才能識別出來。 這樣可以大大降低破解難度和破解的準(zhǔn)確率。
七、鄭重申明
1.這個問題,本身是人工智能,計算機(jī)視覺,模式識別領(lǐng)域的一個難題。作為破解者來說,是出于劣勢地位。要做的很好,是很難得??傮w來說,我走的是比較學(xué)院派的線路,能真正的破解難度比較高的驗證碼,不同于網(wǎng)上很多不太入流的破解方法。我能做的只有利用有限的知識,拋磚引玉而已。很多OCR的技術(shù),特別是離線手寫體中文等文字識別的技術(shù),個人了解有限的很,都不敢在這里亂寫。
相關(guān)文章
徐州市婚姻登記機(jī)關(guān)地址及聯(lián)系電話信息及需要的資料
登記一般需要身份證+戶口本(最好家人的都拿過去,一般需要看第一頁)2008-03-03
學(xué)習(xí)dreamweaver cs3新功能之直接生成div+css頁面
學(xué)習(xí)dreamweaver cs3新功能之直接生成div+css頁面...2007-09-09
ntoskrnl.exe丟失系統(tǒng)無法啟動的解決方法
ntoskrnl.exe文件丟失或損壞,系統(tǒng)無法啟動的解決方法2008-08-08
LBS BLOG在IE7下圖片出現(xiàn)滾動條的解決方法
LBS BLOG在IE7下圖片出現(xiàn)滾動條的解決方法...2006-12-12
解決開機(jī)時svchost.exe的CPU占用率過高導(dǎo)致系統(tǒng)異常緩慢
解決開機(jī)時svchost.exe的CPU占用率過高導(dǎo)致系統(tǒng)異常緩慢...2007-02-02

