python利用Tesseract識別驗證碼

老_大叔o發表於2019-01-21

無論是是自動化登入還是爬蟲,總繞不開驗證碼,這次就來談談python中光學識別驗證碼模組tesserocrpytesseracttesserocrpytesseract是Python的一個OCR識別庫,但其實是對tesseract做的一層Python API封裝,pytesseract是Google的Tesseract-OCR引擎包裝器;所以它們的核心是tesseract,因此在安裝tesserocr之前,我們需要先安裝tesseract。 #下載安裝# 下載地址:digi.bib.uni-mannheim.de/tesseract/t…

下載完成後,雙擊安裝,可以勾選Additional language data(download)選項來安裝OCR識別支援的語言包,但下載語言包實在是慢,我們可以直接從https://github.com/tesseract-ocr/tessdata/ 下載zip的語言包壓縮檔案,解壓後將tessdata-master中的檔案複製到Tesseract的安裝目錄C:\Program Files (x86)\Tesseract-OCR\tessdata目錄下,最後我們配置下環境變數,我們將C:\Program Files (x86)\Tesseract-OCR新增到環境變數中。進入命令提示符,輸入tesseract,顯示下圖結果,說明配置完成

python利用Tesseract識別驗證碼

檢視安裝了的語言包:tesseract --list-langs

python利用Tesseract識別驗證碼

顯示我一共安裝了167種語言包,裡邊包含英文或者其他字元。

#測試#

實驗用的二維碼

python利用Tesseract識別驗證碼

基本使用語法 tesseract image.png result (tesseract 圖片名稱 生成檔名稱)

結果

python利用Tesseract識別驗證碼

由結果來看,識別出來了P、2和X,但是把C識別成了G,識別度還是比較高,接下來看在python中的使用 #python引入tesseract#

在python下使用pip命令即可完成下載安裝 pip install pytesseract

識別驗證碼指令碼

import pytesseract
from PIL import Image

im=Image.open('pin.png')
print(pytesseract.image_to_string(im))
複製程式碼

結果

python利用Tesseract識別驗證碼

這樣識別的結果同樣跟上文一樣,個別字元識別的不是很準確 #影象處理# 現在網站上的二維碼設計的通常很難複雜,如果直接識別的話很難識別出來,下面這段程式碼是進行灰度處理和二值化

import pytesseract
from PIL import Image

im=Image.open('5.jpg')
#進行置灰處理
im=im.convert('L')
#這個是二值化閾值
threshold=150
table=[]
for i in range(256):
    if i<threshold:
        table.append(0)
    else:
        table.append(1)
#通過表格轉換成二進位制圖片,1的作用是白色,0就是黑色
im=im.point(table,"1")
im.show()
print(pytesseract.image_to_string(im))
複製程式碼

原圖

python利用Tesseract識別驗證碼

置灰和二值化後

python利用Tesseract識別驗證碼

想要提高識別率只能下載訓練好的語言包,如上述所說,或者用深度學習的方法訓練機器

原文連結:nolon.xyz/archives/77…

相關文章