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]
可以看到图中轨迹部分上画出了一条黑色的线~
感谢各位老公的捧场,本篇文章到此结束啦~下一期更新一下基于object_detection api的目标检测
转发一定要标注原作者和网址哦~
大佬,6666!
路过学习了,牛掰Class。
瑞数呢
大佬 tql
大佬 tql
tql wtf
大佬请多点来这种文章
我老公呢
666
大佬牛逼
奥利给
大佬牛逼
大佬666
瑞数呢?
路过学习,感谢大佬
请问如果知道起点和终点的坐标呢?