在做TensorFlow案例时好多图片数据集都是可以直接在库中调用的,比如Mnist,CIFAR-10等等。但是在跑自己项目的时候如何去读取自己的数据集呢?这里有两种方法制作数据集。1.CSV文件的读取
2.TFRecords文件的读取。
1.CSV文件的创建与读取
新建名为jpg的文件夹,其中有若干图片是需要对其读取地址和标签的对象。path作为文件夹的路径被设定,之后的filename是读取文件路径。通过调用文件夹内容的递归查询,重新以需要的格式拼接字符串并重新写入。csv文件每一行被逗号分成两部分,前一部分是图片的地址,后一部分是设定的标签名。
import os
path = r'C:\Users\Qiuyi\...\datasets\jpg_splitCodes'
filenames=os.listdir(path)
strText = ""
with open("train_list.csv", "w") as fid:
for a in range(len(filenames)):
strText = path+os.sep+'code' + filenames[a] + "," + filenames[a].split('.')[0] + "\n"
fid.write(strText)
fid.close()
读取数据时需要2个数组分别存放读取的图片地址和标签,对于CSV文件调用readlines函数即可。
tf.read_line(image_path):读取图片地址的函数(tensorflow中地址信息也需要用函数读取)
tf.image.decode_jpeg:对读取进来的图片解码成JPG格式,并在此设定了图像的通道。channels=1表示读取的图像为灰度。
tf.image.convert_image_dtype:对图像进行转化,将图像矩阵转化成tensorflow需要的张量格式。
import tensorflow as tf
import cv2
image_add_list = []
image_label_list = []
with open("train_list.csv") as fid:
for image in fid.readlines():
image_add_list.append(image.strip().split(",")[0])
image_label_list.append(image.strip().split(",")[1])
def get_image(image_path):
return tf.image.convert_image_dtype(
tf.image.decode_jpeg(
tf.read_file(image_path), channels=1),
dtype=tf.uint8)
img = tf.image.convert_image_dtype(tf.image.decode_jpeg(tf.read_file('3.jpeg'), channels=1),dtype=tf.uint8)
with tf.Session() as sess:
cv2Img = sess.run(img)
img2 = cv2.resize(cv2Img, (200,200))
cv2.imshow('image', img2)
cv2.waitKey()