本文来自老大哥,文安哲提供! 博客跳转: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,找黄瓜帅有优惠哦!
本文章禁止转发!!
本文章禁止转发!!
本文章禁止转发!!
来源:oschina
链接:https://my.oschina.net/u/4342549/blog/4489851