真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

小編給大家分享一下Python3中識(shí)別圖形驗(yàn)證碼的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

10余年建站經(jīng)驗(yàn), 成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作客戶的見證與正確選擇。創(chuàng)新互聯(lián)建站提供完善的營(yíng)銷型網(wǎng)頁(yè)建站明細(xì)報(bào)價(jià)表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。

本節(jié)我們首先來(lái)嘗試識(shí)別最簡(jiǎn)單的一種驗(yàn)證碼,圖形驗(yàn)證碼,這種驗(yàn)證碼出現(xiàn)的最早,現(xiàn)在也很常見,一般是四位字母或者數(shù)字組成的,例如中國(guó)知網(wǎng)的注冊(cè)頁(yè)面就有類似的驗(yàn)證碼,鏈接為:http://my.cnki.net/elibregister/commonRegister.aspx,頁(yè)面如圖 8-1 所示:

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

                                                                                圖 8-1 知網(wǎng)注冊(cè)頁(yè)面

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

1.本節(jié)目標(biāo)

本節(jié)我們就以知網(wǎng)的驗(yàn)證碼為例,講解一下利用 OCR 技術(shù)識(shí)別此種圖形驗(yàn)證碼的方法。

2. 準(zhǔn)備工作

識(shí)別圖形驗(yàn)證碼需要的庫(kù)有 Tesserocr,如果沒(méi)有安裝可以參考第一章的安裝說(shuō)明。

3. 獲取驗(yàn)證碼

為了便于實(shí)驗(yàn),我們先將驗(yàn)證碼的圖片保存到本地,以供測(cè)試。

打開開發(fā)者工具,找到驗(yàn)證碼元素,可以看到這是一張圖片,它的 src 屬性是 CheckCode.aspx,在這里我們直接將這個(gè)鏈接打開:http://my.cnki.net/elibregister/CheckCode.aspx,就可以看到一個(gè)驗(yàn)證碼,直接右鍵保存下來(lái)即可,將名稱命名為 code.jpg,如圖 8-2 所示:

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

    圖 8-2 驗(yàn)證碼

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

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

接下來(lái)我們新建一個(gè)項(xiàng)目,將驗(yàn)證碼圖片放到項(xiàng)目根目錄下,用 Tesserocr 庫(kù)來(lái)識(shí)別一下該驗(yàn)證碼試試,代碼如下:

import tesserocr
from PIL import Image
image = Image.open('code.jpg')
result = tesserocr.image_to_text(image)
print(result)

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

JR42

另外 Tesserocr 還有一個(gè)更加簡(jiǎn)單的方法直接將圖片文件轉(zhuǎn)為字符串可以達(dá)到同樣的效果,代碼如下:

import tesserocr
print(tesserocr.file_to_text('image.png'))

不過(guò)經(jīng)測(cè)試此種方法的識(shí)別效果不如上一種方法好。

5. 驗(yàn)證碼處理

如上的圖片識(shí)別基本沒(méi)有難度,只是新建一個(gè) Image 對(duì)象,然后調(diào)用 image_to_text() 方法即可得出圖片的識(shí)別結(jié)果。

接下來(lái)我們換一個(gè)驗(yàn)證碼試一下,命名為 code2.jpg,如圖 8-3 所示:

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

     圖 8-3 驗(yàn)證碼

重新用下面的代碼測(cè)試一下:

import tesserocr
from PIL import Image
image = Image.open('code2.jpg')
result = tesserocr.image_to_text(image)
print(result)

這時(shí)可以看到如下輸出結(jié)果:

FFKT

發(fā)現(xiàn)這次識(shí)別和實(shí)際的結(jié)果有所偏差,這是因?yàn)轵?yàn)證碼內(nèi)的多余線條干擾了圖片的識(shí)別。

對(duì)于這種情況,我們還需要做一下額外的處理,如轉(zhuǎn)灰度、二值化等操作。

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

image = image.convert('L')
image.show()

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

image = image.convert('1')
image.show()

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

image = image.convert('L')
threshold = 80
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
image.show()

在這里我們指定了一個(gè)變量 threshold 代表二值化閾值,閾值設(shè)置為 80,處理之后我們看一下結(jié)果,如圖 8-4 所示:

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

   圖 8-4 處理結(jié)果

經(jīng)過(guò)處理之后我們發(fā)現(xiàn)原來(lái)的驗(yàn)證碼中的線條已經(jīng)被去除了,而且整個(gè)驗(yàn)證碼變得黑白分明,這時(shí)重新識(shí)別驗(yàn)證碼,代碼如下:

import tesserocr
from PIL import Image
image = Image.open('code2.jpg')
image = image.convert('L')
threshold = 127
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
result = tesserocr.image_to_text(image)
print(result)

即可發(fā)現(xiàn)運(yùn)行結(jié)果變成了:

PFRT

識(shí)別正確。

可見對(duì)于一些有干擾的圖片,我們做一些灰度和二值化處理,會(huì)提高其識(shí)別正確率。

以上是Python3中識(shí)別圖形驗(yàn)證碼的方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁(yè)標(biāo)題:Python3中識(shí)別圖形驗(yàn)證碼的方法
URL標(biāo)題:http://weahome.cn/article/poosdc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部