Python tesserocr模塊使用示例

操做系統:Win10 1709  X64python

python版本:3.6.5windows

依賴模塊:PIL、tesserocr。app

  須要說明的是,在windows系統上PowerShell經過PIP3 install tesserocr安裝驗證碼識別模塊時,須要先安裝Tesseract一款由HP實驗室開發由Google維護的開源OCR(Optical Character Recognition , 光學字符識別)引擎,與Microsoft Office Document Imaging(MODI)相比,咱們能夠不斷的訓練的庫,使圖像轉換文本的能力不斷加強。)可執行文件。工具

  以中國知網的註冊頁面爲例,咱們常被要求輸入這類簡單的字母組成,背景含不少雜線的驗證碼,以下圖所示:網站

咱們對驗證碼另存爲到本地代碼所在目錄,取名:test.png.spa

下圖是直接用對應模塊識別的代碼示例:操作系統

import tesserocr
from PIL import Image
image=Image.open('test.png')

image.show()  #能夠打印出圖片,供預覽
print(tesserocr.image_to_text(image))

  

  原始圖片尺寸較小,極少狀況下若是沒法正常識別,能夠藉助圖片處理工具PIL模塊進行圖片等比例放大後保存。此例中直接運行上述代碼,結果爲「VHIHI」,即便是肉眼可見較爲清晰的驗證碼,若是圖片未經處理直接交由tesserocr解析,也可能識別率很低。code

  一般狀況下,咱們還須要作些額外的圖片處理,如轉灰度圖,二值化等。blog

利用Image對應的convert()方法傳參L,便可將圖片轉爲灰度圖。圖片

image=image.convert('L')

image.show()

傳入1便可完成二值化,以下:

image=image.convert('1')

image.show()

固然咱們更多時候須要根據圖片的實際狀況指定二值化的閾值,好比咱們將閾值設定爲80,先轉灰度圖,再二值化,代碼以下:

import tesserocr
from PIL import Image
image=Image.open('test.png')
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()
print(tesserocr.image_to_text(image))

觀察處處理後圖片如右:

  儘管圖片已經轉爲灰度圖,且過濾了大部分雜線,可是圖片關鍵像素丟失嚴重,識別結果天然也不盡如人意,結果:「VH.」。

此時咱們根據圖片的實際狀況,人爲調整程序中預設的閾值到130,再觀察:,此次的圖片轉換效果顯著,咱們再次查看識別結果,「VHRU」,與肉眼觀察到的別無二致,合乎要求。

可見驗證碼的識別除了用好識別模塊,還須要在必要時引入PIL(圖片處理模塊)進行圖片預處理,預處理過程當中的閾值等設定也存有技巧,不一樣的參數設定,會徹底影響最終的識別率。

  現實中不少網站的驗證碼要遠比例子中的來得複雜,尤爲是12306購票網站的驗證碼,使行爲驗證碼開始高速發展,肉眼分辨起來都異常困難,這就要求咱們對驗證碼的識別技術要不斷提高,才能突破網站逐步升級的反爬蟲機制。

相關文章
相關標籤/搜索