OpenCV - 滑动拼图验证码自动识别与匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV - 滑动拼图验证码自动识别与匹配相关的知识,希望对你有一定的参考价值。

参考技术A

体验地址: https://www.fengkongcloud.com/trial/captcha.html

1、抓包获取前景图和背景图

2、计算前景图非透明区域的边界

计算方法: Python 图像处理:计算 PNG 非透明区域最小外接矩形

3、裁切前景图和背景图

背景图中两个相似块,以前景图的非透明边界去横切背景图,能排除干扰项

4、高斯滤波与边缘检测

为了提升图像匹配的准确性,使用高斯滤波与边缘检测算法,对图像预处理

5、模板匹配

使用 OpenCV 的 matchTemplate 匹配相似位置

QQ滑块登陆验证码识别的脚本源码

新号或者是新设备登陆QQ的时候会出现一个滑块验证。

这个验证码要求使用者根据拼图的位置,拖动滑块来将拼图还原到缺失的位置,正确还原即可完成验证。


先来看一个实际图片——



这个图就是我要解决的滑动验证图片,我需要拖动下面的滑块完成拼图。


最开始我的思路是通过找图或者找色确定拼图黑影的具体坐标,然后计算出它和前面拼图的相对距离,这个距离就是我要拖动下面滑块的距离。这样就可以完成验证了。


但是一个很难解决的问题就是我没法找到拼图黑影的位置。


为了解决这个滑块验证的问题,通过朋友介绍认识了一个技术大牛,给了我另外一个思路,就是先把验证码底图(见下图)找出来,然后和有拼图验证码(上面那张图)进行对比,颜色发生变化的区域就是拼图滑块的位置。



按照这个思路我写了下面的代码,分享给大家:


KeepCapture

Dim arr,a,t,s,n

arr = file.ReadLines("/sdcard/Pictures/shamo.txt")

For j = 0 To 83

    a = Split(arr(j), "|")

    s=""

    For i=0 to 87      

        t = CmpColor(23+i*5, 166+3*j, a(i) & "-202020", 1)+1

        s = s & t

    Next

    TracePrint s

    If UTF8.InStr(1, s, "0") > 0 and UBound(split(s,"0"))>14 Then 

        TracePrint j

        n=j+1

        Exit for

    End If

Next

s=""

For i = 0 To 87

    a = Split(arr(n), "|")

    t = CmpColor(23 + i * 5, 166 + 3 * n, a(i) & "-202020", 1) + 1

    s = s & t

Next

Dim m

m = UTF8.InStrRev(s, "0", -1)*5+23

TracePrint m

ReleaseCapture 

TouchDown 100, 445, 1

TouchMove m * 0.9, 445, 1, 200

TouchMove m-3, 445, 1, 1000

TouchUp 1



如果对这个脚本有什么不懂的地方,

可以加QQ交流群:78237147


以上是关于OpenCV - 滑动拼图验证码自动识别与匹配的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV C++案例实战三十《中文点选验证码识别》

C# 滑动验证码|拼图验证|SlideCaptcha

js实现滑动拼图验证码

苹果手机怎么滑动验证码

验证码自动填充怎么设置

python使用opencv识别滑动验证码的缺口