Spaces:
Runtime error
Runtime error
import ultralytics.engine.results | |
from fastapi import FastAPI, UploadFile | |
from PIL import Image | |
from yolo_model import YoloModel | |
app = FastAPI() | |
model = YoloModel("SHOU-ISD/fire-and-smoke", "yolov8n.pt") | |
async def info(): | |
return { | |
"model": f"Fire and Smoke Detection", | |
"version": "1.0", | |
} | |
async def predict(image: UploadFile): | |
if image.content_type not in ["image/jpeg", "image/png"]: | |
return {"error": "Invalid file type"} | |
im = Image.open(image.file) | |
res = model.detect(im) | |
return { | |
"list": [ | |
detect_item(box, res_item.names) | |
for res_item in res | |
for box in res_item.boxes | |
] | |
} | |
CXYWH = { | |
"cx": float, | |
"cy": float, | |
"w": float, | |
"h": float, | |
} | |
DetectItem = { | |
"category": str, | |
"bbox": CXYWH, | |
"score": float, | |
} | |
def detect_item(box: ultralytics.engine.results.Boxes, mapping: dict[int, str]) -> DetectItem: | |
cx, cy, w, h = box.xywhn.tolist()[0] | |
return { | |
"category": mapping[int(box.cls)], | |
"bbox": { | |
"cx": cx, | |
"cy": cy, | |
"w": w, | |
"h": h, | |
}, | |
"score": float(box.conf), | |
} | |