gpt4 book ai didi

python - 如何从flask api检索 flutter 中的图像

转载 作者:行者123 更新时间:2023-12-04 09:05:18 26 4
gpt4 key购买 nike

我在 Flask 中有一个接受图像文件的 post 请求,我想返回另一个图像以在 Flutter 中检索它并将其放在屏幕上。
在 Flutter 中,我可以通过 post 请求发送图像,但我不知道如何检索图像并将其放在屏幕上。
我知道我可以将图像保存在 Flask 的静态文件夹中,并从 Flutter 检索 URL,并且它有效,但我认为这对于我正在做的事情来说效率太低了。
所以我想直接发送图像而不保存它。
这是我最后一次尝试,但没有成功。

@app.route("/send-image", methods=['POST'])
def send_image():
if request.method == 'POST':

user_image = request.files["image"]
image = cv2.imdecode(np.frombuffer(
user_image.read(), np.uint8), cv2.IMREAD_COLOR)

#data is a NumPy array returned by the predict function. This numpy array it's an image
data = predict(image)

data_object = {}
data = data.reshape(data.shape[0], data.shape[1], 1)
data2 = array_to_img(data)

b = BytesIO()
data2.save(b, format="jpeg")
b.seek(0)

data_object["img"] = str(b.read())
return json.dumps(data_object)
在这里,我返回了一个 Uint8List,因为我从互联网上读到我可以将它放入 Image.memory() 以将图像放在屏幕上。
Future<Uint8List> makePrediction(File photo) async {
const url = "http://192.168.0.11:5000/send-image";
try {
FormData data = new FormData.fromMap({
"image": await MultipartFile.fromFile(photo.path),
});
final response = await dio.post(url, data: data);

String jsonResponse = json.decode(response.data)["img"].toString();
List<int> bytes =
utf8.encode(jsonResponse.substring(2, jsonResponse.length - 1));

Uint8List dataResponse = Uint8List.fromList(bytes);

return dataResponse;
} catch (error) {
print("ERRORRR: " + error.toString());
}
}
对不起,如果我在这里所做的没有意义,但是在尝试了很多事情之后我没有正确思考。
我真的需要你的帮助

最佳答案

您可以将图像转换为 base64 并使用 Flutter 显示它。
在服务器上:

import base64
...
data_object["img"] = base64.b64encode(b.read()).decode('ascii')
...
在客户端:
...
String imageStr = json.decode(response.data)["img"].toString();
Image.memory(base64Decode(imageStr));
...
你的服务器端代码的问题是它试图强制一个 bytesstr对象使用函数 str() .
但是,在 Python 3 中, bytes.__repr__str() 调用自 bytes.__str__没有定义。这会导致如下结果:
str(b'\xf9\xf3') == "b'\\xf9\\xf3'"
它使 JSON 响应看起来像:
{"img": "b'\\xf9\\xf3'"}
如果不写专门的解析器,在 Flutter 中是无法读取这种格式的图像数据的。然而,base64 是一种众所周知的二进制数据编码格式,我们确实有一个解析器 base64Decode 在 flutter 中。

关于python - 如何从flask api检索 flutter 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63461623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com