百度貼吧的驗(yàn)證碼如下圖所示
http://tieba.baidu.com/f?kw=Discuz&ie=utf-8&fr=wwwt#sub
驗(yàn)證碼地址:
刷新一下就會變成新的字符。
搗鼓了一兩天的時間,對于手動分割好的單個字符的識別準(zhǔn)確率倒是不低,不過始終沒能很好的解決粘連字符的分割問題,后來就放下了。
這兩天一同學(xué)讓幫忙破解一網(wǎng)站的驗(yàn)證碼,瞅了下是比較傳統(tǒng)的數(shù)字驗(yàn)證碼,而且無粘連、扭曲、傾斜,于是就開始著手破解了。
要識別的驗(yàn)證碼如下圖所示:
從上面的驗(yàn)證碼可以看出,破解的工作無需考慮字符的分割問題,而只需將精力花在背景的去除上。乍一看,每個字符周圍的背景雜點(diǎn)都跟字符的顏色很接近,看上去不太容易過濾調(diào)背景雜點(diǎn)而只保留字符本身,實(shí)際上做起來也不容易。起初考慮過幾種閾值化處理操作,可處理后的結(jié)果一點(diǎn)也不理想。幾次嘗試失敗之后,考慮到此種驗(yàn)證碼主要是在前景與背景的顏色上做文章,于是我打算分析驗(yàn)證碼的顏色分布直方圖,看能不能找出突破口。由于每個字符周圍的雜點(diǎn)顏色跟該字符的顏色相關(guān),而與其他字符的顏色無關(guān),所以我接下來的顏色直方圖的分析都只是針對分割后的單個字符。
就拿舉例吧,分割后的每個字符所對應(yīng)的顏色直方圖如下圖所示:
↓↓
↓↓
↓↓
↓↓
畫出每個字符的顏色分布直方圖之后,一眼便看出了驗(yàn)證碼背后存在某種規(guī)律。進(jìn)一步分析可得知,直方圖左側(cè)孤立的小塊區(qū)域正是字符本身的顏色,而右側(cè)的大塊區(qū)域則全是背景雜色,因此只要我們得出直方圖左側(cè)塊的顏色范圍,便可去除非字符本身的雜點(diǎn),至于這個范圍的獲取想必不會有人會認(rèn)為是難事。
去除背景并進(jìn)行圖像二值化后就會得到下圖所示的字符圖片:
-> -> -> ->
接下來要做的事情便是識別這些無背景雜點(diǎn)的二值圖像字符,方法有很多,我用的是機(jī)器學(xué)習(xí)的方法,背景去除成功的情況下的識別率基本接近于100%。