基于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) # 生成合成图

我们看一下每一帧图片:

我们在看一下合成图:

成功!

总结:

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

相关推荐
威迪斯特几秒前
项目解决方案:食堂反浪费AI智能监督系统项目解决方案
人工智能·实时视频分析·算法分析·边缘分析·ai识别盒子·餐盘浪费检测·智能食堂
AI服务老曹几秒前
深度解析:基于异构计算的 AI 视频管理平台架构实践
人工智能·架构·音视频
江山与紫云几秒前
1.3 使用 Jupyter Notebook
python
谷哥的小弟1 分钟前
大模型核心基础知识(02)—大模型的主要特征与能力边界
人工智能·深度学习·机器学习·大模型·智能体
Metaphor6929 分钟前
使用 Python 合并 PDF 文件
java·python·pdf
亚林瓜子10 分钟前
AWS Glue PySpark中日志设置
python·spark·日志·aws·pyspark·log·glue
xiaotao13110 分钟前
03-深度学习基础:LoRA与参数高效微调(PEFT)
人工智能·深度学习
Mr.敦的私房菜11 分钟前
Spring AI 企业增强版(含安全版与合规版
人工智能·安全·spring
醉卧考场君莫笑15 分钟前
NLP(命名实体识别NER)
人工智能·自然语言处理