資源描述:
《驗證碼識別基礎方法及源碼》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、先說說寫這個的背景?????最近有朋友在搞一個東西,已經(jīng)做的挺不錯了,最后想再完美一點,于是乎就提議把這種驗證碼給K.O.了,于是乎就K.O.了這個驗證碼。達到單個圖片識別時間小于200ms,500個樣本人工統(tǒng)計正確率為95%。由于本人沒有相關經(jīng)驗,是摸著石頭過河。本著經(jīng)驗分享的精神,分享一下整個分析的思路。在各位大神面前獻丑了。??????再看看部分識別結果?????是不是看著很眼熟???????處理第一步,去背景噪音和二值化?????對于這一塊,考慮了幾種方法。?????方法一,統(tǒng)計圖片顏色分布,顏色占有率低的判定為背景噪音。由于背景噪音和前景色區(qū)分并不明顯,嘗試了很多種取景方法都
2、不能很好去除背景噪音,最終放棄了這種方法。?????方法二,事后在網(wǎng)上稍微查了下,最近比較流行計算灰度后設定一個閾值進行二值化。其實所謂的灰度圖片原理是根據(jù)人眼對色彩敏感度取了權值,這個權值對計算機來說沒有什么意義。稍微想一下就可以發(fā)現(xiàn),這兩個過程完全可以合并。于是乎我一步完成了去背景噪音和二值化。閾值設置為RGB三分量之和到500。結果非常令人滿意。??????處理第二步,制作字符樣本?????樣本對于計算機來說是非常重要的,因為計算機很難有邏輯思維,就算有邏輯思維也要經(jīng)過長期訓練才能讓你滿意。所以要用事先制作好的樣本進行比較。如果你仔細觀察過這些驗證碼會發(fā)現(xiàn)一個bug,幾乎大部分的
3、驗證碼都是使用同樣的字體,于是乎就人工制作了一套字體的樣本。由于上一步已經(jīng)有去除背景噪音的結果,可以直接利用。制作樣本這一步有點簡單枯燥,還需要細心??赡芤驗槟愕囊粋€不細心會導致某個符號的識別率偏低。在這500個樣本中,只發(fā)現(xiàn)了31個字符。幸虧是某部門的某人員還考慮到了易錯的字符,例如,1和I,0和O等。要不然這個某部門要背負更多的罵名。??????處理第三步,匹配?????單個匹配用了最簡單最原始的二值比較,不過匹配的是匹配率而不是匹配數(shù)。我定義了相關的計分原則。大原則是“該有的有了加分,該有的沒了減分,不該有的有了適度減分,可達區(qū)域外的不算分”。?????由于一些符號的部分區(qū)域匹配
4、結果跟另一些符號的完整匹配結果相似,需要把單個匹配在一個擴大的區(qū)域內(nèi)擇優(yōu)。在一定的范圍內(nèi),找到一個最佳匹配,這個最佳匹配就是當前位置對應的符號。?????完成了一次最佳匹配,可以把匹配位置向右推進一大步,若找不到合適的最佳匹配就向右推進一小步。??????處理第四步,優(yōu)化和調整?????任何一個算法都是需要優(yōu)化和調整的?,F(xiàn)在要找到最佳參數(shù)配置和最佳代碼組織。這一步往往是需要花費最多時間和精力的。??????處理第五步,驗證結果?????這一步呢,純?nèi)肆︱炞C結果,統(tǒng)計出正確率。??????思考?????結果是出來了,代碼也不多,效果也很理想。搞這一行的,很多時候都想要通用的。能否通用,很
5、大程度上在于抽象層次。本方法只是單純的匹配,自然不能通用,但是方法和思想?yún)s是通用的。具體案例具體分析。至于扭曲文字、空心文字等,處理要復雜的多。網(wǎng)上也有一些使用第三方圖像庫的方法,也許那些方法會比較通用。等有空了有興趣了繼續(xù)搞一下這個主題。??????源碼?????至于這個源碼要不要發(fā)布,糾結了一段時間。網(wǎng)上已經(jīng)有類似的商業(yè)活動了,而且這個識別本身沒有太大難度,再加上某系統(tǒng)天生的bug,此驗證碼本身就相當于沒有設置,因此發(fā)布此代碼,僅作于學習交流。+ViewCode?12345678910111213141516171819usingSystem.Collections.Generic
6、;usingSystem.Drawing;usingSystem.IO;usingSystem.IO.Compression;??namespaceCrack12306Captcha{????publicclassCracker????{????????Listwords_=newList();??????????publicCracker()????????{????????????varbytes=newbyte[]{?????????????????0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0
7、x00,0xc5,0x58,0xd9,0x92,0x13,0x31,?????????????????0x0c,0x94,0x9e,0x93,0x0c,0x61,0x97,0x2f,0xe1,0x58,0xe0,0x91,0x9b,0x82,0x62,0x0b,?????????????????0x58,0xee,0xff,0xff,0x10,0xd8,2021222324252627282930313233343536373839404142