滑块验证码的识别

滑块验证码的识别滑块验证码的识别前言一 滑块验证码的形式二 采用的方法 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vs2021安装教程_vs2015企业版安装教程

    vs2021安装教程_vs2015企业版安装教程一、学习C/C++语言用什么环境?DevC++很久不在更新,对于C语言的标准支持不够好vc6.0太古老,98年的软件了二、那小编推荐什么大家用什么软件?VS2013及以上版本都行!今天跟大家唠如何安装VS2022(听说VS官网更新了,小伙伴们找不到VS2019了)三、VS2019下载官网VS2022官网https://visualstudio.microsoft.com/zh-hans/?rr=https://www.microsoft.com/zh-cn/3.1点击VS

    2025年10月19日
    7
  • html css is图片,isbackground

    html css is图片,isbackgroundisbackground有何作用首先不是为了多线程而多线程,多线程会极大的带来额外的出错的几率。C#中第一个打开窗口的线程是主线程,也是处理UI的线程,最好保持这个线程通畅,即不要有阻塞操作,如Thread.Sleep(10);等这样是不好的。耗时的线程需要打开新的线程来操作。c#可以使用多少个Thread.IsBackground=true我现在有一个程序,有UDP/TCP/US…

    2022年10月16日
    1
  • Python 模仿按键精灵,批量验证和添加手机号码为企业微信账号的联系人「建议收藏」

    Python 模仿按键精灵,批量验证和添加手机号码为企业微信账号的联系人「建议收藏」源码:importtkinterastkimportpyautoguiaspgimporttkinter.messageboxasmsgboxdefsetpos():globalx,ytry:x,y=eval(tEntry.get())except:passpg.click(x-150,y)pg.typewrite(‘1’)pg.moveTo(x,y,duration=0.5)defalt…

    2022年5月30日
    55
  • DispatcherServlet contextConfigLocation

    DispatcherServlet contextConfigLocation//ClassPathXmlApplicationContext是读取src目录下的配置文件ApplicationContextapp=newClassPathXmlApplicationContext("applicationContext.xml");//FileSystemXmlApplicationContext即系统文件路径,文件的目录。Applica…

    2022年7月12日
    16
  • pycharm配置opencv环境_pycharm opencv安装

    pycharm配置opencv环境_pycharm opencv安装1.cmdpipinstallopencv-python-ihttps://pypi.tuna.tsinghua.edu.cn/simple后续可能会报pip版本低按指示升级记得-ixxxx(同上)装完后可以在cmdpythonimportcv2试试能往下走就OK2.新建Python工程不要默认“虚拟机”那个cmdpythonimportsysprint(sys.path)找到相应的.exe…

    2025年7月8日
    5
  • sdk e qq(E+)

    1.说明:教程属于官方E聊SDK-简介(1)进入官网进入管理台SDK版本:v1.01技术交流QQ群:4716889372.简介:E聊SDK是一套适用于PC端,移动端的即时通讯解决方案,源代码开放。E聊整合了即时通讯的基础能力,使用E聊,您可以让您的应用快速接入即时聊天的功能。E聊现已适配PCWeb,移动Web,Android,iOS等平台。3.系统架构:3.1各模块介绍E聊服务器:提供了基础的消息转发功能,用户管理、群组管理等功能;E聊管理台:向E聊服务器申请接入

    2022年4月18日
    68

发表回复

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

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