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

一般来说,使用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中,可以异步接收完图片数据之后,调用这个函数进行数据转换:

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

在Flask中,可以这么处理:

from flask import request
@app.post(
"/api/inference") def infer(): file = request.files['file'] processed_image = process_image(file.read())   # 接着做其他处理 ...

参考:

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

[2] Flask接收和返回图片

(完)

posted @ 2023-08-31 17:12  大师兄啊哈  阅读(515)  评论(0编辑  收藏  举报