基于opencv识别动态验证码

基于opencv识别动态验证码

背景:

​ 验证码可以分为静态验证码和动态验证码。静态验证码通常以 .png.jpg 等静态图片格式结尾,而动态验证码一般以 .gif 格式结尾。一些更具挑战性的验证码是基于动态验证码的。

​ 静态验证码是一张固定的图片,其中包含了随机生成的文本或图形等信息。用户需要正确识别并输入验证码中的内容以完成验证。

​ 动态验证码则是一系列连续变化的图像,以 .gif 格式展示。这些图像通常包含有旋转、闪烁、变形等特效,使其更具难度。用户需要观察并输入动态验证码中的正确信息。

​ 动态验证码相对于静态验证码更具安全性,因为它们更难以被自动化程序或机器识别。这种类型的验证码对于防止恶意登录、爬虫等攻击起到了更好的保护作用。

实现思路:

​ 假如我的本地有一张.gif的动态验证码,动态验证码其实是将多张静态验证码拼起来形成的一张动态效果图,那么如何去识别呢?

步骤:

  1. 首先我们对这一张动态图片进行抽取帧。
  2. 然后将多张图片基于opencv融合到一张图片上。
  3. 再利于OCR或者ddddocr进行识别即可。

代码:

py 复制代码
from PIL import Image
import numpy as np
import cv2
import ddddocr

# 将gif专户为图片
gif_path = r'D:\Downloads\gif_img.gif'
img = Image.open(gif_path)
shapes = []
# 因为gif动图是由4张图片合成的 可以多抽取几张 
for i in range(0, 4):
    img.seek(i)
    img.save(r'./img/{}.png'.format(i)) # 抽取每一帧
    img_arr=np.array(img)
    shapes.append(img_arr)
shapes[0] = np.expand_dims(shapes[0],axis = 2)
img_shape = shapes[0] + shapes[1]+shapes[2]+shapes[3]
print(img_shape)
cv2.imwrite('./img/result.png',img_shape) # 生成合成图

我们看一下每一帧图片:

我们在看一下合成图:

成功!

总结:

希望这个总结对你有帮助!如果还有其他问题,请随时提问。

相关推荐
蓝婷儿44 分钟前
Python 机器学习核心入门与实战进阶 Day 1 - 分类 vs 回归
python·机器学习·分类
Devil枫2 小时前
Kotlin扩展函数与属性
开发语言·python·kotlin
程序员阿超的博客3 小时前
Python 数据分析与机器学习入门 (八):用 Scikit-Learn 跑通第一个机器学习模型
python·机器学习·数据分析·scikit-learn·入门教程·python教程
xingshanchang4 小时前
PyTorch 不支持旧GPU的异常状态与解决方案:CUDNN_STATUS_NOT_SUPPORTED_ARCH_MISMATCH
人工智能·pytorch·python
reddingtons5 小时前
Adobe Firefly AI驱动设计:实用技巧与创新思维路径
大数据·人工智能·adobe·illustrator·photoshop·premiere·indesign
CertiK5 小时前
IBW 2025: CertiK首席商务官出席,探讨AI与Web3融合带来的安全挑战
人工智能·安全·web3
Deepoch6 小时前
Deepoc 大模型在无人机行业应用效果的方法
人工智能·科技·ai·语言模型·无人机
Deepoch6 小时前
Deepoc 大模型:无人机行业的智能变革引擎
人工智能·科技·算法·ai·动态规划·无人机
kngines6 小时前
【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间
人工智能·数据挖掘·mapreduce·面试题
Binary_ey6 小时前
AR衍射光波导设计遇瓶颈,OAS 光学软件来破局
人工智能·软件需求·光学软件·光波导