一、实现图片向TFRecord的转换
(1)假设文件夹G:\Exercise\Python\tfrecord中有两张图片,分别为:0.jpg, 1.jpg,如下图所示:
(2)新建命名为:”image_information.txt_bak“的文件夹,其中内容为:
它存取了图片所在的文件夹信息,以及每张图片的label
(3)并新建命名为“Img2Tfrecord.py”的python文件,用于编程实现jpeg格式向TFRecord格式的转换,并新建“data”的文件夹,以保存变换得到的“**.tfrecords”的文件.
“Img2Tfrecord.py”的具体代码如下:
# -*- coding:utf-8 -*-
__author__="David Chow"
# 将图片保存成 TFRecord
import tensorflow as tf
import numpy as np
savedir="G:/Exercise/Python/tfrecord/data/data.tfrecords" #希望在data/文件夹中生成“data.tfrecords"的TFRecord格式文件
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
def load(imgdir,width,height,method=0):
# 准备一个 writer 用来写 TFRecord 文件
writer=tf.python_io.TFRecordWriter(savedir)
imglist=open(imgdir,'r')
with tf.Session() as sess:
for line in imglist: #open 打开的文件返回对象是一个可迭代对象,直接用 for 迭代访问
# 获得图片的路径和类型
tmp=line.strip().split(' ') #str.strip([chars])用于去除头尾的字符chars,为空时默认删除空白符;
#str.split(' ')通过指定一个空格对字符串进行切片,返回分割后的字符串列表tmp
imgpath=tmp[0] #字符串列表tmp中tmp[0]代表该图像的路径
label=int(tmp[1]) #字符串列表tmp中tmp[1]代表该图像的标签
# 读取图片
img=tf.gfile.FastGFile(imgpath,'r').read()
# 解码图片(如果是 png 格式就使用tf.image.decode_png))
img=tf.image.decode_jpeg(img)
# 图片归一化,[0,1],浮点类型数据。因为为了将图片数据能够保存到 TFRecord 结构体中,所以需要将其图片矩阵转换成 string,
# 所以为了在使用时能够转换回来,这里确定下数据格式为 tf.float32
img=tf.image.convert_image_dtype(img,dtype=tf.float32)
# 把图片转换成希望的大小,由于本例子中两张图片大小都是650*434,所以此步骤可以省略。要注意的时候resize_images中输入图片的宽、高顺序
img=tf.image.resize_images(img,[height,width],method)
# 执行op:image
img=sess.run(img)
# 将其图片矩阵转换成string
img_raw=img.tostring()
# 将数据整理成 TFRecord 需要的数据结构
example=tf.train.Example(features=tf.train.Features(feature= \
{'imge_raw':_bytes_feature(img_raw),'label':_int64_feature(label)}))
# 写 TFRecord
writer.write(example.SerializeToString()) #SerializeToString()作用:把example序列化为一个字符串,因为在写入到TFRcorde的时候,write方法的参数是字符串的.
writer.close()
if __name__=='__main__':
load("G:/Exercise/Python/tfrecord/image_information.txt_bak",650,434)
(4)执行上述.py程序后,可以在data/文件夹中看到生成“data.tfrecords"的TFRecord格式文件,如图所示: