1. 程式人生 > >用次世代2.3訓練自己的字元庫cds小demo

用次世代2.3訓練自己的字元庫cds小demo

從我前幾天寫的 python 基於次世代驗證碼識別系統的小demo 中大家可以得知,如果有antiVC.dll 和關於特定網站的字元庫cds,我們就能夠讓瀏覽器自動識別驗證碼了。雖然網路有不少視訊關於怎麼訓練cds,我還是總結下吧,哎,備忘。

自己訓練資料相對於去購買什麼超級鷹API啊,de-captcher啊這種驗證碼識別平臺,有2個好處,一是不用考慮網路延遲,二是API都是收費的,小弟我也是Naive得貢獻了10幾刀的,╮(╯▽╰)╭

這裡可以貢獻下怎麼用de-captcher的驗證平臺(前提是你先註冊了de-captcher使用者並且購買了次數):

#驗證碼線上驗證
def getTextFromImg(img_file):
    data = {
        'username': 'your_user',
        'password': 'your_pass',
        'function': 'picture2',
        'pict_to': '0',
        'pict_type': '0',
        'pict': img_file
    }
    keys = 'ResultCode|MajorID|MinorID|Type|Timeout|Text'.split('|')
    de_captcher_server = "http://poster.de-captcher.com/"
    try:
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
        result = opener.open(de_captcher_server, urllib.urlencode(data))
        data = result.read()
        #print 'check_code:',data
        return dict(zip(keys, data.split('|')))
    except KeyError,e:
        print str(e)
        return result


可以發現它的驗證碼地址是我們最喜歡的固定URL,每次F5都是新的驗證碼。

有些網站驗證碼動態URL,而且還是JS生成,我們需要JS解析器。

那個要自己寫指令碼跑,思路有兩種:

二是通過selenium+PhantomJS,動態解析頁面原始碼下載下來,獲取URL後通過訪問下載圖片,可參考我之前寫的:selenium 操控瀏覽器

有些同學可能發現了,方法二得到的驗證碼是不同於第一次獲得的驗證碼,畢竟每次訪問都會更新,又有什麼關係呢?

我們只要獲得驗證碼圖片用來訓練就行了。

總之上面的情況暫時不考慮,我們現在遇到的是最簡單的情況,同一URL可獲取不同的驗證碼:



然後依次選擇:分割識別、平均分割(因為看起來四四方方的很規整)、顯示字元分割矩形框、顯示識別結果、點選最右邊的加號選擇影象二值化:

再點選字模管理,選中自動分割影象:


雙擊第一個矩形“9”:


選擇切除白邊(有些雜點多的還要去除雜點),然後在右邊對應字元填下:9,告訴程式,以後遇見這種字元它就是9:


弄完一個後點擊“影象過載”,對第二個矩形3,做同樣的操作:


填入3後,我們可以看到已經有兩個字模了,弄完這些就可以儲存退出:


好的回到主介面,我們點選重新識別,可以看到喜人的結果:


好的,當你識別率很高很高的時候,點選專案管理,釋出識別庫,就能生存可愛的專屬的cds啦,不過正版軟體每次25軟妹幣,你捨得嗎?

吐槽下:

這基本上是我遇到的最最簡單的字模建立了,沒任何雜點,驗證碼超級規整,和我攻克的網站一比較就是被吊打的存在。。

有些難的,2000個字模以下別想識別成功,2k個啊有木有!!

要做足足兩天啊有木有!!!

難怪淘寶特定網站cds售價都是2k,3k軟妹幣啊有木有!!!

不是人幹得的啊有木有!!!

而且你還以為有些網站驗證碼這麼容易獲得嗎?還不是一個個用指令碼去跑的啊有木有!!