将图像转换为张量

时间:2018-07-06 03:24:13

标签: python-2.7 tensorflow numpy-ndarray

我有一个压缩的numpy格式的图像数据,例如下面的项目数据。 (我不得不省略其中一些,而用“…”代替,因为它太长了。)我想将其转换为张量,如下所示。我是tensorflow的新手,所以非常感谢所有提示。

所需的输出:

<tf.Tensor 'ResizeNearestNeighbor_3:0' shape=(16, 224, 224, 3) dtype=float32>

代码:

Item[8]['imgs']

输出:

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\t\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18!\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17"$"\x1e$\x1c\x1e\x1f\x1e\xff\xdb\x00C\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xc0\x00\x11\x08\x00\xfe\x01\x8b\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\xff\xc4\x00\xb5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01}\x01\x02\x03\x00\x04\x11\x05\x12!

…

Mk\x14=\xcd\xb23\xb9\xff\x00\xbe\x80\x15\xd2\xda~\xcc\x1e\x19L}\xa3\xc4:\xa4\xa0\x7fu\x15\x7f\x9ekXa\xaa\xcdh\xbf#\tc\xe8A\xea\xff\x00\x03\xe4\xd7\xb5\x85\x86O\xde<\xf2:\xd2\xfd\x9a<\x00NGpV\xbe\xc8\xb6\xfd\x9b\xfe\x1e\xc6\x07\x9d&\xaf9\x1dw\\\xa8\xcf\xe4\xb5\xab\x07\xc0O\x86\x11\xa0\x07C\x9aB?\x89\xaf%\xcf\xe8\xc0V\xab\x03Y\xef\xf9\x99<\xce\x8fD\xcf\x88\xa3\xb4\x863\xf5\x1d8\xe2\xacEl\xcc\xf8\x8e\x06s\xdbh&\xbe\xef\xb2\xf8M\xf0\xea\xd3\x1eW\x85lX\x81\x8c\xcb\xbaO\xfd\x08\x9a\xe8\xb4\xdf\x0e\xe8\x1ah_\xec\xfd\x17N\xb5\xdb\xd0\xc5l\x8aG\xe2\x05h\xb2\xf9\xf5h\xcaY\xaczD\xf8KD\xf8{\xe3\x9dmc\x97K\xf0\x96\xa54o\xf7%0\x14C\xff\x00\x02l\n\xef\xb4\x0f\xd9\xdb\xe2\x15\xfe\xd6\xbf:~\x96\x9f\xf4\xdap\xef\xf9G\x91\xfa\xd7\xd8tV\xb1\xcb\xe1\xf6\x9bg4\xf3J\xafd\x91\xf3\xb6\x87\xfb/\xe9\xca\x15\xb5\xbf\x14]J\x7f\x8d-!T\x1f\xf7\xd3d\xfe\x95\xe8~\x1a\xf8)\xf0\xe7A\x01\xa2\xd0V\xfaQ\xff\x00-/\xa43\x1f\xc8\xfc\xbf\xa5z(\xa55\xd1\x0c-(\xed\x13\x96x\xba\xd3\xdeD\x16V\x96\xb66\xebogk\r\xb4+\xf7R$\n\xa3\xf0\x15=\x14WJV9\xc2\x8a(\xa0\x02\x8a(\xa0\x02\x8a(\xa0\x02\x8a(\xa0\x02\x8a(\xa0\x02\x8a(\xa0\x02\x8a(\xa0\x02\x8a(\xa0\x02\x8a(\xa0\x0f\xff\xd9'

更新:

下面的代码返回了具有正确形状的张量。

Code:

tstImg2=np.round(np.array(Image.open(StringIO(Item[8]['imgs'])).convert('RGB').resize((224,224)),dtype=np.float32))

tf.reshape(tstImg2, shape=[-1, 224, 224, 3])

Output:

<tf.Tensor 'Reshape_1:0' shape=(1, 224, 224, 3) dtype=float32>

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式将图像(例如,从OpenCV转换为Tensorflow的张量):

# Needed if you use OpenCV, By default, it use BGR instead RGB
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)

# Resize image to match with input model
image = cv.resize(image, (32, 32))

# Convert to Tensor of type float32 for example
image_tensor = tf.convert_to_tensor(image, dtype=tf.float32)

# Add dimension to match with input mode 
image_tensor = tf.expand_dims(image_tensor, 0)

# After you can predict image for example :
predictions = probability_model.predict(
        image_tensor, use_multiprocessing=True)

答案 1 :(得分:0)

可能解码不正确。请在输出指令前尝试以下操作:

item.decode("utf-8")

item 是要显示的元素。

答案 2 :(得分:0)

我在原始帖子中添加了一个更新,其中包含可从图像创建正确张量的代码。