滑块验证码的识别

滑块验证码的识别滑块验证码的识别前言一 滑块验证码的形式二 采用的方法 1 滑块图 背景图切分 2 模板匹配总结前言最近在一个比价的公司实习 公司里面主要使用爬虫来获取一件商品在其他平台的价格 但是在大部分的时候别的平台不愿意把价格数据直接给你 他们会进行一些反爬的手段 例如使用验证码 验证码有很多的类型 今天主要来说说遇到的滑块验证码的识别 一 滑块验证码的形式滑块验证码的形式也很多 大多都类似下面这样的 一般类似这样的验证码已经有很成熟的解决方案了 比如 js 激活成功教程 图像识别激活成功教程等等 但是我在项目中遇到的验证码有一


前言

最近在一个比价的公司实习,公司里面主要使用爬虫来获取一件商品在其他平台的价格。但是在大部分的时候别的平台不愿意把价格数据直接给你,他们会进行一些反爬的手段。例如使用验证码。验证码有很多的类型,今天主要来说说遇到的滑块验证码的识别。


一、滑块验证码的形式

滑块验证码的形式也很多,大多都类似下面这样的。滑块验证码一般类似这样的验证码已经有很成熟的解决方案了。比如js激活成功教程,图像识别激活成功教程等等。但是我在项目中遇到的验证码有一点不同是下面这种验证码(拼夕夕的验证码)可以看到背景更复杂,而且它使用两个缺口,两个缺口的形状不一样,因此对于此类验证码识别更加困难。
在这里插入图片描述

二、采用的方法

对该类新型验证码分析,最开始准备使用深度学习的方法,大力出奇迹,但是有一个现实问题没多少数据。公司目前收集的也只有六七十张,于是只好放弃深度学习,采用传统方法opencv来做。使用opencv做的思路就是,获取滑块图和背景图,进行模板匹配,匹配度最高作为结果输出

1.滑块图、背景图切分

想要拿到干净的滑块图和背景图需要进行js激活成功教程,这个激活成功教程比较耗时一张验证码大概需要30s,30s后验证码都失效了,所以我只能手动切图。下面是切图代码:

def crop(img_name): img = cv2.imread(img_name) # bg = img[130:,0:362] # 裁剪坐标为[y0:y1, x0:x1] part = img[0:362,0:139] bg = img[0:362,139:] # cv2.imwrite("part_crop.png", part) # cv2.imwrite("bg_crop.png", bg) return bg,part 

2.模板匹配

对切好的图片先进行轮廓提取,然后再使用模板匹配,其中轮廓提取使用了Canny算子:

def detect_captcha_gap(bg,tp): ''' bg: 背景图片 tp: 缺口图片 return:空缺距背景图左边的距离 ''' # 读取背景图片和缺口图片 # bg_img = cv2.imread(bg) # 背景图片 # tp_img = cv2.imread(tp) # 缺口图片 bg_img = bg tp_img = tp # 识别图片边缘 bg_edge = cv2.Canny(bg_img, 100, 200) tp_edge = cv2.Canny(tp_img, 100, 200) # 转换图片格式 bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB) tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB) # cv2.imwrite("bg_style.png",bg_pic) # 保存背景轮廓提取 # cv2.imwrite("slide_style.png",tp_pic) # 保存滑块背景提取 # 缺口匹配 res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 寻找最优匹配 th, tw = tp_pic.shape[:2] tl = max_loc # 左上角点的坐标 # 返回缺口的左上角X坐标 br = (tl[0]+tw,tl[1]+th) # 右下角点的坐标 cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 绘制矩形 cv2.imwrite("result_new.png", bg_img) # 保存在本地 # 返回缺口的左上角X坐标 return tl[0] 

下面是Canny算子提取的轮廓图,可以发现效果还是不错,能够看到两幅图中的相似轮廓。
在这里插入图片描述
在这里插入图片描述
模板匹配的结果在这里插入图片描述
目前已经能够正确匹配出滑块对应缺口的位置了。




总结

做完这个项目发现即使在深度学学习迅猛发展的今天,传统视觉仍然有巨大的作用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233176.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm2021 6月激活码【在线破解激活】

    pycharm2021 6月激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    75
  • 清明梦超能力者黄YY(idx数组)

    清明梦超能力者黄YY(idx数组)清明梦超能力者黄YYhttps://www.nowcoder.com/acm/contest/206/I题目描述黄YY是一个清明梦超能力者,同时也是一个记忆大师。他能够轻松控制自己在梦中的一切,

    2022年7月1日
    32
  • h5电商模板_网站模板

    h5电商模板_网站模板[HTML+CSS]电商网站模板b站白嫖的网课,黑马的小兔鲜儿案例,教程链接点这里就行成品文件目录结构CSSbase.css:基本样式,内外边距,字体之类的common.css:网页的公共样式,一般是header部分和footer部分index.css:首页样式imageslogo.png:网站logosprites.png:拿来存精灵图的、uploads以图片为主,主要存放需要经常更新的资源例如商品图片,活动图片等favicon.ico网站图标index.

    2022年10月1日
    2
  • 讲解最到位的粒子群算法,附matlab代码求解函数最优值

    讲解最到位的粒子群算法,附matlab代码求解函数最优值从鸟群觅食行为到粒子群算法粒子群算法的核心例:求解函数最小值粒子群算法的驱动因素从鸟群觅食行为到粒子群算法鸟群寻找食物的过程中,鸟与鸟之间存在着信息的交换,每只鸟搜索目前离食物最近的鸟的周围区域是找到食物的最简单有效的办法。粒子群算法(以下简称PSO)就是模拟鸟群觅食行为的一种彷生算法。解=粒子=鸟(鸟的位置象征着离食物的距离,粒子的位置也象征着…

    2022年5月31日
    68
  • MongoDB 服务无法启动

    MongoDB 服务无法启动MongoDB 服务无法启动

    2022年4月25日
    262
  • python lambda表达式_Python进阶

    python lambda表达式_Python进阶Lambda表达式lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数语法函数名=lambda参数:返回值注意点1.函数的参数可以有多个,多个参数之间用逗号隔

    2022年7月31日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号