如何在fastAPI中返回图像

问题描述 投票:0回答:1

我使用Opencv比较两个图像后,试图在fastAPI中返回图像。

这是我到目前为止所做的:

from fastapi import FastAPI , File, UploadFile
import numpy as np
from cv2 import *
import os
import base64


app = FastAPI(debug = True)


@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...),file1: UploadFile = File(...)):
    content = await file.read()
    nparr = np.fromstring(content, np.uint8)
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

    content1 = await file1.read()
    nparr1 = np.fromstring(content1, np.uint8)
    img1 = cv2.imdecode(nparr1, cv2.IMREAD_COLOR)

    akaze = cv2.AKAZE_create()
    kpts1, desc1 = akaze.detectAndCompute(img, None)
    kpts2, desc2 = akaze.detectAndCompute(img1, None)
    matcher = cv2.DescriptorMatcher_create(cv2.DescriptorMatcher_BRUTEFORCE_HAMMING)
    matches_1 = matcher.knnMatch(desc1, desc2, 2)
    good_points = []
    for m,n in matches_1:
            if m.distance < 0.7 * n.distance:
                good_points.append(m)
    mat = (round(len(kpts2)/len(good_points),2))

我遇到错误的地方

    return_img = cv2.processImage(img)
    _, encoded_img = cv2.imencode('.PNG', return_img)
    encoded_img = base64.b64encode(return_img)

    return {"The similarity is": mat,'encoded_img': endcoded_img}

我在做什么错?

python api opencv opencv3.1 fastapi
1个回答
0
投票

如果只想返回图像,则以标题中的正确编码返回图像本身,请参见Return a Response Directly

如果您还需要返回带有JSON中图像的其他信息,请参阅此SO问题How do you put an image file in a json object?(注意:解决方案位于javascript中,但是很容易将其用于python)]

© www.soinside.com 2019 - 2024. All rights reserved.