首页 > 编程语言 >实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证

时间:2022-11-09 14:36:46浏览次数:47  
标签:10 style 滑块 验证 Python text oss OpenCV 拖动


导读

本文主要介绍如何使用Python+OpenCV实现滑块验证码->自动拖动验证。

背景介绍

前几天在某网站下载代码时,跳转到滑块验证码界面,需要验证OK后才能下载,貌似这种验证方式现在很流行,所以打算用OpenCV尝试如何让其自动拖动验证。

效果展示

核心步骤是提取滑动块目标位置,如下是效果展示:


目标滑动块定位步骤与演示:

实现步骤:

【1】截取验证图片,颜色通道转换为HSV,取V通道分析

原图:

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_深度学习

V通道效果:

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_深度学习_02

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实现滑块验证码->自动拖动验证_深度学习_03

开运算+闭运算效果:

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_验证码_04

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实现滑块验证码->自动拖动验证_验证码_05

其他图片测试效果(稳定性验证):

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_深度学习_06

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_深度学习_07

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_滑块_08

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_滑块_09

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_验证码_10


自动验证完整步骤

实现步骤:

【1】通过模板匹配定位箭头位置,作为鼠标滑动起点;

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_滑块_11

【2】定位模板滑动块位置;

【3】控制鼠标拖动,直到与目标滑动块完全重合;

这里提供两种思路:

① 笔者发现这个网站的起始滑动块x位置都是10,那么可以计算目标滑动块与起始滑动块X坐标差值,控制鼠标移动对应的像素量;

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_滑块_12

② 截取目标滑动块的ROI位置,实时计算ROI被覆盖后剩余像素数量,当剩余像素数量最小时认为被覆盖完全,松开鼠标。

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_滑块_13

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_验证码_14

实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证_滑块_15

欢迎加入OpenCV与AI深度学习官方微信群一起学习交流:



标签:10,style,滑块,验证,Python,text,oss,OpenCV,拖动
From: https://blog.51cto.com/stq054188/5836301

相关文章