使用 Pytesseract 進(jìn)行簡單的驗(yàn)證碼識別
在爬蟲開發(fā)中我們經(jīng)常會(huì)遇到一種反爬蟲的手段就是驗(yàn)證碼,那么如何才能繞過驗(yàn)證碼拿到我們想要的數(shù)據(jù)呢?這節(jié)課我給大家介紹一個(gè)破驗(yàn)證碼的利器–Pytesseract。
Pytesseract 是 Python 中專門用來識別驗(yàn)證碼和字符的常用第三方模塊,它是一個(gè)根據(jù) Google 開發(fā)的 Tesseract 包進(jìn)行獨(dú)立封裝的產(chǎn)物。由于它在識別驗(yàn)證碼方面具有得天獨(dú)厚的優(yōu)勢,所以經(jīng)常被爬蟲開發(fā)程序員用來進(jìn)行識別驗(yàn)證碼。
本節(jié)課我們就來使用 pytesseract 進(jìn)行簡單的驗(yàn)證碼的識別。
1. 安裝 pytesseract
pytesseract 是 Python 的一個(gè) OCR 識別庫,可以通過安裝這個(gè)模塊,然后調(diào)用相應(yīng)的方法進(jìn)行驗(yàn)證碼識別。我們只是使用這個(gè)模塊的一些常用的 API,關(guān)于這個(gè)模塊的其他用途,讀者可以根據(jù)自己的興趣愛好自行研究。
pytesseract 是第三方模塊,所以需要提前安裝才能使用,安裝命令如下:
pip install pytesseract
安裝過程如下:
2. 第一個(gè)例子
我們先使用 pytesseract 進(jìn)行簡單的圖片識別。使用圖片如下所示:
我們通過調(diào)用 image_to_string 方法來進(jìn)行識別圖片中的文字。
# 引進(jìn)Image和pytesseract模塊
try:
from PIL import Image
except ImportError:
import Image
import pytesseract
# 將圖片轉(zhuǎn)化成文字
print(pytesseract.image_to_string(Image.open('test.bmp')))
運(yùn)行結(jié)果:
可以看出,pytesseract 能夠準(zhǔn)確的識別圖片的文字。
3. 識別驗(yàn)證碼
接下來,我們來嘗試使用它來驗(yàn)證驗(yàn)證碼。驗(yàn)證碼圖片如下所示:
代碼如下:
import pytesseract
from PIL import Image
im=Image.open('test.jpeg')
#灰度處理
im=im.convert('L')
#設(shè)置二值化的閾值
threshold=170
t=[]
for i in range(256):
if i<threshold:
t.append(0)
else:
t.append(1)
#通過表格轉(zhuǎn)換成二進(jìn)制圖片,1的作用是白色,0就是黑色
im=im.point(t,"1")
im.show()
print(pytesseract.image_to_string(im))
#刪除冗余字符
print(pytesseract.image_to_string(im)[0:-1])
運(yùn)行結(jié)果:
從運(yùn)行結(jié)果,我們可以看出,雖然我們使用了二值化進(jìn)行了灰度處理,但是程序仍然不能 100% 的識別驗(yàn)證碼,所以,后面我們刪除了識別錯(cuò)誤產(chǎn)生的小數(shù)點(diǎn),才是最后的結(jié)果。
4. 小結(jié)
使用 pytesseract 只能識別一些簡單的驗(yàn)證碼,識別率也不高,需要導(dǎo)入訓(xùn)練好的各種語言包才能提高識別率。另外,如果熟悉機(jī)器學(xué)習(xí)的知識化,根據(jù) pytesseract 提供的方法,可以通過深度學(xué)習(xí)的算法自己訓(xùn)練一個(gè)模型,然后進(jìn)行識別,可以提高識別的準(zhǔn)確度。