西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識(shí) → 如何提高驗(yàn)證碼圖片識(shí)別

如何提高驗(yàn)證碼圖片識(shí)別

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2012/9/5 11:31:42字體大小:A-A+

作者:不詳點(diǎn)擊:155次評(píng)論:1次標(biāo)簽: 驗(yàn)證碼

  • 類型:源碼相關(guān)大。11KB語言:中文 評(píng)分:.5
  • 標(biāo)簽:
立即下載

一、驗(yàn)證碼的基本知識(shí)

1. 驗(yàn)證碼的主要目的是強(qiáng)制人機(jī)交互來抵御機(jī)器自動(dòng)化攻擊的。

2. 大部分的驗(yàn)證碼設(shè)計(jì)者并不得要領(lǐng),不了解圖像處理,機(jī)器視覺,模式識(shí)別,人工智能的基本概念。

3. 利用驗(yàn)證碼,可以發(fā)財(cái),當(dāng)然要犯罪:比如招商銀行密碼只有6位,驗(yàn)證碼形同虛設(shè),計(jì)算機(jī)很快就能破解一個(gè)有錢的賬戶,很多帳戶是可以網(wǎng)上交易的。

4. 也有設(shè)計(jì)的比較好的,比如Yahoo,Google,Microsoft等。而國內(nèi)Tencent的中文驗(yàn)證碼雖然難,但算不上好。

二、人工智能,模式識(shí)別,機(jī)器視覺,圖像處理的基本知識(shí)

1)主要流程:

比如我們要從一副圖片中,識(shí)別出驗(yàn)證碼;比如我們要從一副圖片中,檢測并識(shí)別出一張人臉。 大概有哪些步驟呢?

1.圖像采集:驗(yàn)證碼呢,就直接通過HTTP抓HTML,然后分析出圖片的url,然后下載保存就可以了。 如果是人臉檢測識(shí)別,一般要通過視屏采集設(shè)備,采集回來,通過A/D轉(zhuǎn)操作,存為數(shù)字圖片或者視頻頻。

2.預(yù)處理:檢測是正確的圖像格式,轉(zhuǎn)換到合適的格式,壓縮,剪切出ROI,去除噪音,灰度化,轉(zhuǎn)換色彩空間這些。

3.檢測:車牌檢測識(shí)別系統(tǒng)要先找到車牌的大概位置,人臉檢測系統(tǒng)要找出圖片中所有的人臉(包括疑似人臉);驗(yàn)證碼識(shí)別呢,主要是找出文字所在的主要區(qū)域。

4.前處理:人臉檢測和識(shí)別,會(huì)對(duì)人臉在識(shí)別前作一些校正,比如面內(nèi)面外的旋轉(zhuǎn),扭曲等。我這里的驗(yàn)證碼識(shí)別,“一般”要做文字的切割

5.訓(xùn)練:通過各種模式識(shí)別,機(jī)器學(xué)習(xí)算法,來挑選和訓(xùn)練合適數(shù)量的訓(xùn)練集。不是訓(xùn)練的樣本越多越好。過學(xué)習(xí),泛化能力差的問題可能在這里出現(xiàn)。這一步不是必須的,有些識(shí)別算法是不需要訓(xùn)練的。

6.識(shí)別:輸入待識(shí)別的處理后的圖片,轉(zhuǎn)換成分類器需要的輸入格式,然后通過輸出的類和置信度,來判斷大概可能是哪個(gè)字母。識(shí)別本質(zhì)上就是分類。

2) 關(guān)鍵概念:

圖像處理:一般指針對(duì)數(shù)字圖像的某種數(shù)學(xué)處理。比如投影,鈍化,銳化,細(xì)化,邊緣檢測,二值化,壓縮,各種數(shù)據(jù)變換等等。

1.二值化:一般圖片都是彩色的,按照逼真程度,可能很多級(jí)別。為了降低計(jì)算復(fù)雜度,方便后續(xù)的處理,如果在不損失關(guān)鍵信息的情況下,能將圖片處理成黑白兩種顏色,那就最好不過了。

2.細(xì)化:找出圖像的骨架,圖像線條可能是很寬的,通過細(xì)化將寬度將為1,某些地方可能大于1。不同的細(xì)化算法,可能有不同的差異,比如是否更靠近線條中間,比如是否保持聯(lián)通行等。

3.邊緣檢測:主要是理解邊緣的概念。邊緣實(shí)際上是圖像中圖像像素屬性變化劇烈的地方?赡芡ㄟ^一個(gè)固定的門限值來判斷,也可能是自適應(yīng)的。門限可能是圖像全局的,也可能是局部的。不能說那個(gè)就一定好,不過大部分時(shí)候,自適應(yīng)的局部的門限可能要好點(diǎn)。被分析的,可能是顏色,也可能是灰度圖像的灰度。

機(jī)器視覺:利用計(jì)算機(jī)來模式實(shí)現(xiàn)人的視覺。 比如物體檢測,定位,識(shí)別。按照對(duì)圖像理解的層次的差別,分高階和低階的理解。

模式識(shí)別:對(duì)事物或者現(xiàn)象的某種表示方式(數(shù)值,文字,我們這里主要想說的是數(shù)值),通過一些處理和分析,來描述,歸類,理解,解釋這些事物,現(xiàn)象及其某種抽象。

人工智能:這種概念比較寬,上面這些都屬于人工智能這個(gè)大的方向。簡單點(diǎn)不要過分學(xué)院派的理解就是,把人類的很“智能”的東西給模擬出來協(xié)助生物的人來處理問題,特別是在計(jì)算機(jī)里面。

三、常見的驗(yàn)證碼的破解分析

http://libcaca.zoy.org/wiki/PWNtcha 這里PWNtcha項(xiàng)目中的資料為例分析,各種驗(yàn)證碼的破解。(方法很多,僅僅從我個(gè)人乍看之下覺得可行的方法來分析)

1)Authimage


使用的反破解技巧:

1.不連續(xù)的點(diǎn)組成字符
2.有一定程度的傾斜

設(shè)計(jì)不好的地方:

1.通過縱橫的直方圖投影,可以找到字幕區(qū)域
2.通過Hough變換,適當(dāng)?shù)膮?shù),可以找到近似的橫線,可以做傾斜矯正
3.字符串的傾斜式面內(nèi)的,沒有太多的破解難度
4.字母寬度一定,大小一定

2)Clubic


使用的反破解技巧:

1.字符是手寫體

設(shè)計(jì)不好的地方:

1.檢測切割階段沒有任何技術(shù)含量,屬于設(shè)計(jì)的比較丑的
2.只有數(shù)字,而且手寫體變化不大
3.表面看起來對(duì)識(shí)別階段有難度,仔細(xì)分析,發(fā)現(xiàn)幾乎不用任何高級(jí)的訓(xùn)練識(shí)別算法,就固定的招某些像素點(diǎn)是否有色彩就夠了

3)linuxfr.org


使用的反破解技巧:

1.背景顏色塊
2.前景的橫線或矩形

設(shè)計(jì)不好的地方:

1.背景色是單一色塊,有形狀,通過Region-Growth區(qū)域增長來很容易把背景給去掉
2.前景色是標(biāo)準(zhǔn)的線條,色彩單一
3.字母無粘連
4.都是印刷體

4)Ourcolony


使用的反破解技巧:

1.設(shè)計(jì)的太低級(jí),不屑于去評(píng)價(jià)

設(shè)計(jì)不好的地方:

1.這種驗(yàn)證碼,設(shè)計(jì)的最丑,但還是能把菜鳥搞定,畢竟學(xué)計(jì)算機(jī)的少,搞這個(gè)破解的更少,正所謂隔行如隔山

5)LiveJournal


使用的反破解技巧:

1.這個(gè)設(shè)計(jì)略微好點(diǎn),使用個(gè)隨機(jī)噪音,而且作為前景
2.字母位置粗細(xì)都有變化

設(shè)計(jì)不好的地方:

1.字母沒有粘連
2.噪音類型單一
3.通過在X軸的直方圖投影,能準(zhǔn)確分割字幕
4.然后在Y周作直方圖投影,能準(zhǔn)確定位高度
5.識(shí)別階段,都是印刷體,簡單地很

四、網(wǎng)上的一些高級(jí)驗(yàn)證碼

1) ICQ


2) IMDb


3) MS MVPS

4)MVN Forum

這些類型是被很多人認(rèn)為比較難得類型,分析一下可以發(fā)現(xiàn),字符檢測,定位和分割都不是難。 唯一影響識(shí)別率的是IMDBb和MVPS這兩類,字體變形略大。

總體來說,這些類型的破解也不難,很容易做到50%以上的識(shí)別率。

五、高級(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)和分離后部件的組合管理。)


代碼:(代碼質(zhì)量不高,從其他項(xiàng)目拷貝過來,簡單修改的。)

查看代碼(./pstzine_09_01.txt)

注: 在這里,我們可以看到,基本的部件(字母是分割開了,但可以造成統(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)選擇和分析。

代碼:通過ReginGrowth來提取單個(gè)單個(gè)的字符,然后開始識(shí)別。

查看代碼(./pstzine_09_02.txt)

六、對(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)確率。

七、個(gè)人鄭重申明

1.這個(gè)問題,本身是人工智能,計(jì)算機(jī)視覺,模式識(shí)別領(lǐng)域的一個(gè)難題。我是蝦米,菜得不能再菜的那種。作為破解者來說,是出于劣勢地位。要做的很好,是很難得?傮w來說,我走的是比較學(xué)院派的線路,能真正的破解難度比較高的驗(yàn)證碼,不同于網(wǎng)上很多不太入流的破解方法。我能做的只有利用有限的知識(shí),拋磚引玉而已。 很多OCR的技術(shù),特別是離線手寫體中文等文字識(shí)別的技術(shù),個(gè)人了解有限的很,都不敢在這里亂寫。

2.希望不要把這種技術(shù)用于非法用途

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)