像MNIST的一些数据集,一般是一张图像对应一个标签,而对于一张图片多个标签的情况怎么识别?这篇博客可以提供一个思路,拿验证码举例,大概思想就是将多个数字转化成数列的形式。下面是实现代码
import tensorflow as tf
import numpy as np
from PIL import Image
import os
import random
import time
#验证码图片的存放路径
CAPTCHA_IMAGE_PATH = 'F:\\YanZhengMa\\1\\valid\\'
#验证码图片的宽度
CAPTCHA_IMAGE_WIDHT = 160
#验证码图片的高度
CAPTCHA_IMAGE_HEIGHT = 60
CHAR_SET_LEN = 10
CAPTCHA_LEN = 4
#60%的验证码图片放入训练集中
TRAIN_IMAGE_PERCENT = 0.6
#训练集
TRAINING_IMAGE_NAME = []
#验证集
VALIDATION_IMAGE_NAME = []
#存放训练好的模型的路径
MODEL_SAVE_PATH = 'F:\\YanZhengMa\\1\\yz\\'
def get_image_file_name(imgPath=CAPTCHA_IMAGE_PATH):
fileName = []
total = 0
for filePath in os.listdir(imgPath):
captcha_name = filePath.split('/')[-1]
fileName.append(captcha_name)
total += 1
return fileName, total
#将验证码转换为训练时用的标签向量,维数是 40
#例如,如果验证码是 ‘0296’ ,则对应的标签是
# [1 0 0 0 0 0 0 0 0 0
# 0 0 1 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0 0 1
# 0 0 0 0 0 0 1 0 0 0]
def name2label(name):
label = np.zeros(CAPTCHA_LEN * CHAR_SET_LEN)
for i, c in enumerate(name):
idx = i*CHAR_SET_LEN + ord(c) - ord('0')
label[idx] = 1
return