千家信息网

Python如何生成验证码

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,Python如何生成验证码,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python 生成验证码文章无干货爬虫和验证码就是天生的冤家
千家信息网最后更新 2025年01月31日Python如何生成验证码

Python如何生成验证码,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

Python 生成验证码

文章无干货

爬虫和验证码就是天生的冤家,用 Python 生成验证码应该是用 Python 对抗验证码的第一步,所以今天先来研究研究如何用 Python 生成一个便于我们入手的验证码。

这里不是造轮子,只是踩踩坑,目前 Github 上关于验证码对抗的开源项目非常多,这里推荐两个,有经验的朋友直接跳过下面的内容,学习这两个项目就好。

验证码训练:(以下介绍内容来自官方的介绍)

https://github.com/kerlomz/captcha_trainer

基于深度学习的图片验证码的解决方案 - 该项目能够秒杀字符粘连重叠/透视变形/模糊/噪声等各种干扰情况,足以解决市面上绝大多数复杂的验证码场景,目前也被用于其他OCR场景。

该项目基于 TensorFlow 1.14 开发,旨在帮助中小企业或个人用户快速构建图像分类模型并投入生产环境使用,降低技术应用门槛。

验证码部署:

https://github.com/kerlomz/captcha_platform

关于部署,大佬也提供了相应的文章:https://www.jianshu.com/p/80ef04b16efc

生成一张简单的验证码

这里需要安装captcha这个库

pip install captcha

接下来使用下面这段代码,就可以得到一个简单的验证码图片

from  captcha.image import  ImageCaptcha
import matplotlib.pyplot as plt
import random
import string

# 定义字符集是数字和字符
chs=string.digits+string.ascii_uppercase
print(chs)
# 定义长度,宽度,字符个数,类别
width,height,n_len,n_class=170,80,4,len(chs)
# 定义图片宽度与高度
generator=ImageCaptcha(width=width,height=height)
# 生成一个4位随机字符串
random_str="".join([random.choice(chs) for i in range(4) ])
print(random_str)
# 生成随机验证码
img=generator.generate_image(random_str)
plt.imshow(img)
plt.title(random_str)
plt.show()

这个时候可以得到下面这样的图片

批量生成多张验证码

光光这样一张图片坑定是满足不了我的需求的所以,改改上面的代码,把他弄成一个生成多张图片程序。

from captcha.image import ImageCaptcha
import matplotlib.pyplot as plt
import numpy as np
import random
import string


chs = string.digits + string.ascii_uppercase
width, height, n_len, n_class = 170, 80, 4, len(chs)


def createxy(batch_size=100):
X = np.zeros((batch_size, height, width, 3), dtype=np.uint8)
Y = [np.zeros((batch_size, n_class), dtype=np.uint8) for i in range(n_len)]
generator = ImageCaptcha(width=width, height=height)
while True:
for i in range(batch_size):
# 随机字符串
random_str = "".join([random.choice(chs) for j in range(4)])
# 根据随机字符串生成验证码
X[i] = generator.generate_image(random_str)
for j, ch in enumerate(random_str):
Y[j][i, :] = 0
Y[j][i, chs.find(ch)] = 1
yield X, Y


def getycode(y):
# 降低维度,取出非0数据
y = np.argmax(np.array(y), axis=2)[:, 0]
# 显示等于1的取出字符
return "".join([chs[x] for x in y])


X, Y = next(createxy(1))
plt.imshow(X[0])
plt.title(getycode(Y))
plt.show()

弄完上面这些个就可以开始试着训练了,但是我没学会,所以下次再说。

关于Python如何生成验证码问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

验证 生成 字符 图片 项目 内容 字符串 问题 帮助 两个 代码 场景 多张 宽度 文章 更多 面的 学习 对抗 研究 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发后期发展路线 软件开发广告投放系统 数据库设计的技术指标 嘉定区自动化软件开发口碑推荐 网络安全主要威胁主要来自 连接授权服务器失败怎么回事电脑 网络安全生产自查工作总结 公共服务器哪个好 千纸鹤网络技术有限公司 重庆市社会科学规划项目数据库 crass数据库工具 软件开发转行做会计怎么样 文化艺木人才资料数据库张青敏 无锡信息网络技术有哪些 国际主流的数据库有哪些 自我保护网络安全演讲稿 证券公司服务器坏了 怎么看我的云服务器服务哪个网站 合肥网络软件开发公司 金融业网络安全人员认证 武汉金蝶软件开发公司在哪里 有数据库的网站怎么发布 韩服dnf登录正在检查服务器 济南弘日网络技术公司 牢固树立起为学院网络安全 太原市bim软件开发工程 合肥网络软件开发公司 认知无线网络技术应用 阿里云服务器内存 唐山工业校园网络安全
0