从4月中旬开始深度学习之旅,到现在已经逐渐对神经网络有了一些初步的认识,选择tensorflow框架进行深度学习时,刚开始或许不太适应这种graph形式,但是tensorflow也在一定程度上帮助我们更好地理解神经网路的框架。
谨以此文来鼓励在劳动节还依然坚持学习的自己。
一、项目简介
1.目标:建立一个纯数字验证码识别器
2.原理:CNN
3.工具:Tensorflow
4.意义:熟悉tensorflow框架,推导前向传播过程,促进CNN的理解
二、数据采集—— ImageCaptcha
训练数据和测试数据均来自于 captcha.image库中的ImageCaptcha类。
ImageCaptcha可以根据输入的文本生成相应的验证码图片
由于时第一次处理图像数据,所以前期大部分功夫还是以图像预处理为主
首先写一个脚本,测试一下文本验证码和图片验证码的获取
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import random
#载入数据集
from captcha.image import ImageCaptcha
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,总共有62*62*62*62种不同的label
#定义一个random_captcha_text函数,每调用一次就会生成一个验证码,其组成元素存放在一个列表中
def random_captcha_text(char_set=number+alphabet+ALPHABET, captcha_size=4):
captcha_text = []
for i in range(captcha_size): #循环取四次
x = random.choice(char_set) #random.choice随机选区一个元素
captcha_text.append(x)
return captcha_text
#将构成验证码的元素与图片相对应,从captcha.image库中获得相应的图片
def get_captcha_text_and_image():
#调用ImageCaptcha类,用来生成验证码图片
image = ImageCaptcha()
#用random_captcha_text()函数得到四个元素
captcha_text = random_captcha_text()
#将四个元素连接在一起,组成一个完整的验证码
captcha_text = ''.join(captcha_text)
#根据生成的文本验证码得到相应的图片验证码
captcha = image.generate(captcha_text)
#打开图片,PIL.Image.open()专接图片路径,用来直接读取该路径指向的图片
captcha_image = Image.open(captcha)
#将图片转化为array格式
captcha_image = np.array(captcha_image)
return captcha_text,captcha_image
最后测试一下数据是否正确
if __name__ == '__main__':
text, image = get_captcha_text_and_image()
f = plt.figure()
ax = f.add_subplot(111)
ax.text(0.1, 0.9,text, ha='center', va='center', transform=ax.transAxes)
plt.imshow(image)
plt.show()