1. 程式人生 > Python爬蟲入門教學 >18 使用 Pytesseract 進行簡單的驗證

18 使用 Pytesseract 進行簡單的驗證

在爬蟲開發中我們經常會遇到一種反爬蟲的手段就是驗證碼,那麼如何才能繞過驗證碼拿到我們想要的資料呢?這節課我給大家介紹一個破驗證碼的利器–Pytesseract

Pytesseract 是 Python 中專門用來識別驗證碼和字元的常用第三方模組,它是一個根據 Google 開發的 Tesseract 包進行獨立封裝的產物。由於它在識別驗證碼方面具有得天獨厚的優勢,所以經常被爬蟲開發程式設計師用來進行識別驗證碼。

本節課我們就來使用 pytesseract 進行簡單的驗證碼的識別。

1. 安裝 pytesseract

pytesseract 是 Python 的一個 OCR 識別庫,可以通過安裝這個模組,然後呼叫相應的方法進行驗證碼識別。我們只是使用這個模組的一些常用的 API,關於這個模組的其他用途,讀者可以根據自己的興趣愛好自行研究。

pytesseract 是第三方模組,所以需要提前安裝才能使用,安裝命令如下:

pip install pytesseract

安裝過程如下:

圖片描述

2. 第一個例子

我們先使用 pytesseract 進行簡單的圖片識別。使用圖片如下所示:
圖片描述

我們通過呼叫 image_to_string 方法來進行識別圖片中的文字。

# 引進Image和pytesseract模組
try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract

# 將圖片轉化成文字
print(pytesseract.
image_to_string(Image.open('test.bmp')))

執行結果:

圖片描述
可以看出,pytesseract 能夠準確的識別圖片的文字。

3. 識別驗證碼

接下來,我們來嘗試使用它來驗證驗證碼。驗證碼圖片如下所示:

圖片描述

程式碼如下:

import pytesseract
from PIL import Image

im=Image.open('test.jpeg')
#灰度處理
im=im.convert('L')
#設定二值化的閾值
threshold=170
t=[]
for i in range(256):
    if i<threshold:
        t.
append(0) else: t.append(1) #通過表格轉換成二進位制圖片,1的作用是白色,0就是黑色 im=im.point(t,"1") im.show() print(pytesseract.image_to_string(im)) #刪除冗餘字元 print(pytesseract.image_to_string(im)[0:-1])

執行結果:

圖片描述

從執行結果,我們可以看出,雖然我們使用了二值化進行了灰度處理,但是程式仍然不能 100% 的識別驗證碼,所以,後面我們刪除了識別錯誤產生的小數點,才是最後的結果。

4. 小結

使用 pytesseract 只能識別一些簡單的驗證碼,識別率也不高,需要匯入訓練好的各種語言包才能提高識別率。另外,如果熟悉機器學習的知識化,根據 pytesseract 提供的方法,可以通過深度學習的演算法自己訓練一個模型,然後進行識別,可以提高識別的準確度。