yolov5+Siamese的极验3点选验证码(bilibili点选验证码)

(注:如有侵权,请联系作者删除)

目标网站:aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLw==

极验3参数逆向分析

登录后就会出现调试接口,需要按顺序发送这三个请求才能正确获取到我们的需要点选的图片链接

拼接极验域名后的图片长这样

遇到这种顺序点选的验证码,我们需要明确自己的思路才能继续下一步

1、首先抓包到验证的接口,查看请求所需的参数gt、challenge、lang、pt、client_type、w(关键参数)、callback

2、逆向出生成w参数方法和所需传入的变量

3、我们可以看到传入的参数有这些gt, challenge, pic, c1, s1, pos,passtime,然后关注pos这个变量,明显是点选后的坐标,这个坐标是经过处理的,我这里给出我的示例代码

positions = ["横坐标1","纵坐标1","横坐标2","纵坐标2"]
pos = []
for i in positions:
    poi_x, poi_y = (i[0] + i[2]) / 2, (i[1] + i[3]) / 2
    poi_x, poi_y = int(round(poi_x / 333.375 * 100 * 100, 0)), int(
        round(poi_y / 333.375 * 100 * 100, 0))
    pos.append(f'{poi_x}_{poi_y}')
pos = ','.join(pos)

4、这些参数都可以生成后,然后我们考虑的就是pos识别的问题了,也是本文的重点

Yolov5目标检测

https://github.com/ultralytics/yolov5

这个你们有兴趣的话可以去看看视频学习,也挺简单的。

1、准备数据集

2、labelimg标注数据​3、训练模型后使用

我训练200张100轮后的识别成功率还是很高的,这样我们就能提取图片中题目和目标文字的位置,然后把它们裁剪下来了。

images = {'ques': [], 'target': []}
img = Image.open(BytesIO(detect_file)).convert('RGB')
img = img.resize((640, 640))
scale_x, scale_y = 640 / 344, 640 / 384
# 对图像进行目标检测
img_tensor = torch.tensor(np.array(img)).float() / 255.0
if img_tensor.ndimension() == 3:
    img_tensor = img_tensor.unsqueeze(0).permute(0, 3, 1, 2).to(self.device)
pred = self.model(img_tensor)[0]
pred = non_max_suppression(pred, conf_thres=0.7, iou_thres=0.45)[0]
# 遍历每个目标框
for i, det in enumerate(pred):
    xyxy = det[:4].cpu().numpy()
    xyxy = scale_boxes(img.size, xyxy, img.size).astype(int)
    label = self.model.names[det[-1].item()]
    position = [int(xyxy[0] / scale_x), int(xyxy[1] / scale_y), int(xyxy[2] / scale_x), int(xyxy[3] / scale_y)]
    print(label,position)
    if label == 'ques':
        images['ques'].append({'position': position})
    else:
        images['target'].append({'position': position})

然后按照从左到右的顺序给题目的文字顺序进行排序,排序后可以与target每个字之间的相似度进行比较,取相似度最高的target的坐标依次存入列表中。

images['ques'] = sorted(images['ques'], key=lambda x: x['position'][0])

Siamese Network

https://github.com/bubbliiiing/Siamese-pytorch

孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。

1、准备数据集,这一步一开始我是人工识别然后放进文件夹的,就给我累够呛,后面我参考另外一篇文章发现可以使用超级鹰的汉字识别,编写代码识别然后放入文件夹中,省事了很多。

2、训练模型,只要数据集你构建的好,最终成功率就会高,我建了518个文件夹,每个文件夹大部分是2、3张图片,但是最终的成功率也有87%左右,如果你的电脑不适合训练模型,可以去算力平台租机训练,价格大概是几元1小时。

最后效果图

需要的可以私聊我

  • 32
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
YOLOv5是一种用于实时目标检测的算法,它通过卷积神经网络来实现目标检测的任务。在YOLOv5中,C3模块是一种特征融合模块,用于提取不同尺度的特征信息。 为了进一步提高YOLOv5的检测性能,我们可以添加Siamese Attention Mechanism (SiAM)到C3模块中。SiAM是一种用于增加空间注意力的机制,它能够帮助网络更好地聚焦于目标区域,从而提高目标检测的准确性和鲁棒性。 具体来说,我们可以在C3模块中添加SiAM机制。首先,我们将C3模块的输出特征图输入到一个卷积层,以减少通道数。然后,将减少后的特征图分为两个分支。一个分支用于生成注意力图,另一个分支用于计算背景特征。 对于注意力图的生成,我们可以使用空间注意力模块,例如Self-Attention等。这些模块能够将不同空间位置之间的信息进行交互,从而进一步提取目标区域的特征。生成的注意力图将与背景特征进行相乘操作,得到最终的注意力特征。 最后,将注意力特征与原始的C3特征进行拼接,进一步融合多尺度的特征信息。这样,添加了SiAM的C3模块将具有更强的目标检测能力,可以更好地定位和识别目标。 总之,通过在YOLOv5的C3模块中添加Siamese Attention Mechanism,可以进一步提升算法的目标检测性能。这个改进增加了空间注意力,有助于更好地聚焦于目标区域,提高检测的准确性和鲁棒性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

naxery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值