tensorflow2.0环境下读取tfrecords文件里数据的方法

这是tensorflow2.0环境下读取tfrecords文件里数据的方法
总体分为四步:
1.加载tfrecords文件 tf.data.TFRecordDataset() 括号里填文件路径
2.创建描述功能字典
3.定义映射函数
4.通过map函数读取

                                        如果有问题请下方留言
from __future__ import absolute_import, division, print_function, unicode_literals
from io import BytesIO
# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras
# Helper libraries
import numpy as np
import matplotlib.pyplot as plt


# 加载tfrecords文件
object_datasets = tf.data.TFRecordDataset("C:/Users/53111/Desktop/voc2007/JPEGImages/train.tfrecord")

# 创建一个描述功能的字典,就是你在数据里都加了什么类型的字段
# FixedLenFeature代表固定长度字段里边的中括号是必须有的
# VarLenFeature代表可变长度的字段里边只要指定类型就好

object_feature = {
	'image/height': tf.io.FixedLenFeature([], tf.int64),
	'image/width':  tf.io.FixedLenFeature([], tf.int64),
    'image/filename': tf.io.FixedLenFeature([], tf.string),
    'image/source_id': tf.io.FixedLenFeature([], tf.string),
    'image/encoded': tf.io.FixedLenFeature([], tf.string),
    'image/format': tf.io.FixedLenFeature([], tf.string),
    'image/object/bbox/xmin': tf.io.VarLenFeature(tf.float32),
    'image/object/bbox/xmax': tf.io.VarLenFeature(tf.float32),
    'image/object/bbox/ymin': tf.io.VarLenFeature(tf.float32),
    'image/object/bbox/ymax': tf.io.VarLenFeature(tf.float32),
    'image/object/class/text': tf.io.VarLenFeature(tf.string),
    'image/object/class/label': tf.io.VarLenFeature(tf.int64),
}

# 划重点,这个映射函数是必须要有的
# 这里的exam_proto不用自己传,函数里的第二个参数是上面定义的功能字典
# 映射函数,用于解析一条example
def _parse_function (exam_proto): 
    return tf.io.parse_single_example (exam_proto, object_feature)

# 这里把解析函数传进来就好了  
x = object_datasets.map(_parse_function)


# 这里通过for循环读取每条数据,
# 这里的重点是用plt显示二进制图片
# 其他的可以自行读取

for i in x:
	print(i['image/height'])
	i_raw = i['image/encoded'].numpy()
	plt.figure("Image") # 图像窗口名称
	plt.imshow(plt.imread(BytesIO(i_raw)))
	plt.axis('on') # 关掉坐标轴为 off
	plt.title('image') # 图像题目
	plt.show()

你可能感兴趣的:(tensorflow2.0环境下读取tfrecords文件里数据的方法)