python生成验证码的程序_Python | Python 生成验证码(本篇文章无干货)

本文介绍了如何使用Python的captcha库生成简单的验证码图片,包括单张和批量生成,并提供了相关项目的推荐,适合初学者入门。
摘要由CSDN通过智能技术生成

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()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值