Python web框架 fastapi 接收图像并使用cv2进行处理

大师兄的博客 / 2023-08-31 / 原文

一般来说,使用web框架接收图片数据后,希望能够直接处理,而不是不保存为本地图片后再加载,以此省去IO时间。这种场景在CV服务中更为常见。

以下是一种方法,接收完图片数据之后,转为opencv 的Image array对象并返回:

import cv2
import numpy as np

def process_image(image_data):
    # 将图像数据转为cv2 Image array对象
    image_np = np.frombuffer(image_data, np.uint8)
    image = cv2.imdecode(image_np, cv2.IMREAD_COLOR)
    return image

读取的数据,与直接读取本地图片文件返回的数据一致:

image = cv2.imread(filename)

在Fastapi中,可以异步接收完图片数据之后,调用这个函数进行数据转换:

...

@app.post("/api/inference")
async def infer(file: UploadFile=File(...)):
    # 接收文件并转成适当的格式
    contents = await file.read()
    processed_image = process_image(contents)
    # 接着做其他的处理
    ...

参考:

[1] FastAPI 接收图像并使用cv2进行处理,然后返回图像

(完)