Python 實現識別弱圖片驗證碼

來源:互聯網
上載者:User

標籤:安裝路徑   思路   files   圖片下載   再處理   編輯器   取圖   下載失敗   系統   

目前,很多網站為了防止爬蟲肆意類比瀏覽器登入,採用增加驗證碼的方式來攔截爬蟲。驗證碼的形式有多種,最常見的就是圖片驗證碼。其他驗證碼的形式有音頻驗證碼,滑動驗證碼等。圖片驗證碼越來越進階,識別難度也大幅提高,就算人為輸入也經常會輸錯。本文主要講解識別弱圖片驗證碼。

1 圖片驗證碼強度

圖片驗證碼主要採用加幹擾線、字元粘連、字元扭曲方式來增強識別難度。

  • 加幹擾線

加幹擾線也分為兩種,一種是線條跟字元同等顏色,另一種則線條的顏色是五顏六色。

  • 字元粘連

各個字元之間的間隔比較小,互相依靠,能以分割。

  • 字元扭曲

字元顯示的位置相對標準旋轉一定角度。

其中最弱的驗證碼為不具備以上的特徵,幹擾因素比較小。如下:

2 識別思路

首先對圖片做二值化來降噪處理,去掉圖片中的噪點,幹擾線等。然後將圖片中的單個字元切分出來。最後識別每個字元。

圖片的處理,我採用 Python 標準影像處理庫 PIL。圖片分割,我暫時採用Google開源庫 Tesseract-OCR。字元識別則使用 pytesseract 庫。

3 安裝
  • Pillow

我使用的 Python 版本是 3.6, 而標準庫 PIL 不支援 3.x。所以需要使用 Pillow 來替代。Pillow 是專門相容 3.x 版本的 PIL 的分支。使用 pip 包管理工具安裝 Pillow 是最方便快捷的。

pip install Pillow# 如果出現因下載失敗導致安裝不上的情況,建議使用代理pip --proxy http://代理ip:連接埠 install Pillow

  

  • Tesseract-OCR

Tesseract:開源的OCR識別引擎,初期Tesseract引擎由HP實驗室研發,後來貢獻給了開源軟體業,後經由Google進行改進,消除bug,最佳化,重新發布。這才讓其重煥新生。

我們可以在 GitHub 上找到該庫並下載。我是下載最新的 4.0 版本。

github 的是:https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows

  • pytesseract

pytesseract 是 Tesseract-OCR 對進行封裝,提供 Python 介面的庫。同樣可以使用 pip 方式來安裝。

pip install pytesseract# 如果出現因下載失敗導致安裝不上的情況,建議使用代理pip --proxy http://代理ip:連接埠 install pytesseract

  

4 代碼實現4.1 擷取並開啟圖片

擷取圖片驗證碼,你可以通過使用網路請求庫下載。我為了方便,將圖片下載到本地並放在項目目錄下。

from PIL import Image‘‘‘擷取圖片‘‘‘def getImage():    fileName = ‘16.jpg‘    img = Image.open()    # 列印當前圖片的模式以及格式    print(‘未轉化前的: ‘, img.mode, img.format)    # 使用系統預設工具開啟圖片    # img.show()    return img

  

4.2 預先處理

這一步主要是將圖片進行降噪處理, 把圖片從 "RGB" 模式轉化為 "L" 模式,也就是把彩色圖片變成黑白圖片。再處理掉背景噪點,讓字元和背景形成黑白的反差。

‘‘‘1) 將圖片進行降噪處理, 通過二值化去掉後面的背景色並加深文字對比‘‘‘def convert_Image(img, standard=127.5):    ‘‘‘    【灰階轉換】    ‘‘‘    image = img.convert(‘L‘)    ‘‘‘    【二值化】    根據閾值 standard , 將所有像素都置為 0(黑色) 或 255(白色), 便於接下來的分割    ‘‘‘    pixels = image.load()    for x in range(image.width):        for y in range(image.height):            if pixels[x, y] > standard:                pixels[x, y] = 255            else:                pixels[x, y] = 0    return image

  

開啟彩色圖片,PIL 會將圖片解碼為三通道的 “RGB” 映像。調用 convert(‘L‘) 才會把圖片轉化為黑白圖片。其中模式 “L” 為灰色映像, 它的每個像素用 8 個bit表示, 0 表示黑, 255 表示白, 其他數字表示不同的灰階。

在 PIL 中,從模式 “RGB” 轉換為 “L” 模式是按照下面的公式轉換的:

L = R 的值 x 299/1000 + G 的值 x 587/1000+ B 的值 x 114/1000

映像的二值化,就是將映像上的像素點的灰階值兩極分化(設定為 0 或 255,0表示黑,255表示白),也就是將整個映像呈現出明顯的只有黑和白的視覺效果。目的是加深字元與背景的顏色差,便於 Tesseract 的識別和分割。對於閾值的選取,我採用比較暴力的做法,直接使用 0 和 255 的平均值。

4.3 識別

經過上述處理,圖片驗證碼中的字元已經變成很清晰了。

最後一步是直接用 pytesseract 庫識別。

import pytesseract‘‘‘使用 pytesseract 庫來識別圖片中的字元‘‘‘def change_Image_to_text(img):    ‘‘‘    如果出現找不到訓練庫的位置, 需要我們手動自動    文法: tessdata_dir_config = ‘--tessdata-dir "<replace_with_your_tessdata_dir_path>"‘    ‘‘‘    testdata_dir_config = ‘--tessdata-dir "C:\\Program Files (x86)\\Tesseract-OCR\\tessdata"‘    textCode = pytesseract.image_to_string(img, lang=‘eng‘, config=testdata_dir_config)    # 去掉非法字元,只保留字母數字    textCode = re.sub("\W", "", textCode)    return textCode

  

Tesseract-ORC 預設是沒有指定安裝路徑。我們需要手動指定本地 Tesseract 的路徑。不然會報出這樣的錯誤:

FileNotFoundError: [WinError 2] 系統找不到指定的檔案

  

具體解決方案是:

使用文字編輯器開啟 pytesseract 庫的 pytesseract.py 檔案,一般路徑如下:

C:\Program Files (x86)\Python35-32\Lib\site-packages\pytesseract\pytesseract.py

  

將 tesseract_cmd 修改成你電腦本地的 Tesseract-OCR 的安裝路徑。

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLYtesseract_cmd = ‘C:/Program Files (x86)/Tesseract-OCR/tesseract.exe

  

最後執行字元識別的執行個體代碼

def main():    img = convert_Image(getImage(fileName))    print(‘識別的結果:‘, change_Image_to_text(img))if __name__ == ‘__main__‘:    main()

  

運行結果如下:

未轉化前的:  RGB JPEG識別的結果: 9834

  

5 總結

Tesseract-ORC 對於這種弱驗證碼識別率還是可以,大部分字元能夠正確識別出來。只不過有時候會將數字 8 識別為 0。如果圖片驗證碼稍微變得複雜點,識別率大大降低,會經常識別不出來的情況。我自己也嘗試收集 500 張圖片來訓練 Tesseract-ORC,識別率會有所提升,但識別率還是很低。

如果想要做到識別率較高,那麼需要使用 CNN (卷積神經網路)或者 RNN (迴圈神經網路)訓練出自己的識別庫。正好機器學習很火爆很流行,學習一下也無妨。

轉自:https://cloud.tencent.com/developer/article/1187805

Python學習交流群:548377875

猴哥

 

Python 實現識別弱圖片驗證碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.