Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶返回图像对象_Python_React Native_Opencv_Flask_Api Design - Fatal编程技术网

Python 烧瓶返回图像对象

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(烧瓶) 但是,由于某些原因,这在响应

我有一个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));