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

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

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

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

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