# -*- coding: utf-8 -*-
"""
Created on Fri Oct 5 08:02:05 2018
@author: asus
"""
#8 用神经网络破解验证码
#8.2.1 绘制验证码
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from skimage import transform as tf
#创建一个用于生产验证码的基础函数。
def create_captcha(text, shear=0, size=(100, 24)):
im = Image.new("L", size, "black") #使用字母L生成一张黑白图像
draw = ImageDraw.Draw(im) #初始化实例,为后面PIL绘图做准备
font = ImageFont.truetype(r"Coval-Bold.otf", 22) #指定所使用的字体
draw.text((2, 2), text, fill=1, font=font)
image = np.array(im) #把PIL图像转换为numpy数组
affine_tf = tf.AffineTransform(shear=shear) #应用错切变化效果,返回图像
image = tf.warp(image, affine_tf)
return image / image.max() #对图像特征进行归一化处理
%matplotlib inline
from matplotlib import pyplot as plt
#生成验证码图像并显示它。
image = create_captcha("GENE", shear=0.3)
plt.imshow(image, cmap='Greys')
#8.2.2 将图像且分为单个字母
from skimage.measure import label, regionprops
#图像风格函数接收图像列表,返回小图像列表,每张小图像为单词的一个字母
def segment_image(image):
labeled_image = label(image > 0)
subimages = []
for region in regionprops(labeled_image):
start_x, start_y, end_x, end_y = region.bbox
subimages.append(image[start_x:end_x,start_y:end_y])
if len(subimages) == 0:
return [image,]
return subimages
#使用刚才定义的函数,就能从前面生成的验证码中找到小图像
subimages = segment_image(image)
#还可以查看小图像
f, axes = plt.subplots(1, len(subimages), figsize=(10, 3))
for i in range(len(subimages)):
axes[i].imshow(subimages[i], cmap="gray")
#8.2.3 创建训练集
from sklearn.utils import check_random_state
#指定随机状态值,创建字母列表
random_state = check_random
8.用神经网络破解验证码
最新推荐文章于 2023-03-16 10:54:56 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)