[英]Convert tf.Tensor to numpy array and than save it as image in without eager_execution
我的 OC 对于苹果 M1 来说是很大的,因此我的 tensorflow 版本是 2.4,它是从苹果官方 github repo 安装的( https://github.com ) 当我使用下面的代码时,我得到 tensor(<tf.Tensor 'StatefulPartitionedCall:0' shape=(1, 2880, 4320, 3) dtype=float32>)
import tensorflow as tf
import tensorflow_hub as hub
from PIL import Image
import numpy as np
from tensorflow.python.compiler.mlcompute import mlcompute
from tensorflow.python.framework.ops import disable_eager_execution
disable_eager_execution()
mlcompute.set_mlc_device(device_name='gpu') # Available options are 'cpu', 'gpu', and 'any'.
tf.config.run_functions_eagerly(False)
print(tf.executing_eagerly())
image = np.asarray(Image.open('/Users/alex26/Downloads/face.jpg'))
image = tf.cast(image, tf.float32)
image = tf.expand_dims(image, 0)
model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")
sr = model(image) #<tf.Tensor 'StatefulPartitionedCall:0' shape=(1, 2880, 4320, 3)dtype=float32>
如何从 sr Tensor 获取图像?
To create an numpy array from a tensorflow tensor you can use `make_ndarray': https://www.tensorflow.org/api_docs/python/tf/make_ndarray
make_ndarray
将原始张量作为参数,因此您必须先将张量转换为原始张量
proto_tensor = tf.make_tensor_proto(a) # convert tensor a to a proto tensor
( https://www.geeksforgeeks.org/tensorflow-how-to-create-a-tensorproto/ )
将张量转换为 Tensorflow 中的 numpy 数组?
张量必须是 if shape (img_height, img_width, 3)
3
如果要生成 RGB 图像(3 个通道),则为 3,请参阅以下代码以使用PIL
将 numpy aaray 转换为图像
要从 numpy 数组生成图像,您可以使用PIL
(Python 图像库): 如何将 numpy 数组转换为(并显示)图像?
from PIL import Image
import numpy as np
img_w, img_h = 200, 200
data = np.zeros((img_h, img_w, 3), dtype=np.uint8) <- zero np_array depth 3 for RGB
data[100, 100] = [255, 0, 0] <- fille array with 255,0,0 in RGB
img = Image.fromarray(data, 'RGB') <- array to image (all black then)
img.save('test.png')
img.show()
来源: https://www.w3resource.com/python-exercises/numpy/python-numpy-exercise-109.php
如果您急切地执行它,它会起作用:
import tensorflow as tf
import numpy as np
import tensorflow_hub as hub
model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")
x = np.random.rand(1, 224, 224, 3).astype(np.float32)
image = model(x)
然后您可以使用tf.keras.preprocessing.image.save_img
来保存生成的图像。 您可能必须将结果乘以255
并转换为np.uint8
才能使 function 工作,我不确定。
这是你正在照顾的老式方式吗?
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(sr)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.