from flask import Flask, Response, request, views
from infer import inference
import numpy as np
import cv2
app = Flask("HM-DETR")
class MainView(views.MethodView):
@staticmethod
def get():
return """
DETR 在线演示
"""
@staticmethod
def post():
pic = request.files.get("img")
if pic is None:
return Response(status=414, response="key param lost")
ext = pic.filename.split(".")[-1].lower()
if ext not in ["jpg", "jpeg", "bmp", "png", "rgb", "tif", "tiff", "gif"]:
return Response(status=413, response="file type error")
content = pic.read()
if len(content) > 1024 * 1024 * 5:
return Response(status=410, response="image is too large")
img = cv2.imdecode(np.frombuffer(content, np.uint8), 1) # noqa
result = inference(img)
_, result = cv2.imencode(".jpg", result) # noqa
return Response(response=result.tobytes(), mimetype="image/jpg")
app.add_url_rule("/", view_func=MainView.as_view("main"))
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5080)