安裝tesseract
OCR,即Optical Character Recognition,光學字符識別,是指通過掃描字符,然後通過其形狀將其翻譯成電子文本的過程。對於圖形驗證碼來說,它們都是一些不規則的字符,這些字符確實是由字符稍加扭曲變換得到的內容。
tesseract下載地址:
https://digi.bib.uni-mannheim.de/tesseract/
進入下載頁面,可以看到有各種.exe文件的下載列表,這裏可以選擇最新下載5.0版本。
其中文件名中帶有dev的爲開發版本,不帶dev的爲穩定版本,可以選擇下載不帶dev的版本,例如可以選擇下載箭頭指向的3.05exe。
下載完成後雙擊,此時會出現如下圖所示的頁面。
此時可以勾選Additional language data(download)選項來安裝OCR識別支持的語言包,這樣OCR便可以識別多國語言。然後一路點擊Next按鈕即可。
接下來,爲了在python代碼中使用tesseract功能,
tesserocr 下載地址:https://github.com/simonflueckiger/tesserocr-windows_build/releases
所以我們這裏選擇下載 tesserocr v2.3.1 和 tesseract 3.05.02。
安裝 tesseract 可以比較簡單,我們介紹一下關於 tesserocr 的安裝過程。
比如說:
把下載下來的 tesserocr 安裝包放在 python 安裝路徑裏,在該目錄下打開 dos 窗口。
運行 pip3 install tesserocr-2.3.1-cp37-cp37m-win_amd64.whl 即可成功。
2、配置環境變量
爲了在全局使用方便,比如安裝路徑爲D:\Program Files (x86)\Tesseract-OCR,將該路徑添加到環境變量的path中
3.代碼案例
以中國知網的註冊頁面爲例,我們常被要求輸入這類簡單的字母組成,背景含很多雜線的驗證碼,如下圖所示:
我們對驗證碼另存爲到本地代碼所在目錄,取名:test.png.
下圖是直接用對應模塊識別的代碼示例:
1 2 3 4 5 6 |
|
原始圖片尺寸較小,極少情況下如果無法正常識別,可以藉助圖片處理工具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(圖片處理模塊)進行圖片預處理,預處理過程中的閾值等設定也存有技巧,不同的參數設定,會完全影響最終的識別率。