最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python圖形驗證碼識別教程詳解

 更新時間:2023年02月20日 14:43:13   作者:愛吃餅干的小白鼠  
這篇文章主要介紹了Python圖形驗證碼識別,目前,許多網(wǎng)站采取各種各樣的措施來反爬蟲,其中一個措施便是使用驗證碼。隨著技術(shù)的發(fā)展,驗證碼的花樣越來越多。驗證碼最初是幾個數(shù)字組合的簡單的圖形驗證碼,后來加入了英文字母和混淆曲線

前言

(結(jié)尾有彩蛋歐)

目前,許多網(wǎng)站采取各種各樣的措施來反爬蟲,其中一個措施便是使用驗證碼。隨著技術(shù)的發(fā)展,驗證碼的花樣越來越多。驗證碼最初是幾個數(shù)字組合的簡單的圖形驗證碼,后來加入了英文字母和混淆曲線。有的網(wǎng)站還可能看到中文字符的驗證碼,這使得識別愈發(fā)困難。

后來 12306 驗證碼的出現(xiàn)使得行為驗證碼開始發(fā)展起來,用過 12306 的用戶肯定多少為它的驗證碼頭疼過。我們需要識別文字,點擊與文字描述相符的圖片,驗證碼完全正確,驗證才能通過?,F(xiàn)在這種交互式驗證碼越來越多,如極驗滑動驗證碼需要滑動拼合滑塊才可以完成驗證,點觸驗證碼需要完全點擊正確結(jié)果才可以完成驗證,另外還有滑動宮格驗證碼、計算題驗證碼等。

驗證碼變得越來越復(fù)雜,爬蟲的工作也變得愈發(fā)艱難。有時候我們必須通過驗證碼的驗證才可以訪問頁面。本章就專門針對驗證碼的識別做統(tǒng)一講解。

接下來會涉及的驗證碼有普通圖形驗證碼、極驗滑動驗證碼、點觸驗證碼、微博宮格驗證碼,這些驗證碼識別的方式和思路各有不同。了解這幾個驗證碼的識別方式之后,我們可以舉一反三,用類似的方法識別其他類型驗證碼。

環(huán)境使用

  • python 3.9
  • pycharm

圖形驗證碼的識別

我們首先識別最簡單的一種驗證碼,即圖形驗證碼。這種驗證碼最早出現(xiàn),現(xiàn)在也很常見,一般由 4 位字母或者數(shù)字組成。例如,某某網(wǎng)站的注冊頁面有類似的驗證碼。

一般來說,表單的最后一項就是圖形驗證碼,我們必須完全正確輸入圖中的字符才可以完成注冊和登錄。

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

以某網(wǎng)站的驗證碼為例,講解利用 OCR 技術(shù)識別圖形驗證碼的方法。

2. 準(zhǔn)備工作

識別圖形驗證碼需要庫 tesserocr。本文文末有安裝教程。

3. 獲取驗證碼

為了便于我們的實驗測試,我們先將驗證碼的圖片保存到本地。

打開開發(fā)者工具,找到驗證碼元素。驗證碼元素是一張圖片,它的 src 屬性是 CheckCode.aspx??梢钥吹揭粋€驗證碼,右鍵保存即可,將其命名為 yzm.jpg。

這樣我們就可以得到一張驗證碼圖片,以供測試識別使用。

4. 識別測試

接下來新建一個項目,將驗證碼圖片放到項目根目錄下,用 tesserocr 庫識別該驗證碼,代碼如下所示:

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

在這里我們新建了一個 Image 對象,調(diào)用了 tesserocr 的 image_to_text() 方法。傳入該 Image 對象即可完成識別,實現(xiàn)過程非常簡單,結(jié)果如下所示:JR42。是不是很神奇。

5. 驗證碼處理

接下來我們換一個驗證碼,將其命名為 code2.jpg

重新運行上面的代碼,輸出FFKT。

這次識別和實際結(jié)果有偏差,這是因為驗證碼內(nèi)的多余線條干擾了圖片的識別。

對于這種情況,我們還需要做一下額外的處理,如轉(zhuǎn)灰度、二值化等操作。我們可以利用 Image 對象的 convert() 方法參數(shù)傳入 L,即可將圖片轉(zhuǎn)化為灰度圖像,代碼如下所示:

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

我們還可以指定二值化的閾值。上面的方法采用的是默認(rèn)閾值 127。不過我們不能直接轉(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()

運行之后就會得到我們想要的處理結(jié)果。而且我們發(fā)現(xiàn)原來驗證碼中的線條已經(jīng)去除,整個驗證碼變得黑白分明。這時重新識別驗證碼,再次運行上面的代碼就可以得到我們要的驗證碼。

那么,針對一些有干擾的圖片,我們做一些灰度和二值化處理,這會提高圖片識別的正確率。

tesserocr庫安裝

在這里我和大家簡單介紹一下,這個庫的安裝教程。

1. tesseract軟件的安裝

在win10下,安裝tesseract可以進入該網(wǎng)址進行下載 https://digi.bib.uni-mannheim.de/tesseract/

其中,文件名中帶有dev的為開發(fā)版本,不帶dev的為穩(wěn)定版本,可以選擇下載不帶dev的版本。例如可以選擇下載tesseract-ocr-win64-setup-v5.3.0.20221214.exe。

下載完成后,打開下載文件,其中可以勾選Additional language data(download)選項來安裝OCR識別支持的語言包,以便OCR識別多國語言。(也可以在選項中只勾選chinese)

2. 環(huán)境配置

在系統(tǒng)變量里,修改path,添加你安裝tesserocr的路徑。在系統(tǒng)變量里,創(chuàng)建一個新的變量名為:TESSDATA_PREFIX,值為:D:\Program Files(X86)\Tesseract-OCR\tessdata(根據(jù)自己安裝的tesserocr安裝路徑為準(zhǔn))。

3. 安裝tesseracr包

- 嘗試pip安裝:

pip install tesserocr

- 如果不成功,則嘗試通過.whl文件安裝。

下載地址:https://github.com/simonflueckiger/tesserocr-windows_build/releases 這里就不介紹whl怎么安裝的了,不會的私信評論。

TIP

tesserocr也只是識別手段的一種,如果需要高精度的識別,可以嘗試TensorFlow實現(xiàn)深度學(xué)習(xí)模型,通過訓(xùn)練模型來識別圖形驗證碼。

以上就是Python圖形驗證碼識別教程詳解的詳細內(nèi)容,更多關(guān)于Python圖形驗證碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python dataframe NaN處理方式

    python dataframe NaN處理方式

    今天小編就為大家分享一篇python dataframe NaN處理方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python模擬實現(xiàn)圖書管理系統(tǒng)

    python模擬實現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python模擬實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺談如何測試Python代碼

    淺談如何測試Python代碼

    今天帶大家了解如何用Python測試代碼,文中有非常詳細的介紹及代碼示例,對正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Python實現(xiàn)結(jié)構(gòu)體代碼實例

    Python實現(xiàn)結(jié)構(gòu)體代碼實例

    這篇文章主要介紹了Python實現(xiàn)結(jié)構(gòu)體代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Python中函數(shù)調(diào)用9大方法小結(jié)

    Python中函數(shù)調(diào)用9大方法小結(jié)

    在Python中,函數(shù)是一種非常重要的編程概念,它們使得代碼模塊化、可重用,并且能夠提高代碼的可讀性,本文將深入探討Python函數(shù)調(diào)用的9種方法,需要的可以參考下
    2024-01-01
  • Python基于歐拉角繪制一個立方體

    Python基于歐拉角繪制一個立方體

    這篇文章主要為大家詳細介紹了Python如何基于歐拉角實現(xiàn)繪制一個立方體,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • ubuntu系統(tǒng)下使用pm2設(shè)置nodejs開機自啟動的方法

    ubuntu系統(tǒng)下使用pm2設(shè)置nodejs開機自啟動的方法

    今天小編就為大家分享一篇ubuntu系統(tǒng)下使用pm2設(shè)置nodejs開機自啟動的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 最強Python可視化繪圖庫Plotly詳解用法

    最強Python可視化繪圖庫Plotly詳解用法

    數(shù)據(jù)分析離不開數(shù)據(jù)可視化。Plotly 是一款用來做數(shù)據(jù)分析和可視化的在線平臺,功能非常強大,可以在線繪制很多圖形比如條形圖、散點圖、餅圖、直方圖等等
    2021-11-11
  • Python中pandas庫sort_values()方法的使用

    Python中pandas庫sort_values()方法的使用

    最后去看了有關(guān)于 sort_values 的文檔,成功解決先把單詞出現(xiàn)頻次由高往低依次排序,再把頻次相同的情況下的單詞按照 MD5 值排序這個問題,下面通過本文講解下Python中pandas庫sort_values()方法的使用,感興趣的朋友一起看看吧
    2023-07-07
  • python破解zip加密文件的方法

    python破解zip加密文件的方法

    這篇文章主要介紹了python破解zip加密文件的方法,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下
    2018-05-05

最新評論

高碑店市| 武强县| 永济市| 罗甸县| 泌阳县| 博乐市| 东明县| 搜索| 许昌市| 大名县| 宝清县| 贡嘎县| 溧阳市| 安义县| 岑溪市| 永福县| 富源县| 青浦区| 凤城市| 宁武县| 穆棱市| 桂林市| 庆城县| 白玉县| 西安市| 城口县| 秭归县| 澄迈县| 宜都市| 绥棱县| 额济纳旗| 浠水县| 北票市| 甘德县| 天峨县| 河池市| 左云县| 渝北区| 全南县| 平乡县| 宜黄县|