源码来自斗大的熊猫。使用captcha生成验证码,作为后面训练模型生成能够识别验证码模型的数据集。captcha是一个能够生成图片验证码和语音验证码的库。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from captcha.image import ImageCaptcha  # pip install captcha
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import random

# 初始化验证码中的字符
number = ['0','1','2','3','4','5','6','7','8','9']
alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

# 随机生成验证码文本,验证码一般都无视大小写;验证码长度4个字符
def random_captcha_text(char_set=number+alphabet+ALPHABET, captcha_size=4):
captcha_text = []
for i in range(captcha_size):
c = random.choice(char_set)
captcha_text.append(c)
return captcha_text

# 调用上面的方法生成验证码文本,并且根据验证码文本生成对应的验证码图片
def gen_captcha_text_and_image():
image = ImageCaptcha()

captcha_text = random_captcha_text()

# 数组转换为字符串
captcha_text = ''.join(captcha_text)

captcha = image.generate(captcha_text)
# image.write(captcha_text, captcha_text + '.jpg') # 写到文件

captcha_image = Image.open(captcha)
captcha_image = np.array(captcha_image)
return captcha_text, captcha_image

if __name__ == '__main__':
# 测试
text, image = gen_captcha_text_and_image()

f = plt.figure() # 获得当前的figure
ax = f.add_subplot(1,1,1) # 设置行列
ax.text(0.1, 0.9,text, ha='center', va='center', transform=ax.transAxes) # 设置文本放置位置
plt.imshow(image) # 生成图像

plt.show() #显示图片

Python join()方法

描述

将序列中的元素以指定的字符连接生成一个新的字符串。

语法

‘sep’.join(seq)

参数说明

sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典

返回值

返回通过指定字符连接序列中元素后生成的新字符串。

figure语法及操作

语法

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

参数说明

num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定figure的宽和高,单位为英寸;
dpi:参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框

例子

1
2
3
4
import matplotlib.pyplot as plt
创建自定义图像
fig=plt.figure(figsize=(4,3),facecolor='blue')
plt.show()

subplot创建一个子图

subplot可以规划figure划分为n个子图,但每条subplot命令只会创建一个子图

语法

subplot(nrows,ncols,sharex,sharey,subplot_kw,**fig_kw)

参数

nrows:subplot的行数
ncols:subplot的列数
sharex:所有subplot应该使用相同的X轴刻度
sharey:所有subplot应该使用相同的Y轴刻度
subplot_kw:创建各subplot的关键字字典

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt  
x = np.arange(0, 100)  
#作图1
plt.subplot(221)  
plt.plot(x, x)  
#作图2
plt.subplot(222)  
plt.plot(x, -x)  
 #作图3
plt.subplot(223)  
plt.plot(x, x ** 2)  
plt.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)
#作图4
plt.subplot(224)  
plt.plot(x, np.log(x))  
plt.show()