vaptcha、京东、58等手势验证码图像识别与轨迹提取(思路)

本文来自老大哥,文安哲提供! 博客跳转:https://wenanzhe.com/

弟弟这边将会根据哲哥的文章做一个深入的总结!(文章略有改动,如果觉得有点啰嗦,可以去看看我大哥的文章!)

最近看群里面大家讨论研究手势验证码比较多,然后我也顺带研究做了一下,给各位老公们分享一下做的过程。

首先,一起来康康手势验证码长啥样!

vaptcha:

京东(个人挺喜欢京东手势的背景):

58:

大概就是长这个样子,需要按照图像中的那条轨迹再图片上滑动,不得不说这类验证码确实体验感拉满,让人很想立马关掉这个网站。

下面我们以vaptcha 来进行一个讲解(vaptcha是这三个里面最恶心的,恶心程度下面会介绍到):

那么言归正传,这类验证码该怎么做识别部分呢?

按照我们正常的思维方式就是要提取出来图中轨迹的部分和形状。

之前我试验了通过opencv二值化然后提取物体轮廓等等方法,可能对单一一张图有用,但是拿到其他图上效果就不是很好了。

直到有一天我看到了一张图

瞬间就反应过来我们可以通过语义切割的方式去获取轨迹部分。

使用MaskRcnn即可相对准确的切割出我们想要的部分。

1、采集图像样本。

这里没啥好说的,通过不断地请求获取验证码得到原始的手势验证码的图像。这里我大概采集了100张左右。

2、标记样本

这里我们使用Labelme工具来标注。

传送门

标记出来的效果大概就这这个样子

3、训练样本

这里建议大家使用tensorflow自己的object_detection来训练

传送门

这里面有若干已经写好的有关目标检测的网络可以供我们调用,具体使用方法我会再单独开一篇文章来讲,如果本身就会的就可以跳过直接去玩耍辣。

4、处理训练结果

训练后他会返回一个由0和1组成的Ndarray的mask,在这里可能需要重新resize一下这个mask成为你原图的宽高(可能是因为我改了一下代码出现了点问题),

然后直接对这个ndarray * 255就会将这个Ndarray转成由0和255组成,再直接与使用opencv imshow就可以看到如下效果。

5、获取轨迹

获取轨迹这里就比较简单啦,直接使用skimage中的morphology直接对之前由0和1组成的Ndarray操作就可以抽取出白色部分的骨架。

抽取完骨架获取的是一个有True和False组成的Size和之前Ndarray一样的矩阵。直接在原图上操作,将对应为True点位的RGB改为[0, 0, 0]

可以看到图中轨迹部分上画出了一条黑色的线~

以下为笨比黄瓜的一些经验之谈:

首先是vaptcha:

vaptcha这个手势,要多恶心有多恶心,底图多,更新也有点小快

上述为文安哲大佬的训练过程,笨比黄瓜的过程大同小异,实际效果图给大佬们展示下:

这种简单的还好,但是遇到以下情况,希望有大佬能帮忙优化解决下:

与其他手势不同,其他手势基本是直的,这玩意弯曲的一批!(这个时候就会有人说:这也不弯呀!):

  大佬们给弟弟支个招吧,笨比瓜的demo现在还是有问题的!有大佬有好的办法 记得捞一手!

下面到成品展示环节:

这个时候有人就要问:为什么第二张会有红点点呢,这里解答一下这个红点点就是执行的拟合轨迹!

接下来是京东:

京东和58都一样这里放在一起讲:

京东和58处理方法一样(不过京东的检测比较严格,这里求助下大佬们,笨比黄瓜的识别通过率只有百分之60-70,希望有大佬帮帮忙把识别率提高下)58的直线轨迹就可以过去,京东的直线轨迹也可以过不过曲线通过率相比直线较高!

相对于难度没那么大,只需要XS运算,一个加速度即可(这里有人会说,那你TMBB这么多倒是给代码呀)

这里我先说一切只是为了学术交流(其实还是前几天和别人撕逼了)识别提交难度不算大,提交轨迹有个坑(上次就是这个坑和别人撕逼,不是我轨迹源码的问题,硬要说是我的轨迹代码的问题,最后把我提交也磨走了)裂开!!!!!

直接上演示图了:

给各位看官老爷们,看看轨迹:

京东一般是一进一出两个转折比58略难但是问题不大,京东难度在于提交的协议头!!

本意为学习交流,不要道德绑架!如果侵权即时联系,看到秒删!!!

无需抠图直接算法即可!!!

感谢各位老公的捧场,本篇文章到此结束啦~下一期更新一下基于object_detection api的目标检测

本文作者黄瓜帅:QQ908383407

 

想学习验证码识别的小伙伴可以看看:lengyue.video,找黄瓜帅有优惠哦!

本文章禁止转发!!

本文章禁止转发!!

本文章禁止转发!!

猜你喜欢

转载自blog.csdn.net/qq_42857376/article/details/107932785