如何解决将图像另存为原始记录在TFRecord文件中,然后回读并在屏幕上显示图像
我要执行以下操作:在tensorflow中使用JPEG格式编码图像,将其放入probuff的 BytesList 功能中,对其进行序列化,保存,然后再次读取。阅读后,我必须使用feature_description
解析图像,然后从JPEG格式解码图像。这是我尝试过的:
from sklearn.datasets import load_sample_images
from tensorflow.train import BytesList,FloatList,Int64List
from tensorflow.train import Feature,Features,Example
import tensorflow as tf
import numpy as np
import matplotlib as plt
# Loading the image and printing it
img = load_sample_images()["images"][0]
plt.imshow(img)
plt.axis("off")
plt.title("Original Image")
plt.show()
# Encode the image to JPEG
data = tf.io.encode_jpeg(img)
# Convert it to a protobuf Example
example_with_image = Example(
features = Features(
feature = {
"image": Feature(bytes_list = BytesList(value = [data.numpy()]))
}
)
)
# Serialize the protobuf Example to a string
serialized_example = example_with_image.SerializetoString()
# Imagine we saved 'serialized_example' to disk and read it back into memory
# We Now want to print the image
# Provide 'feature_description' so that the parse function kNows the default
# value
feature_description = {
"image": tf.io.VarLenFeature(tf.string)
}
# Parse the serialized string
example_with_image = tf.io.parse_single_example(serialized_example,feature_description)
这一切都很好。然后,我尝试使用Tensorflow的decode_jpeg()
函数将图像解码回去:
decoded_img = tf.io.decode_jpeg(example_with_image)
这不起作用。我得到以下ValueError
:
ValueError: Attempt to convert a value ({'image': <tensorflow.python.framework.sparse_tensor.SparseTensor object
at 0x000002B4C90AB9D0>}) with an unsupported type (<class 'dict'>) to a Tensor.
它也不适用于更通用的tf.io.decode_image()
Tensorflow函数。
老实说,我不知道发生了什么事。我不应该找回图像吗?怎么了?
解决方法
使用
example_with_image
后的 parse_single_example
是一个字典,其键为图像,稀疏张量为值
example_with_image
看起来像这样:
{'image': <tensorflow.python.framework.sparse_tensor.SparseTensor at 0x25b29440cc8>}
decode_jpeg
函数需要一个字节值,但是您正在提供字典。
提取值的正确方法是:
代码:
image = tf.io.decode_jpeg(example_with_image1['image'].values.numpy()[0])
plt.imshow(image)
输出:
您还可以将图像解析为FixedLenFeature
而不是VarLenFeature
。在这种情况下,您将获得一个密集的张量而不是一个稀疏的张量。
代码:
feature_description = {
"image": tf.io.FixedLenFeature([],tf.string)
}
# Parse the serialized string
example_with_image = tf.io.parse_single_example(serialized_example,feature_description)
image = tf.io.decode_jpeg(example_with_image['image'].numpy())
plt.imshow(image)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。