Python 烧瓶返回图像对象
我有一个React-Native项目,我将一张照片发送到我的Flask后端进行一些图像处理,然后将处理后的图像返回到React-Native(使用此整个过程的POST请求) 我能够将图像接收到我的Flask应用程序中,并且能够运行处理,但是,我不知道如何将图像发送回React Native。到目前为止,我已经尝试了所有方法,但没有将图像存储在任何地方,但我开始怀疑是否应该在flask中创建一个临时图像文件(利弊如何) 以下是我到目前为止的情况: app.py(烧瓶) 但是,由于某些原因,这在响应中返回未定义(我已检查进入烧瓶的数据是否正确):Python 烧瓶返回图像对象,python,react-native,opencv,flask,api-design,Python,React Native,Opencv,Flask,Api Design,我有一个React-Native项目,我将一张照片发送到我的Flask后端进行一些图像处理,然后将处理后的图像返回到React-Native(使用此整个过程的POST请求) 我能够将图像接收到我的Flask应用程序中,并且能够运行处理,但是,我不知道如何将图像发送回React Native。到目前为止,我已经尝试了所有方法,但没有将图像存储在任何地方,但我开始怀疑是否应该在flask中创建一个临时图像文件(利弊如何) 以下是我到目前为止的情况: app.py(烧瓶) 但是,由于某些原因,这在响应
constphoto={uri:frontProfile,键入:“image/jpeg”,名称:“photo.jpg”};
var form=new FormData();
表格。附加(“FrontProfile”,照片);
等待获取(“http://:5000/analyze img”{
方法:“张贴”,
主体:形式,
})
.然后((resp)=>resp.json())
.then((json)=>console.log(json))
.catch((err)=>console.error(err));
返回
JSON解析错误:意外标识符“undefined”
非常感谢您的帮助 问题似乎在:response=make\u response(buffer.tobytes())
line。根据文件
使_响应(rv)将返回值从视图函数转换为
响应类的实例
参数rv-
view函数的返回值。view函数必须返回
回答。返回None或视图结束时不返回
不允许。视图_rv允许以下类型:
str(Python 2中的unicode)使用字符串创建响应对象
编码为UTF-8作为主体
字节(Python 2中的str)创建一个响应对象,其中字节为
身体
口述一本在归还前将被整理的词典
由于您将字节对象传递给此方法,因此
make_响应
不会隐式转换为JSON格式,这是您在客户端所期望的。这可以通过使用来解决:response=make_response({“payload”:buffer.tobytes()},200)
嗨,肯,我不确定“出于某种原因,这在响应中返回未定义”是什么意思?谢谢,我的意思是当我在react native(使用fetch之后)中读取响应数据时,它的未定义,我将在上面添加一个编辑,您在react native中使用什么方法读取响应数据?我已编辑了上面的问题,以包括如何读取响应,但我使用了response.json(),它返回一个错误,因为响应是未定义的Hanks,我试着实现了这个,但我得到了以下错误:TypeError:bytes类型的对象不是JSON可序列化的
请在构建JSONawesome之前尝试类型转换str
,谢谢,现在它看起来像是返回了一些东西到前端,但是你知道我现在如何在前端重新创建图像吗?是的,如果要将编码后的图像发送到客户端,则需要使用OpenCV或其他一些图像轻量反压缩库在React本机端对图像进行解码。
@app.route('/analyze-img', methods=['POST'])
def analyze_img():
# read image file
filestr = request.files['FrontProfile'].read()
npimg = np.frombuffer(filestr, dtype=np.uint8)
img = cv.imdecode(npimg, cv.IMREAD_UNCHANGED)
# process image
img_annotated = process_img(img)
# return output image
retval, buffer = cv.imencode('.jpg', img_annotated)
response = make_response(buffer.tobytes())
return response
const photo = { uri: frontProfile, type: "image/jpeg", name: "photo.jpg" };
var form = new FormData();
form.append("FrontProfile", photo);
await fetch("http://<my IP>:5000/analyze-img", {
method: "POST",
body: form,
})
.then((resp) => resp.json())
.then((json) => console.log(json))
.catch((err) => console.error(err));