溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中識(shí)別驗(yàn)證碼的方法

發(fā)布時(shí)間:2020-08-14 10:00:43 來源:億速云 閱讀:489 作者:小新 欄目:編程語言

python中識(shí)別驗(yàn)證碼的方法?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

我們首先識(shí)別最簡(jiǎn)單的一種驗(yàn)證碼,即圖形驗(yàn)證碼。這種驗(yàn)證碼最早出現(xiàn),現(xiàn)在也很常見,一般由4位字母或者數(shù)字組成。例如,中國(guó)知網(wǎng)的注冊(cè)頁面有類似的驗(yàn)證碼,頁面如下所示:

python中識(shí)別驗(yàn)證碼的方法

表單中最后一項(xiàng)就是圖形驗(yàn)證碼,我們必須完全正確輸入圖中的字符才可以完成注冊(cè)。

更多有關(guān)驗(yàn)證碼的知識(shí),可以參考這些文章:

Python3爬蟲進(jìn)階:識(shí)別圖形驗(yàn)證碼

Python3爬蟲進(jìn)階:識(shí)別極驗(yàn)滑動(dòng)驗(yàn)證碼

Python3爬蟲進(jìn)階:識(shí)別點(diǎn)觸點(diǎn)選驗(yàn)證碼

Python3爬蟲進(jìn)階:識(shí)別微博宮格驗(yàn)證碼

·本節(jié)目標(biāo)以知網(wǎng)的驗(yàn)證碼為例,講解利用OCR技術(shù)識(shí)別圖形驗(yàn)證碼的方法。

·準(zhǔn)備工作識(shí)別圖形驗(yàn)證碼需要庫tesserocr,以mac安裝為例:在mac下,我們首先使用Homebrew安裝ImageMagick和tesseract庫:    brew install imagemagickbrew install tesseract 接下來再安裝tesserocr即可:pip3 install tesserocr pillow這樣我們就完成了            tesserocr的安裝。

·獲取驗(yàn)證碼為了便于實(shí)驗(yàn),我們先將驗(yàn)證碼的圖片保存到本地。打開開發(fā)者工具,找到驗(yàn)證碼元素。驗(yàn)證碼元素是一張圖片,它的ser屬    性是CheckCode.aspk。所以我們直接打開如下鏈接就可以看到一個(gè)驗(yàn)證碼,右鍵保存即可,將其命名為code.jpg:

python中識(shí)別驗(yàn)證碼的方法

這樣我們就得到一張驗(yàn)證碼圖片,以供測(cè)試識(shí)別使用。

識(shí)別測(cè)試

接下來新建一個(gè)項(xiàng)目,將驗(yàn)證碼圖片放到項(xiàng)目根目錄下,用tesserocr庫識(shí)別該驗(yàn)證碼,代碼如下所示:

python中識(shí)別驗(yàn)證碼的方法

這里我們新建了一個(gè)Image對(duì)戲那個(gè),調(diào)用了tesserocr的image_to_text( )方法。傳入該Image對(duì)象即可完成識(shí)別,實(shí)現(xiàn)過程非常簡(jiǎn)單,結(jié)果如下:

python中識(shí)別驗(yàn)證碼的方法

我們可以看到,識(shí)別的結(jié)果和實(shí)際結(jié)果有偏差,這是因?yàn)轵?yàn)證碼內(nèi)的多余線條干擾了圖片的識(shí)別。

另外,tesserocr還有一個(gè)更加簡(jiǎn)單的方法,這個(gè)方法可以直接將圖片文件轉(zhuǎn)為字符串,代碼如下:

python中識(shí)別驗(yàn)證碼的方法

不過這種方法的識(shí)別效果不如上一種的好。

驗(yàn)證碼處理

對(duì)于上面的圖片,我們可以看到其實(shí)并沒有完全識(shí)別正確,所以我們需要對(duì)圖像作進(jìn)一步的處理,如灰度轉(zhuǎn)換、二值化等操作。

我們可以利用Image對(duì)象的convert( )方法參數(shù)傳入L,即可將圖片轉(zhuǎn)化為灰度圖像,代碼如下:

python中識(shí)別驗(yàn)證碼的方法

傳入1即可將圖片進(jìn)行二值化處理,如下所示:

python中識(shí)別驗(yàn)證碼的方法

我們還可以指定二值化的閾值。上面的方法采用的是默認(rèn)閾值127。不過我們不能直接轉(zhuǎn)化原圖,要將原圖先轉(zhuǎn)化為灰度圖像,然后再指定二值化閾值,代碼如下:

python中識(shí)別驗(yàn)證碼的方法

在這里,變量threshold代表二值化閾值,閾值設(shè)置為160,之后我們來看看我們的結(jié)果:

python中識(shí)別驗(yàn)證碼的方法

我們可以看到現(xiàn)在的二維碼就比較方便我們進(jìn)行識(shí)別了;那么對(duì)于一些有干擾的圖片,我們做一些灰度和二值化處理,這會(huì)提高圖片識(shí)別的正確率。

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)python中識(shí)別驗(yàn)證碼的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI