0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Python機(jī)器學(xué)習(xí)解決驗(yàn)證碼的資料說明

馬哥Linux運(yùn)維 ? 來源:未知 ? 2019-05-03 13:43 ? 次閱讀

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

圖像類

滑動(dòng)類

點(diǎn)擊類

語音類

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

灰度處理

增加對(duì)比度(可選)

二值化

降噪

傾斜校正分割字符

建立訓(xùn)練庫

識(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)來建立數(shù)據(jù)集進(jìn)行訓(xùn)練。

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

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

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

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

首先安裝:

然后開始識(shí)別:

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

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

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

識(shí)別:

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

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

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

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

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

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

處理后的圖片如下:

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

處理后的圖片如下:

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131838
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4752

    瀏覽量

    84066

原文標(biāo)題:用Python機(jī)器學(xué)習(xí)搞定驗(yàn)證碼

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    無法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。

    `無法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。是不是系統(tǒng)的bug?`
    發(fā)表于 05-12 10:41

    一文解析驗(yàn)證碼與打平臺(tái)的攻防對(duì)抗

    1、驗(yàn)證碼與打平臺(tái)的攻防對(duì)抗  眾所周知,驗(yàn)證碼的出現(xiàn)是為了區(qū)分人和機(jī)器,但隨著科技的發(fā)展,黑產(chǎn)從業(yè)者的可圖之利增多,驗(yàn)證碼的戰(zhàn)場(chǎng)也進(jìn)入了
    發(fā)表于 09-28 11:02

    平臺(tái)是如何高效的破解市面上各家驗(yàn)證碼平臺(tái)的各種形式驗(yàn)證碼的?

    ,比如說引入機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)等人工智能相關(guān)技術(shù)來智能識(shí)別圖片中的驗(yàn)證碼要素,提高識(shí)別驗(yàn)證要素的準(zhǔn)確率等。以下是某個(gè)打平臺(tái)相關(guān)人工智能技術(shù)
    發(fā)表于 11-01 15:21

    C#教程之中文驗(yàn)證碼

    C#教程之中文驗(yàn)證碼,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?6次下載

    多樣變換的手寫驗(yàn)證碼自動(dòng)識(shí)別算法

    研究驗(yàn)證碼自動(dòng)識(shí)別技術(shù)可以進(jìn)一步提升人識(shí)別驗(yàn)證碼的可讀性,增強(qiáng)機(jī)器識(shí)別的難度,從而提高網(wǎng)絡(luò)安全性。針對(duì)目前提出的驗(yàn)證碼識(shí)別方法基本都是采用光學(xué)字符識(shí)別(OCR)方法對(duì)
    發(fā)表于 12-20 14:14 ?0次下載

    簡(jiǎn)單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

    ,來防止電腦自動(dòng)填寫表單。但是隨著深度學(xué)習(xí)和計(jì)算機(jī)視覺的興起,它們現(xiàn)在往往很容易被攻破。我在讀Adrian Rosebrock的優(yōu)秀的著作《Python計(jì)算機(jī)視覺深度學(xué)習(xí)》。在書中,Adrian簡(jiǎn)單地描述了他如何用
    的頭像 發(fā)表于 01-22 09:15 ?6212次閱讀
    簡(jiǎn)單地描述了如何用<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>繞過E-ZPass New York網(wǎng)站的<b class='flag-5'>驗(yàn)證碼</b>

    SQLyog_12.4.1_帶驗(yàn)證碼

    SQLyog_12.4.1_帶驗(yàn)證碼.rar
    發(fā)表于 04-12 21:03 ?22次下載

    如何利用機(jī)器學(xué)習(xí)破解驗(yàn)證碼的源代碼教程

    驗(yàn)證碼的設(shè)計(jì)是為了防止計(jì)算機(jī)自動(dòng)填寫表格,驗(yàn)證你是一個(gè)真實(shí)的“人”。但隨著深度學(xué)習(xí)和計(jì)算機(jī)視覺的興起,現(xiàn)在他們往往容易被擊敗。
    的頭像 發(fā)表于 04-30 17:42 ?5732次閱讀
    如何利用<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>破解<b class='flag-5'>驗(yàn)證碼</b>的源代碼教程

    以一個(gè)真實(shí)網(wǎng)站的驗(yàn)證碼為例,實(shí)現(xiàn)了基于一下KNN的驗(yàn)證碼識(shí)別

    很多網(wǎng)站登錄都需要輸入驗(yàn)證碼,如果要實(shí)現(xiàn)自動(dòng)登錄就不可避免的要識(shí)別驗(yàn)證碼。本文以一個(gè)真實(shí)網(wǎng)站的驗(yàn)證碼為例,實(shí)現(xiàn)了基于一下KNN的驗(yàn)證碼識(shí)別。
    的頭像 發(fā)表于 12-24 17:27 ?7666次閱讀

    拖動(dòng)驗(yàn)證碼的具體實(shí)現(xiàn)

    .驗(yàn)證碼的一個(gè)功能就是來規(guī)避機(jī)器的自動(dòng)操作,所以我們需要通過軌跡來判斷這個(gè)拖動(dòng)過程是真實(shí)的人還是機(jī)器,因此我們需要記錄拖動(dòng)的路徑,路徑經(jīng)過計(jì)算之后可以發(fā)送到后端進(jìn)行進(jìn)一步的分類,比如對(duì)接深度學(xué)
    的頭像 發(fā)表于 07-18 11:02 ?6604次閱讀
    拖動(dòng)<b class='flag-5'>驗(yàn)證碼</b>的具體實(shí)現(xiàn)

    驗(yàn)證碼層出不窮?試試這個(gè)自動(dòng)跳過驗(yàn)證碼的工具

    目前網(wǎng)絡(luò)上越來越多使用驗(yàn)證碼了,驗(yàn)證碼的本意是阻止機(jī)器刷流量擠占服務(wù)器資源,這本來無可厚非;但是驗(yàn)證碼已經(jīng)變得越來越過分,別說機(jī)器人了,連人
    的頭像 發(fā)表于 11-15 10:42 ?5808次閱讀

    驗(yàn)證碼太麻煩,自動(dòng)跳過驗(yàn)證碼神器試一試

    目前網(wǎng)絡(luò)上越來越多使用驗(yàn)證碼了,驗(yàn)證碼的本意是阻止機(jī)器刷流量擠占服務(wù)器資源,這本來無可厚非;但是驗(yàn)證碼已經(jīng)變得越來越過分,別說機(jī)器人了,連人
    的頭像 發(fā)表于 11-15 11:15 ?9989次閱讀

    爬蟲實(shí)現(xiàn)目標(biāo)網(wǎng)站驗(yàn)證碼登陸

    在爬蟲訪問目標(biāo)網(wǎng)站的過程中,很多網(wǎng)站為了避免被惡意訪問,需要設(shè)置驗(yàn)證碼登錄,這樣是為了避免非人類的訪問。今天我們學(xué)習(xí)下如何使用Python爬蟲實(shí)現(xiàn)驗(yàn)證碼登錄并且將生成的
    發(fā)表于 12-11 15:27 ?2331次閱讀

    驗(yàn)證碼到底在驗(yàn)證啥?聊一聊驗(yàn)證碼是怎么為難我們?nèi)祟惖?/a>

    在文章開頭,老狐先給大家玩一個(gè)驗(yàn)證碼的游戲,猜出圖中驗(yàn)證碼字母。
    的頭像 發(fā)表于 08-12 10:25 ?1887次閱讀
    <b class='flag-5'>驗(yàn)證碼</b>到底在<b class='flag-5'>驗(yàn)證</b>啥?聊一聊<b class='flag-5'>驗(yàn)證碼</b>是怎么為難我們?nèi)祟惖? />    </a>
</div>                            <div   id=

    Java 中驗(yàn)證碼的使用

    今天我們講一下在 Java 中驗(yàn)證碼的使用。 驗(yàn)證碼生成 本效果是利用easy-captcha工具包實(shí)現(xiàn),首先需要添加相關(guān)依賴到pom.xml中,代碼如下: com .github.whvcse
    的頭像 發(fā)表于 09-25 11:11 ?795次閱讀
    Java 中<b class='flag-5'>驗(yàn)證碼</b>的使用