識別動網驗證碼和CSDN驗證碼的思路

2021-06-15 21:26:40 字數 2247 閱讀 3039

動網的驗證碼

基於向量,摻雜向量的角度值隨機偏移和長度值隨機偏移,預設的比例為角度:10度和長度:10%

特點:大小固定,預設80*20。數字個數固定,預設4,每個數字大小固定,預設20*20。

向量隨機角度值(預設隨機量10°)和隨機長度值(預設隨機量10%比率)。最終根據隨機後的點陣自動縮放大小調整。

有隨機噪點。預設噪點比率:背景20%,數字10%。

噪點特徵:brightness > 50

數字可隨機顏色。數字的brightness均為50

識別思路如下:

1.去噪點

濾去所有brightness不是50的點。這樣會使數字上的噪點也被除去,造成數字失真。由於實際上採用的識別比對是基於統計的,所以關係不大。但也可以使用帶權的中值濾波進行一定程度的修復。權值: 當前點 : 臨接點 : 斜點 = 4 : 2 : 1 = 0.25 : 0.125 : 0.0625 。 將brightness>50的點填充為白點,=50的點填充為黑點,存到陣列中也可以只用bool或者 0/1表示

ps: 取 brightness 的方法,請搜尋 hsb/ hsv 的說明。.net 2.0中 color.getbrightness方法可以直接取到,結果值域 [0.0,1.0]

2.分塊統計

將20 * 20的數字及其背景分為 5 * 5 個小塊,每塊包含16個畫素點,存放在乙個25個元素的陣列。由於前面已經做過去噪,所以陣列中可以僅僅儲存該小塊內包含的數字點的個數。

3.比對

將與資料庫中儲存的0~9十個數字的對應小塊的點數值進行方差計算。與0~9中分塊點數的方差最小的數字作為識別結果返回。

4. 資料庫說明

資料庫中的資料可通過學習統計而來。大約對每個數字統計100~200個左右的樣本即可。

5. 分析

6.測試結果

未加中值濾波操作

對程式進行了100次識別測試,每次四個字元,正確89次,失敗9~11次,其中錯誤12個字元,有兩個1/2完全無法分辨,所以不能判斷是正確還是錯誤,還有兩個識別錯誤的,肉眼也同樣很難分辨。

字元識別準確率在97%左右。個別字元,如3,4,7,0,沒有出現錯誤,可以認為99%以上準確率。

可以認為總體識別準確率在90%左右。連續兩次識別錯誤的概率在1%左右(測試時有兩次連續兩次識別錯誤 -_-!! )

錯誤字元如下:

識別錯誤統計

原字元

識別字元

出現次數8

6394

1652

6212

3183

1122 ( 不確定原字元為1還是2)53

1合計10~12

測試識別消耗時間如下:

1 載入識別庫     操作耗時:  31 ms ,     312500 ticks

2 網路抓取      操作耗時: 203 ms ,    2031250 ticks

3 儲存        操作耗時:  31 ms ,     312500 ticks

4 識別        操作耗時:  31 ms ,     312500 ticks

0 全部操作      操作耗時: 296 ms ,    2968750 ticks

若只進行識別操作僅需100ms左右。

附本人測試機配置如下:

amd opteron 3000+ , 512m ram (外頻未知), 80 g ata 133 hd , 網路為 adsl 2m

csdn驗證碼

特點:驗證碼位置隨機,沒有旋轉。有噪點和干擾線,隨機顏色的邊框。字元顏色採用漸變色,斜體,大小無變化。相鄰字元會發生粘連的情況。

識別思路:

去邊框

去干擾線和噪點。

識別 從左到右豎向掃瞄,查詢第乙個字元的位置,獲取乙個寬度內的畫素點。

與資料庫字元樣本進行每個畫素的比對或者特徵點比對。由於字元沒有變形和旋轉,所以比對可以採用 == 進行。並統計不匹配點所佔該樣本點的個數的比率。最小的即為識別結果

根據樣本資料庫中記錄的匹配樣本的寬度,去除該寬度範圍(需要考慮到斜體字符的傾斜角度)內的點,從當前點往後進行下乙個字元的掃瞄。

分析 其他驗證碼

qqmail / gmail / hotmail (怎麼都是mail ^_^)的大變形驗證碼不要找我 ~_~

qq zone的沒有仔細看過,可以一試後記

現只對動網驗證碼寫出了識別程式。辛苦所得,暫不公布原始碼 (*^__^*)

CSDN驗證碼識別

獲取影象部分 private stream geturl ref string str private string getnumber 驗證碼識別部分 public class csdn public string readmap bitmap image private int readmap ...

驗證碼 簡單驗證碼識別

這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 興之所至之所以說簡單,我覺得是這樣的 抽了五張驗證碼扔進ps,50 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...

驗證碼識別

驗證碼識別過程好比人大腦的乙個識別過程 首先,我們的眼睛接收,並將這張的資訊輸送給大腦 然後,我們的大腦接收到這個資訊以後,對這個資訊作出處理 最後,將中的有效資訊提取出來再將其和大腦中儲存的資訊進行對應對比,確定對比結果。模擬驗證碼識別,大腦接受的處理過程就相當於電腦對的預處理,大腦對進行對比和確...