久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

寫(xiě)爬蟲(chóng)有一個(gè)繞不過(guò)去的問(wèn)題就是驗(yàn)證碼,現(xiàn)在驗(yàn)證碼分類(lèi)大概有4種:

  1. 圖像類(lèi)
  2. 滑動(dòng)類(lèi)
  3. 點(diǎn)擊類(lèi)
  4. 語(yǔ)音類(lèi)

今天先來(lái)看看圖像類(lèi),這類(lèi)驗(yàn)證碼大多是數(shù)字、字母的組合,國(guó)內(nèi)也有使用漢字的。在這個(gè)基礎(chǔ)上增加噪點(diǎn)、干擾線、變形、重疊、不同字體顏色等方法來(lái)增加識(shí)別難度。
相應(yīng)的,驗(yàn)證碼識(shí)別大體可以分為下面幾個(gè)步驟:

  1. 灰度處理
  2. 增加對(duì)比度(可選)
  3. 二值化
  4. 降噪
  5. 傾斜校正分割字符
  6. 建立訓(xùn)練庫(kù)
  7. 識(shí)別

由于是實(shí)驗(yàn)性質(zhì)的,文中用到的驗(yàn)證碼均為程序生成而不是批量下載真實(shí)的網(wǎng)站驗(yàn)證碼,這樣做的好處就是可以有大量的知道明確結(jié)果的數(shù)據(jù)集。
當(dāng)需要真實(shí)環(huán)境下需要獲取數(shù)據(jù)時(shí),可以使用結(jié)合各個(gè)大碼平臺(tái)來(lái)建立數(shù)據(jù)集進(jìn)行訓(xùn)練。

生成驗(yàn)證碼這里我使用Claptcha這個(gè)庫(kù),當(dāng)然Captcha這個(gè)庫(kù)也是個(gè)不錯(cuò)的選擇。

為了生成最簡(jiǎn)單的純數(shù)字、無(wú)干擾的驗(yàn)證碼,首先需要將claptcha.py的285行_drawLine做一些修改,我直接讓這個(gè)函數(shù)返回None,然后開(kāi)始生成驗(yàn)證碼:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

這里需要注意ubuntu的字體路徑,也可以在網(wǎng)上下載其他字體使用。生成驗(yàn)證碼如下:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

可以看出,驗(yàn)證碼有形變。對(duì)于這類(lèi)最簡(jiǎn)單的驗(yàn)證碼,可以直接使用谷歌開(kāi)源的tesserocr來(lái)識(shí)別。

首先安裝:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

然后開(kāi)始識(shí)別:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

可以看出,對(duì)于這種簡(jiǎn)單的驗(yàn)證碼,基本什么都不做識(shí)別率就已經(jīng)很高了。有興趣的小伙伴可以用更多的數(shù)據(jù)來(lái)測(cè)試,這里我就不展開(kāi)了。

接下來(lái),在驗(yàn)證碼背景添加噪點(diǎn)來(lái)看看:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

生成驗(yàn)證碼如下:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

識(shí)別:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

效果還可以。接下來(lái)生成一個(gè)字母數(shù)字組合的:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

生成驗(yàn)證碼如下:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

第3個(gè)為小寫(xiě)字母o,第4個(gè)為大寫(xiě)字母O,第5個(gè)為數(shù)字0,第6個(gè)為小寫(xiě)字母z,第7個(gè)為大寫(xiě)字母Z,最后一個(gè)是數(shù)字2。人眼已經(jīng)跪了有木有!但現(xiàn)在一般驗(yàn)證碼對(duì)大小寫(xiě)是不做嚴(yán)格區(qū)分的,看自動(dòng)識(shí)別什么樣吧:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

人眼都跪的計(jì)算機(jī)當(dāng)然也廢了。但是,對(duì)于一些干擾小、形變不嚴(yán)重的,使用tesserocr還是十分簡(jiǎn)單方便的。然后將修改的claptcha.py的285行_drawLine還原,看添加干擾線的情況。

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

加了條干擾線就完全識(shí)別不出來(lái)了,那么有沒(méi)有什么辦法去除干擾線呢?

雖然圖片看上去是黑白的,但還需要進(jìn)行灰度處理,否則使用load()函數(shù)得到的是某個(gè)像素點(diǎn)的RGB元組而不是單一值了。處理如下:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

處理后的圖片如下:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

可以看出處理后圖片銳化了很多,接下來(lái)嘗試去除干擾線,常見(jiàn)的4鄰域、8鄰域算法。所謂的X鄰域算法,可以參考手機(jī)九宮格輸入法,按鍵5為要判斷的像素點(diǎn),4鄰域就是判斷上下左右,8鄰域就是判斷周?chē)?個(gè)像素點(diǎn)。如果這4或8個(gè)點(diǎn)中255的個(gè)數(shù)大于某個(gè)閾值則判斷這個(gè)點(diǎn)為噪音,閾值可以根據(jù)實(shí)際情況修改。

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

處理后的圖片如下:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

好像……根本沒(méi)卵用???!確實(shí)是這樣的,因?yàn)槭纠械膱D片干擾線的寬度和數(shù)字是一樣的。對(duì)于干擾線和數(shù)據(jù)像素不同的,比如Captcha生成的驗(yàn)證碼:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

從左到右依次是原圖、二值化、去除干擾線的情況,總體降噪的效果還是比較明顯的。另外降噪可以多次執(zhí)行,比如我對(duì)上面的降噪后結(jié)果再進(jìn)行依次降噪,可以得到下面的效果:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

再進(jìn)行識(shí)別得到了結(jié)果:

用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

另外,從圖片來(lái)看,實(shí)際數(shù)據(jù)顏色明顯和噪點(diǎn)干擾線不同,根據(jù)這一點(diǎn)可以直接把噪點(diǎn)全部去除,這里就不展開(kāi)說(shuō)了。

第一篇文章,先記錄如何將圖片進(jìn)行灰度處理、二值化、降噪,并結(jié)合tesserocr來(lái)識(shí)別簡(jiǎn)單的驗(yàn)證碼,剩下的部分在下一篇文章中和大家一起分享。

作者:roy

來(lái)源:

http://www.hi-roy.com/2017/09/19/Python%E9%AA%8C%E8%AF%81%E7%A0%81%E8%AF%86%E5%88%AB/

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 荔波县| 陆河县| 达日县| 本溪| 吉首市| 汪清县| 毕节市| 额尔古纳市| 三都| 礼泉县| 惠州市| 济阳县| 桃园县| 天等县| 集贤县| 大竹县| 桦甸市| 嘉黎县| 高安市| 增城市| 荣昌县| 石嘴山市| 宁晋县| 贵溪市| 盐城市| 崇左市| 鄱阳县| 建瓯市| 西丰县| 调兵山市| 泽普县| 德阳市| 鄂伦春自治旗| 晋江市| 永登县| 林州市| 枣庄市| 安陆市| 巴中市| 宁远县| 公安县|