如何将解释器输出数组转换回base64图像?

时间:2019-09-16 05:31:35

标签: python tensorflow-lite

我正在加载图像并使用我训练过的tflite处理它,我想从输出中提取base64。我该怎么办?

在将模型转换为tflite之前,base64结果只是输出dict中的一个值。现在输出不同了,我不知道如何找到它。

这是我从拦截器输入和输出的详细信息,供参考

[{'name': 'TFLiteInput', 'dtype': <class 'numpy.float32'>, 'shape': array([  1, 256, 256,   3]), 'index': 1, 'quantization': (0.0, 0)}]

[{'name': 'TFLiteOutput', 'dtype': <class 'numpy.float32'>, 'shape': array([  1, 256, 256,   3]), 'index': 2, 'quantization': (0.0, 0)}]

控制台输出

[[[[1. 1. 0.]
   [1. 1. 1.]
   [1. 1. 1.]
   ...
   [1. 1. 1.]
   [1. 1. 0.]
   [1. 1. 1.]]

  [[1. 1. 0.]
   [1. 1. 1.]
   [1. 1. 1.]
   ...

<class 'numpy.ndarray'>

我的代码:

import numpy as np
import tensorflow as tf
import base64, json, cv2

interpreter = tf.contrib.lite.Interpreter(model_path="converted_model.tflite")
interpreter.allocate_tensors()

input_file = "309.png"
im = cv2.imread(input_file)
im = im.astype(np.float32, copy=False)
input_image = im
input_image = np.array(input_image, dtype=np.uint8)
input_image = np.expand_dims(input_image, axis=0)

input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

input_data = np.array(input_image, dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])

print(output_data)
print(type(output_data))

1 个答案:

答案 0 :(得分:1)

该问题与TFLite口译员并没有真正的关系。本质上,您想要序列化包含图像的Numpy数组。

Base64是一种编码格式,它可以是原始数据或内部的其他格式(例如PNG,JPEG等)。例如,下面是一个示例代码段,用于编写PNG并将其编码为Base64:

import numpy as np
from PIL import Image
import io
import base64

image = Image.fromarray(output_data)
with io.BytesIO() as output:
  image.save(output, format="PNG")
  base64_img = base64.b64encode(output.getvalue())

您可以轻松地将代码更改为使用JPEG或原始数据。