#  write in tfrecord
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string("tfrecords_dir", "./tfrecords/captcha.tfrecords", "验证码tfrecords文件")
tf.app.flags.DEFINE_string("captcha_dir", "../data/Genpics/", "验证码图片路径")
tf.app.flags.DEFINE_string("letter", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "验证码字符的种类") def dealwithlabel(label_str): # 构建字符索引 {0:'A', 1:'B'......}
num_letter = dict(enumerate(list(FLAGS.letter))) # 键值对反转 {'A':0, 'B':1......}
letter_num = dict(zip(num_letter.values(), num_letter.keys())) print(letter_num) # 构建标签的列表
array = [] # 给标签数据进行处理[[b"NZPP"]......]
for string in label_str: letter_list = []# [1,2,3,4] # 修改编码,bytes --> string
for letter in string.decode('utf-8'):
letter_list.append(letter_num[letter]) array.append(letter_list) # [[13, 25, 15, 15], [22, 10, 7, 10], [22, 15, 18, 9], [16, 6, 13, 10], [1, 0, 8, 17], [0, 9, 24, 14].....]
print(array) # 将array转换成tensor类型
label = tf.constant(array) return label def get_captcha_image():
"""
获取验证码图片数据
:param file_list: 路径+文件名列表
:return: image
"""
# 构造文件名
filename = [] for i in range(6000):
string = str(i) + ".jpg"
filename.append(string) # 构造路径+文件
file_list = [os.path.join(FLAGS.captcha_dir, file) for file in filename] # 构造文件队列
file_queue = tf.train.string_input_producer(file_list, shuffle=False) # 构造阅读器
reader = tf.WholeFileReader() # 读取图片数据内容
key, value = reader.read(file_queue) # 解码图片数据
image = tf.image.decode_jpeg(value) image.set_shape([20, 80, 3]) # 批处理数据 [6000, 20, 80, 3]
image_batch = tf.train.batch([image], batch_size=6000, num_threads=1, capacity=6000) return image_batch def get_captcha_label():
"""
读取验证码图片标签数据
:return: label
"""
file_queue = tf.train.string_input_producer(["../data/Genpics/labels.csv"], shuffle=False) reader = tf.TextLineReader() key, value = reader.read(file_queue) records = [[1], ["None"]] number, label = tf.decode_csv(value, record_defaults=records) # [["NZPP"], ["WKHK"], ["ASDY"]]
label_batch = tf.train.batch([label], batch_size=6000, num_threads=1, capacity=6000) return label_batch def write_to_tfrecords(image_batch, label_batch):
"""
将图片内容和标签写入到tfrecords文件当中
:param image_batch: 特征值
:param label_batch: 标签纸
:return: None
"""
# 转换类型
label_batch = tf.cast(label_batch, tf.uint8) print(label_batch) # 建立TFRecords 存储器
writer = tf.python_io.TFRecordWriter(FLAGS.tfrecords_dir) # 循环将每一个图片上的数据构造example协议块,序列化后写入
for i in range(6000):
# 取出第i个图片数据,转换相应类型,图片的特征值要转换成字符串形式
image_string = image_batch[i].eval().tostring() # 标签值,转换成整型
label_string = label_batch[i].eval().tostring() # 构造协议块
example = tf.train.Example(features=tf.train.Features(feature={
"image": tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_string])),
"label": tf.train.Feature(bytes_list=tf.train.BytesList(value=[label_string]))
})) writer.write(example.SerializeToString()) # 关闭文件
writer.close() return None if __name__ == "__main__": # 获取验证码文件当中的图片
image_batch = get_captcha_image() # 获取验证码文件当中的标签数据
label = get_captcha_label() print(image_batch, label) with tf.Session() as sess: coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) # 获取tensor里面的值
label_str = sess.run(label) print(label_str) # 处理字符串标签到数字张量
label_batch = dealwithlabel(label_str) print(label_batch) # 将图片数据和内容写入到tfrecords文件当中
write_to_tfrecords(image_batch, label_batch) coord.request_stop() coord.join(threads)
 # read tfrecords
def read_and_decode():
"""
读取验证码数据API
:return: image_batch, label_batch
"""
# 1、构建文件队列
file_queue = tf.train.string_input_producer([FLAGS.captcha_dir]) # 2、构建阅读器,读取文件内容,默认一个样本
reader = tf.TFRecordReader() # 读取内容
key, value = reader.read(file_queue) # tfrecords格式example,需要解析
features = tf.parse_single_example(value, features={
"image": tf.FixedLenFeature([], tf.string),
"label": tf.FixedLenFeature([], tf.string),
}) # 解码内容,字符串内容
# 1、先解析图片的特征值
image = tf.decode_raw(features["image"], tf.uint8)
# 1、先解析图片的目标值
label = tf.decode_raw(features["label"], tf.uint8) # print(image, label) # 改变形状
image_reshape = tf.reshape(image, [20, 80, 3]) label_reshape = tf.reshape(label, [4]) print(image_reshape, label_reshape) # 进行批处理,每批次读取的样本数 100, 也就是每次训练时候的样本
image_batch, label_btach = tf.train.batch([image_reshape, label_reshape], batch_size=FLAGS.batch_size, num_threads=1, capacity=FLAGS.batch_size) print(image_batch, label_btach)
return image_batch, label_btach
# write flags
FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string("tfrecords_dir", "./tfrecords/captcha.tfrecords", "验证码tfrecords文件")
tf.app.flags.DEFINE_string("captcha_dir", "../data/Genpics/", "验证码图片路径")
tf.app.flags.DEFINE_string("letter", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "验证码字符的种类")
# read flags
tf.app.flags.DEFINE_string("captcha_dir", "./tfrecords/captcha.tfrecords", "验证码数据的路径")
tf.app.flags.DEFINE_integer("batch_size", 100, "每批次训练的样本数")
tf.app.flags.DEFINE_integer("label_num", 4, "每个样本的目标值数量")
tf.app.flags.DEFINE_integer("letter_num", 26, "每个目标值取的字母的可能心个数")

最新文章

  1. Hibernate5.1.0的hello word
  2. 远程MSMQ
  3. highchars
  4. hdu 4604 动态规划
  5. CSS选项卡
  6. HelloMyBLOG!!!
  7. oracle - 查询某些表是空白,需要提升权限后,才可查询出数据
  8. [Hive]新增字段(column)后,旧分区无法更新数据问题
  9. centos7 mongodb安装
  10. Python3 与 C# 面向对象之~继承与多态
  11. day 12
  12. MATLAB:图像滤波,绝对值差(filter2,imabsdiff函数)
  13. Win7 VS2015及MinGW环境编译FFMPEG-20160326
  14. 如何找回Ucenter创始人密码,账号无需修改
  15. ColorSense颜色检测器
  16. Intel超低功耗CPU的一些信息
  17. 谁是最快的Go Web框架
  18. 常用的一个cookie 对象,还有path 兼容性问题
  19. 20155218 《Java程序设计》实验五(网络编程与安全)实验报告
  20. Eclipse中快速定位

热门文章

  1. Ubuntu16.04安装Consul
  2. Spring、SpringMVC、Spring Boot、Spring Cloud 概念、关系及区别
  3. 去掉WARN spring.jpa.open-in-view is enabled by default
  4. (CSDN迁移)JAVA多线程实现-单线程化线程池newSingleThreadExecutor
  5. SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver
  6. log4j重复打印的解决方法
  7. Qt中 布局管理器失效问题
  8. H5页面跳转与传值
  9. 【leetcode-62,63,64 动态规划】 不同路径,最小路径和
  10. oracle 分页sql