数据挖掘实战(九)--用神经网络破解验证码

本章内容:本章介绍如何根据验证码图像的像素值,用神经网络识别图像中的字母,从而自动识别验证码。

步骤

(1) 把大图像分成只包含一个字母的4张小图像。 (2) 为每个字母分类。 (3) 把字母重新组合为单词。 (4) 用词典修正单词识别错误。

一、神经网络简介

神经网络由一系列相互连接的神经元组成。每个神经元都是一个简单 的函数,接收一定输入,给出相应输出。神经元可以使用任何标准函数来处理数据,比如线性函数,这些函数统称为激活函数 。这些神经元紧密连接,密切配合,能够通 过学习得到一个模型,使得神经网络成为机器学习领域最强大的概念之一 。

用于数据挖掘应用的神经网络,神经元按照层级进行排列。第一层,也就是输入层,接收来 自数据集的输入。第一层中的每个神经元对输入进行计算,把得到的结果传给第二层的神经元。 这种叫作前向神经网络 。 神经网络中,上一层的输出作为下一层的输入,直到到达最后一层:输出层。输出结果表示的是神经网络分类器给出的分类结果。输入层和输出层之间的所有层被称为隐含层,因为在这些层中,其数据表现方式,常人难以理解。大多数神经网络至少有三层,而如今大多数应用所使用的神经网络层次比这多得多。

二、单字母预测

  1. 绘制验证码

编写创建验证码的函数,目标是绘制一张含有单词的图像,对单词使用错切变化效果。

Draw.text()函数介绍:
ImageDraw.Draw.text(xy, text, fill=None, font=None, anchor=None, spacing=0, align=”left”)
参数:
xy-文字的位置。
text-要绘制的文本。如果包含任何换行符,则文本将传递到multiline_text()
fill-用于文本的颜色。
font-一个ImageFont实例。
spacing-如果文本传递到multiline_text(),则行之间的像素数。
align-如果文本已传递到multiline_text(),“left”,“center”或“right”
from PIL import Image, ImageDraw, ImageFont
# 创建生成验证码的函数(参数:一个单词,错切值:通常在0 ~ 0.5之间,大小:图像维度)
def create_captcha(text, shear=0, size=(100, 30)):
    im = Image.new("L", size, "black")
    # 为ImageDraw类初始化一个实例
    draw = ImageDraw.Draw(im)
    # 指定验证码文字所使用的字体,字体文件--Coval-Regular.otf
    font = ImageFont.truetype('./data/Coval-Regular.otf', 22)
    # 用pIL绘图
    draw.text((0, 0), text, fill=1, font=font)
    # 把PIL图像转换为numpy数组
    image = np.array(im)
    # 应用错切变化效果
    affine_tf = tf.AffineTransform(shear=shear)
    image = tf.warp(image, affine_tf)
    # 对图像特征进行归一化处理,确保特征值落在0到1之间。
    return image / image.max()

image = create_captcha("GENE", shear=0.5)
from matplotlib import pyplot as plt
plt.imshow(image, cmap='Greys')
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值