1. 程式人生 > >Python tesserocr模塊使用示例

Python tesserocr模塊使用示例

code 分享 pil align 驗證碼識別 highlight 比例 技術 power

操作系統:Win10 1709 X64

python版本:3.6.5

依賴模塊:PIL、tesserocr。

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

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

技術分享圖片

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

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

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

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

  技術分享圖片

  原始圖片尺寸較小,極少情況下如果無法正常識別,可以借助圖片處理工具PIL模塊進行圖片等比例放大後保存。此例中直接運行上述代碼,結果為“VHIHI”,即使是肉眼可見較為清晰的驗證碼,如果圖片未經處理直接交由tesserocr解析,也可能識別率很低。

  通常情況下,我們還需要做些額外的圖片處理,如轉灰度圖,二值化等。

利用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購票網站的驗證碼,使行為驗證碼開始高速發展,肉眼分辨起來都異常困難,這就要求我們對驗證碼的識別技術要不斷提升,才能突破網站逐步升級的反爬蟲機制。

Python tesserocr模塊使用示例