我正在加载图像并使用我训练过的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))
答案 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或原始数据。