基于opencv识别动态验证码
背景:
验证码可以分为静态验证码和动态验证码。静态验证码通常以 .png
、.jpg
等静态图片格式结尾,而动态验证码一般以 .gif
格式结尾。一些更具挑战性的验证码是基于动态验证码的。
静态验证码是一张固定的图片,其中包含了随机生成的文本或图形等信息。用户需要正确识别并输入验证码中的内容以完成验证。
动态验证码则是一系列连续变化的图像,以 .gif
格式展示。这些图像通常包含有旋转、闪烁、变形等特效,使其更具难度。用户需要观察并输入动态验证码中的正确信息。
动态验证码相对于静态验证码更具安全性,因为它们更难以被自动化程序或机器识别。这种类型的验证码对于防止恶意登录、爬虫等攻击起到了更好的保护作用。
实现思路:
假如我的本地有一张.gif的动态验证码,动态验证码其实是将多张静态验证码拼起来形成的一张动态效果图,那么如何去识别呢?
步骤:
- 首先我们对这一张动态图片进行抽取帧。
- 然后将多张图片基于opencv融合到一张图片上。
- 再利于OCR或者ddddocr进行识别即可。
代码:
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) # 生成合成图
我们看一下每一帧图片:
我们在看一下合成图:
成功!文章来源:https://www.toymoban.com/news/detail-839951.html
总结:
希望这个总结对你有帮助!如果还有其他问题,请随时提问。文章来源地址https://www.toymoban.com/news/detail-839951.html
到了这里,关于基于opencv识别动态验证码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!