0x00 前言
本篇博文的代码主要修改自以前的一篇文章: Tensorflow应用之简单验证码识别
0x01 gen_check_code.py
这个python 文件主要是实现了随机选择训练集里面的内容并将其封装成一个函数供神经网络使用。
其中的 root_dir 参数要根据具体的训练文件的位置进行修改。
代码如下:
from captcha.image import ImageCaptcha # pip install captcha
import numpy as np
from PIL import Image
import random
# import matplotlib.pyplot as plt
import os
from random import choice
# 验证码中的字符, 就不用汉字了
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']
root_dir = "d:\\jwxt\\train"
# 验证码一般都无视大小写;验证码长度4个字符
def random_captcha_text(char_set=number, 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
def gen_list():
img_list = []
for parent, dirnames, filenames in os.walk(root_dir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for filename in filenames: # 输出文件信息
img_list.append(filename.replace(".jpg", ""))
# print("parent is:" + parent)
# print("filename is:" + filename)
# print("the full name of the file is:" + os.path.join(parent, filename)) # 输出文件路径信息
return img_list
img_list = gen_list()
def gen_captcha_text_and_image_new():
img = choice(img_list)
captcha_image = Image.open(root_dir + "\\" + img + ".jpg")
# captcha_image = captcha_image.resize((90, 30))
captcha_image = np.array(captcha_image)
return img, captcha_image