前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python | Python 生成验证码(本篇文章无干货)

Python | Python 生成验证码(本篇文章无干货)

作者头像
咸鱼学Python
发布2020-05-28 19:11:26
1.1K0
发布2020-05-28 19:11:26
举报
文章被收录于专栏:咸鱼学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这个库

代码语言:javascript
复制
pip install captcha

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

代码语言:javascript
复制
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()

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

批量生成多张验证码

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

代码语言:javascript
复制
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()

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 生成验证码
    • 本篇文章无干货
      • 生成一张简单的验证码
        • 批量生成多张验证码
        相关产品与服务
        验证码
        腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档