Tensorflow 新手入门之4位数字字母验证码识别
用的是ImageCaptcha自动生成的图片
# coding=gbk
import numpy as np
import tensorflow as tf
from captcha.image import ImageCaptcha
import matplotlib.pyplot as plt
from PIL import Image
import random
from tensorflow.python.framework.dtypes import string
from numpy import char
#只做4位数字的识别
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']
keep_prob = tf.placeholder(tf.float32) # dropout
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)
captcha_image=Image.open(captcha)
captcha_image=np.array(captcha_image)
return captcha_text,captcha_image
def conver2gray(img):
if len(img.shape)>2:
gray=np.mean(img,-1)
return gray
else:return img
def text2vec(text):
text_len=len(text)
if text_len>MAX_CAPTCHA:
raise ValueError('longer than 4')
vector=np.zeros(MAX_CAPTCHA*CHAR_SET_LEN)
def char2pos(c):
if c == '_':
k = 62
return k
k = ord(c) - 48
if k > 9:
k = ord(c) - 55
if k > 35:
k = ord(c) - 61
if k > 61:
raise ValueError('No Map')
return k
for i,c in enumerate(text):
idx=i*CHAR_SET_LEN+char2pos(c) #[1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0....]一共四十个元素 里面只有四个元素为1
vector[idx]=1
return vector
def vec2text(vec):
text=[]
char_pos=vec