opencv實踐——驗證碼識別
阿新 • • 發佈:2020-12-15
完成了opencv基礎知識學習,現在進行實踐操作
1、生成隨機四位數字驗證碼
import os import random # captcha是用於生成驗證碼圖片的庫,可以 pip install captcha 來安裝它 from captcha.image import ImageCaptcha def random_captcha_text(num): # 驗證碼列表 captcha_text = [] for i in range(10): # 0-9數字 captcha_text.append(str(i)) # for i in range(65, 91): # 對應從“A”到“Z”的ASCII碼# captcha_text.append(chr(i)) # for i in range(97, 123): # 對應從“a”到“z”的ASCII碼 # captcha_text.append(chr(i)) # 從list中隨機獲取6個元素,作為一個片斷返回 example = random.sample(captcha_text, num) # 將列表裡的片段變為字串並返回 verification_code = ''.join(example) return verification_code# 生成字元對應的驗證碼 def generate_captcha_image(): image = ImageCaptcha() # 獲得隨機生成的驗證碼 captcha_text = random_captcha_text(4) # 把驗證碼列表轉為字串 captcha_text = ''.join(captcha_text) # 生成驗證碼 path = 'D:/驗證碼識別/test/' if not os.path.exists(path): print("目錄不存在!,已自動建立") os.makedirs(path)print("生成的驗證碼的圖片為:", captcha_text) image.write(captcha_text, path + captcha_text + '.png') if __name__ == '__main__': number = 100 for i in range(number): generate_captcha_image()
2、安裝pytesseract包,中間出現很多問題,最終查閱資料得以解決
3、對驗證碼圖片進行預處理
影象預處理主要包括對影象的灰度化、二值化、去噪聲,以及影象傾斜的矯正和增強等。
(1)灰度化:
對影象進行灰度處理,是為了減少識別樣本的計算量,將影象樣本統一,簡化訓練和識別難度。
Gray=0-299R+0.587G+0.114B(1)
(2)二值化:
二值化指將影象上的畫素點轉化為黑白兩種顏色的點,即將灰度值設定為0(黑)或255(白)。其目的是區分影象的前後景,使影象呈現明顯的視覺效果,同時為後續的識別和處理做準備。本文選用OTS
# 二值影象就是將灰度圖轉化成黑白圖,沒有灰,在一個值之前為黑,之後為白
# 有全域性和區域性兩種
# 在使用全域性閾值時,我們就是隨便給了一個數來做閾值,那我們怎麼知道我們選取的這個數的好壞呢?答案就是不停的嘗試。
# 如果是一副雙峰影象(簡 單來說雙峰影象是指影象直方圖中存在兩個峰)呢?
# 我們豈不是應該在兩個峰之間的峰谷選一個值作為閾值?這就是 Otsu 二值化要做的。
# 簡單來說就是對 一副雙峰影象自動根據其直方圖計算出一個閾值。
# (對於非雙峰影象,這種方法 得到的結果可能會不理想)。