天天看點

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

導讀

本文主要介紹如何使用Python+OpenCV實作滑塊驗證碼->自動拖動驗證。

背景介紹

前幾天在某網站下載下傳代碼時,跳轉到滑塊驗證碼界面,需要驗證OK後才能下載下傳,貌似這種驗證方式現在很流行,是以打算用OpenCV嘗試如何讓其自動拖動驗證。

效果展示

核心步驟是提取滑動塊目标位置,如下是效果展示:

目标滑動塊定位步驟與示範:

實作步驟:

【1】截取驗證圖檔,顔色通道轉換為HSV,取V通道分析

原圖:

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

V通道效果:

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
B,G,R=cv2.split(img)
hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
H,S,V=cv2.split(hsv_img)


ret1, thres= cv2.threshold(V, 200, 255, cv2.THRESH_BINARY_INV)
cv2.imshow('thres', thres)      

【2】二值化 + 形态學處理

二值化效果:

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

開運算+閉運算效果:

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
k1=np.ones((5,5), np.uint8)
thres = cv2.morphologyEx(thres, cv2.MORPH_OPEN, k1)#閉運算
cv2.imshow('MORPH_OPEN', thres)


k2=np.ones((5,5), np.uint8)
thres = cv2.morphologyEx(thres, cv2.MORPH_CLOSE, k2)#閉運算
cv2.imshow('MORPH_CLOSE', thres)      

【3】輪廓提取 + 寬高/面積比篩選

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

其他圖檔測試效果(穩定性驗證):

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

自動驗證完整步驟

實作步驟:

【1】通過模闆比對定位箭頭位置,作為滑鼠滑動起點;

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

【2】定位模闆滑動塊位置;

【3】控制滑鼠拖動,直到與目标滑動塊完全重合;

這裡提供兩種思路:

① 筆者發現這個網站的起始滑動塊x位置都是10,那麼可以計算目标滑動塊與起始滑動塊X坐标內插補點,控制滑鼠移動對應的像素量;

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

② 截取目标滑動塊的ROI位置,實時計算ROI被覆寫後剩餘像素數量,當剩餘像素數量最小時認為被覆寫完全,松開滑鼠。

實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證
實戰 | 手把手教你用Python+OpenCV實作滑塊驗證碼->自動拖動驗證

歡迎加入OpenCV與AI深度學習官方微信群一起學習交流:

繼續閱讀