【某验3代】空间推理验证识别

本篇文章仅供学习使用,如侵权请联系删除。

某验验证码3代,4代已经是老生常谈的问题了,本篇文章粗略的分析一波3代空间推理验证码识别与验证的整个过程。

1.参数破解

从一开始gt和challenge的参数的获取,到后面w的生成,提交验证并获取最终的validate参数,就完成了整个该验证码的破解与识别。当然,嘴上说说还是比较简单,但是实际扣js代码并还原的过程还是比较痛苦的,这里就不一一赘述了,主要这些过程已经有很多大佬通过文章分享过了。破解部分不是本片文章的核心,核心在验证码的识别部分。

2. 验证码识别

3代空间推理验证码的识别,可以分成两部分完成,即:识别+推理

先来看下3代空间推理的验证码图片:
空间推理验证
空间推理验证码是由sign提示和含有不同颜色,不同形状以及不同大小的物体组成的图片构成的,根据提示获取到指定的物体,并提交该物体的坐标即可。

---- 识别 ----

验证码的图片中的物体,主要包含:(5 * 5 * 2 = 50种类别)

形状:圆柱体,球体,正方体,圆锥体,多面体5种物体
大小:大,小,2种大小
颜色:灰(黑),红色,绿色,蓝色,黄色5种颜色

接下来,训练一个可以识别出这50种标签的深度学习神经网络模型:这里选用yolov5
1. 准备工作:数据集,这里准备了1000张图片,如下图
2. 使用labelimg【pip install labelimg】工具对每一张图片进行标注(ps:过程极为痛苦,可以交给第三方专业的团队,不然眼睛真的会瞎)
3. yolov5模型训练
1) 下载yolov5模型:git clone https://github.com/ultralytics/yolov5.git
2)下载预训练模型文件:https://github.com/ultralytics/yolov5(本文使用yolov5s),并将模型文件放至weights文件目录下
3)将前面的数据集文件按照比例分成两部分(训练集和验证集),并按照yolov5官方要求的文件目录结构,准备好所有的数据集。
4)复制yolov5/data/coco128.yaml,重新命名为coco_space.yaml,修改数据集路径,类别数量,列别名称
5)复制yolov5/models/ 下对应的模型文件,重新命名为yolov5s_space.yaml,修改其中的类别数量n为50
6)训练:python ./train.py --data ./data/coco_space.yaml --cfg ./models/yolov5s_space.yaml --weights ./weights/yolov5s.pt --batch-size 12 --epochs 120 --workers 0 --name s_120 --project yolo_space
7)测试:python detect.py --source ./test.jpg --weights ./yolo_space/s_120/weights/best.pt --conf-thres 0.3

数据集:
数据集
数据标注: 数据标注
标注结果:数据标注结果txt文件
模型训练:训练结果-1训练结果-2
训练结果-3
模型测试:
测试图片
测试图片结果
到此,就完成了yolov5模型对图片中物体的识别和定位
模型准确率在90%-99%,基本可以精确的识别出物体的颜色,形状,大小
推理的过程可能比较慢,可以进一步进行优化,导出onnx文件,使用tensorrt加速等方法优化模型的推理速度和性能

---- 推理 ----

完成了物体的识别与定位后,接下来就是推理的部分,没有找到可以参考的方法,无奈只能被迫自己绞尽脑汁写了,这部分没有对应的模型去识别,就是各种的逻辑判断,所以代码看起来比较臃肿,但是效果还是完全可以接受,识别准确率在90%以上,结合上面模型识别部分,两者结合起来整体的效果还是比较理想的,毕竟错了可以重试。下面粗略的介绍下整体的思路和方法:

用一个具体的例子来说明:
sign:请_点击_在大型蓝色物体后面的黄色物品。
image:如下图
yolov5检测结果:[[[‘红色’, ‘大’, ‘正方’], [262, 307]], [[‘红色’, ‘大’, ‘正方’], [469, 208]], [[‘黄色’, ‘大’, ‘多面’], [115, 261]], [[‘黄色’, ‘大’, ‘多面’], [194, 163]], [[‘蓝色’, ‘小’, ‘圆柱’], [55, 208]], [[‘蓝色’, ‘小’, ‘正方’], [368, 161]], [[‘蓝色’, ‘大’, ‘正方’], [583, 239]]]

思路:

  1. 使用jieba分词将提示信息进行断词,并过滤掉一些没有用的词语和标点符号,比如:[“请”, “点击”, “与”, “有”, “的”, “在”, “。”, “物体”, “物品”, “_”, “号”]等等,这样,就简单的获取到了一些描述物体的主要特征。

     请_点击_在大型蓝色物体后面的黄色物品。对应的结果为:['大型', '蓝色', '后面', '黄色']		
    
  2. 根据上面的描述,需要找到参照物,然后再通过参照物找到最终的物体,所以接下来需要把1中提取到的关键特征词,进行分割:

    描述参照物的特征关键词 + 找到最终物体的位置关键词或者相似等关键词 + 最终物体的特征关键词 
    

    所以上面可以拆分为:[[‘大型’, ‘蓝色’], [‘后’], [‘黄色’]]
    大型 + 蓝色 = 参照物
    后 = 位置特征词
    黄色 = 最终物体

  3. 在yolov5检测结果中查找参照物:

     遍历所有的结果根据关键词:['大型', '蓝色'] 	很轻松就会找到参照物为[['蓝色', '大', '正方'], [583, 239]]]
    
  4. 根据3种找到的参照物+方位词,颜色特征,体积特征再过滤一些物体

     	蓝色后面的物体 根据蓝色方块的坐标 可以过滤掉蓝色方块前面的物体
    
  5. 最后,根据最后一部分特征描述词语,找到最终的物体

     黄色,蓝色方块后面只有一个黄色的物体,锁定到黄色大多面体,即[['黄色', '大', '多面'], [194, 163]],完美找到最终的物体
    

中间寻找过程中,会有一些小细节,这里就不一一赘述了,比如345中关键词,大型中的型是没有用的需要剔除,当然除了这一个还有很多,比如品,左右,前,后,最,相同,颜色,大小,形状,体积,尺寸,物体,方块,立方,侧等等词语都是需要进行处理的。
举例图片
结果图
效果图

最最最最最后,提交坐标参数,去生成一系列的参数,提交到接口去验证并获取validate参数。

到这里,某验3代空间推理的识别就分享完了,后面还会陆续分享3代其他的验证码识别:图标点选,文字点选,滑块验证,仅供探讨和学习。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Boot登录人脸识别验证可以通过结合人脸识别技术和Spring Boot框架实现。下面是一个简单的实现思路: 1. 引入相关依赖:在Spring Boot项目的pom.xml文件中添加人脸识别相关的依赖,如OpenCV、Dlib等。 2. 配置人脸识别环境:下载并配置人脸识别算法库,如Dlib。可以将相关文件放置在项目的资源目录中,并在应用程序启动时加载这些文件。 3. 创建登录界面:在Spring Boot中使用Thymeleaf等模板引擎创建用户登录界面,在界面中添加一个人脸识别按钮。 4. 捕获用户人脸照片:通过前端技术,如使用HTML5的getUserMedia API获取用户摄像头的视频流,并将视频帧截取为图像。 5. 调用人脸识别算法:使用相关的人脸识别算法库,将捕获到的照片与预先存储的用户人脸特征进行比对。可以将用户的人脸特征数据和用户资料存储在数据库中。 6. 验证登录:根据比对结果判断人脸识别成功与否,如果匹配成功,则登录成功,否则登录失败。 7. 登录成功后的操作:根据业务需求,可以进行一些后续操作,如跳转到用户个人主页,展示用户相关信息等。 需要注意的是,人脸识别技术的具体实现过程可能会受到具体算法库和硬件设备的限制,开发人员需要根据实际情况进行调整。此外,为了保证用户隐私数据的安全性,需要采取必要的措施,如加密存储用户人脸特征数据等。 ### 回答2: Spring Boot是一个开发框架,它可以简化基于Java的应用程序的开发过程。要实现使用人脸识别进行登录验证,我们可以结合Spring Boot和一些人脸识别的库或服务来完成。 首先,我们需要选择适合的人脸识别库或服务。一些常用的人脸识别库包括OpenCV和Dlib,而人脸识别服务则可以使用一些云平台提供的API,例如百度AI或微软Azure。 接下来,在Spring Boot的项目中添加所选的人脸识别库或服务的依赖项。可以使用Maven或Gradle构建工具来管理项目依赖。 然后,我们需要创建一个登录页面,该页面应该包含一个用于上传人脸照片的表单。用户上传人脸照片后,后端码将调用人脸识别库或服务来识别上传的照片中的人脸。 如果人脸识别成功,后端码可以将该用户标识用于登录验证。可以使用Spring Security等安全框架来处理登录验证逻辑。 如果人脸识别失败,可以向用户显示相应的错误消息并提示其重新上传人脸照片。 整个登录过程的关键是如何准确地识别人脸。这可能需要使用人脸识别库或服务提供的API来提高识别准确率。此外,可以在前端实现一些额外的验证步骤,例如要求用户先进行人脸照片的裁剪或调整。 总之,通过结合Spring Boot和人脸识别库或服务,可以实现人脸识别登录验证。在前端提供上传人脸照片的界面,在后端调用人脸识别库或服务进行人脸识别,根据识别结果进行登录验证。此外,还可以使用安全框架来处理权限和其他相关的登录逻辑。 ### 回答3: 使用Spring Boot实现人脸识别验证需要以下步骤: 1. 集成人脸识别SDK:首先下载并导入合适的人脸识别SDK,如百度AI人脸识别SDK或Face++人脸识别SDK。 2. 定义登录接口:在Spring Boot中创建一个登录接口,接收用户的人脸图片。 3. 人脸识别验证:获取到用户上传的人脸图片后,使用SDK提供的功能进行人脸识别验证。首先需要将用户上传的人脸图片存储到服务器上,并调用SDK的人脸检测功能,提取出人脸的特征信息。然后将该特征信息与事先存储好的用户人脸特征信息进行比对。如果特征信息匹配成功,则认为验证通过。 4. 返回验证结果:根据人脸识别验证的结果,返回给前端相应的验证结果信息,可以是成功或失败的提示。 需要注意的是,集成人脸识别SDK和实现人脸识别验证需要一定的开发经验和技术基础。此外,为了提高验证的准确性和安全性,还可以对人脸进行活体检测,防止使用照片等非真实人脸进行欺骗。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值