使用opencv识别滑块验证

这篇具有很好参考价值的文章主要介绍了使用opencv识别滑块验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

滑块验证码

对于某些简单的滑块,无需进行模型训练,可以使用opencv就能识别,比如:
有一种常用方法cv2.matchTemplate,可以将滑动的图案与背景图案进行模板匹配,这种方法适用于滑动图案与背景图片中目标位置有相同图案的情况。
image.png
但是本文想介绍的是另一种:背景中目标位置是空白的情况。

验证码详情

661af9e87ef4d84a8382ab0bc83a3d4.jpg
如何识别图片中的矩形位置?
分析主要有三个特点:

  1. 待识别目标是规则的轮廓;
  2. 轮廓内是纯白色,与周边像素界限明显;
  3. 整个图片对轮廓中的白色干扰很少,除了中间的白色圆圈同为白色。

识别方案

基于以上分析,识别方案不需要使用深度学习,利用opencv就能实现,主要思路是:

  1. 将图片转为灰度图,方便后续处理;

image.png

  1. 将图片二值化,比如将值在220以下的像素过滤为黑色,220以上为白色,实际阈值可调;
    (这里设置的阈值有些低了,背景中留下的白色干扰较多)

image.png

  1. 对图片进行轮廓检测,过滤面积较小的轮廓,只留面积大的轮廓,面积阈值可调;

image.png

  1. 多边形逼近,将轮廓按一定阈值(这里是周长的2%)进行多边形逼近,这里逼近为了四边形,三角形,和8边形;

image.png

  1. 最后筛选出顶点数为4的就是我们要找的目标矩形

image.png
6. 实际测试,这张背景图容易出现badcase

对于下面这张背景图片,就不能识别,但仔细观察发现矩形框肉眼可见的能与背景分离,那么也好办:
95698b69cc2ee4a7630829ab026164c.jpg
image.png
所以可以修改一下二值化的像素值下限,比如从220增加到240,此时背景中的偏白色像素被过滤的更多了,从而分离出矩形,完成识别
image.pngimage.png
当然,对于这张背景图,如果方块和圆圈有重叠,那么就无法用此方案识别了,但因为仅有一张这样的背景图存在干扰,而且干扰较小,实际真正遇到重叠的情况很少,总体准确率不会低,可以实际应用。

代码

完整代码如下,读者可以将文中图片下载到本地配合代码进行测试:

import cv2

# 读取图像并进行二值化操作
img_file = 'test.jpg'
image = cv2.imread(img_file)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, threshold = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)

# 我记得cv2较高版本好像输出不一样,报错的话可以降版本试试
# 执行轮廓检测
contours, hierarchy = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 面积过滤阈值
area_threshold = 25

# 遍历轮廓进行面积过滤和矩形框检测
for contour in contours:
    # 计算轮廓的面积
    area = cv2.contourArea(contour)

    # 过滤面积过小的轮廓,每个轮廓contour由n个点坐标组成,shape为(n,1,2)
    if area > area_threshold:
        peri = cv2.arcLength(contour, True)  # 计算轮廓的周长,True表示封闭轮廓
        # 多边形逼近,原理可参考:https://zhuanlan.zhihu.com/p/433888415
        approx = cv2.approxPolyDP(contour, 0.02 * peri, True)
        # 如果多边形是矩形,则绘制矩形框,4个顶点不一定是矩形,但在本案例情景下大概率是目标矩形
        if len(approx) == 4:
            cv2.drawContours(image, [approx], 0, (0, 0, 255), 2)

# 显示结果图像
cv2.imshow('Rectangles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

总结

对于简单的滑块验证码,可以有很多识别方法,只要仔细观察总结就能拟定出合适的方案,以文中滑块为例,本文给出了一个实现案例,希望对读者有启发。
再说了,opencv不行的话还有深度学习啊。文章来源地址https://www.toymoban.com/news/detail-838031.html

到了这里,关于使用opencv识别滑块验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python如何解决“滑块验证码”登录识别(3)

    前言 本文是该专栏的第24篇,后面会持续分享python的干货知识,记得关注。 做爬虫项目的时候,总是会遇到我们的冤家老朋友——验证码(图文验证码,点选验证码,滑块验证码)等。前面我有介绍过图文验证码和点选验证码,针对验证码这块, 后面我会持续更新这些 验证码

    2023年04月08日
    浏览(37)
  • 验证码滑块识别算法 100% 识别 思路简单(附算法 python 代码)

      最开始的识别思路是通过模板来找到这个验证码的滑块图像所在的位置,但是使用下来发现准确率在90%左右一起提不上去,无论怎么优化都无法提高,后来发现了一个奇特的思路可用完美解决这个验证码的问题,思路写在了代码里面,最后返回的结果是需要移动的滑块的左

    2024年02月19日
    浏览(42)
  • 爬虫逆向——某建筑市场监管平台的滑块验证码分析

    目录 网址链接: 正文: 一、思路分析 二、图片处理 三、完整代码 aHR0cHM6Ly9nY3htLmh1bmFuanMuZ292LmNuL2RhdGFzZXJ2aWNlLmh0bWw= (bs64解密可见) 注:分步的代码为示例代码,文章最后会给出图像处理部分的完整代码 1、首先看验证码样式,可以看到是个滑块验证,包含一张带缺口的背景

    2024年02月04日
    浏览(49)
  • selenium+opencv实现模拟登陆(滑块验证码)

    很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常受到阻碍,想着用opencv的模板匹配试试能不能实现模拟登陆。本来觉得网上资料多应该还蛮容易,但实际上手还是搞了蛮久,在这里记录一下整个流程,网站无所谓主要是要有滑动验证码:

    2023年04月14日
    浏览(42)
  • python 识别图片验证码/滑块验证码准确率极高的 ddddocr 库

    验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。 识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 ddddocr (带带弟弟ocr)库. python 版本要求小于等于python3.9 版本 pip 安装 下

    2023年04月08日
    浏览(43)
  • python 识别图片验证码/滑块验证码准确率极高的 ddddorc 库

    前言 验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 ddddocr (带带弟弟ocr)库. 环境准备 python 版本要求小于等于python3.9 版

    2024年02月03日
    浏览(45)
  • 验证码识别DLL ,滑块识别SDK,OCR图片转文字,机器视觉找物品

    验证码识别DLL ,滑块识别SDK 你们用过哪些OCR提取文字,识图DLL,比如Opencv,Labview机器视觉找物品之类?   

    2024年02月11日
    浏览(40)
  • 【爬虫】8.1. 使用OCR技术识别图形验证码

    图形验证码是最早出现的验证方式,现在依然很常见,一般由4位左右的字母或者数字组成。本章节使用的网站时https://captcha7.scrape.center/,这个网站的验证码相对来说比较平整,没有过多的干扰线和干扰点,文字也没有大幅度的变形和旋转,因此比较好作为案例进行分析,对

    2024年02月09日
    浏览(44)
  • 用Java+Selenium+openCV实现126.com的滑块验证

    引入OpenCV库,下载地址:Releases - OpenCV下载4.5.0即可,在下完成安装exe文件后,会出现下列文件,直接将build/java文件下的jar包导入项目的依赖即可。  1.获取驱动,加载126网址 2.切换窗口,因为登录功能是在iframe中,需要先切换窗口 3.输入账号和密码,点击登录(才能弹出滑块

    2024年01月21日
    浏览(47)
  • Python opencv进行矩形识别

    图像识别中,圆形和矩形识别是最常用的两种,上一篇讲解了圆形识别,本例讲解矩形识别,最后的结果是可以识别出圆心,4个顶点,如下图: 左边是原始图像,右边是识别结果,在我i5 10400的CPU上,执行时间不到8ms。 识别出结果后,计算任意3个顶点的彼此距离,共3个数据

    2024年02月07日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包