wjm55
init
132787d
raw
history blame
1.86 kB
from fastapi import FastAPI, UploadFile
from ultralytics import YOLO
import io
from PIL import Image
import numpy as np
import os
from huggingface_hub import hf_hub_download
from ultralytics import YOLO
import requests
import supervision as sv
def init_model(model_id: str):
# Define models
MODEL_OPTIONS = {
"YOLOv11-Nano": "medieval-yolov11n.pt",
"YOLOv11-Small": "medieval-yolov11s.pt",
"YOLOv11-Medium": "medieval-yolov11m.pt",
"YOLOv11-Large": "medieval-yolov11l.pt",
"YOLOv11-XLarge": "medieval-yolov11x.pt"
}
if model_id in MODEL_OPTIONS:
model_path = hf_hub_download(
repo_id="biglam/medieval-manuscript-yolov11",
filename=MODEL_OPTIONS[model_id]
)
return YOLO(model_path)
else:
raise ValueError(f"Model {model_id} not found")
app = FastAPI()
@app.post("/predict")
async def predict(image: UploadFile,
model_id: str = "YOLOv11-XLarge",
conf: float = 0.25,
iou: float = 0.7
):
# Initialize model at startup
model = init_model(model_id)
# Download and open image from URL
image = Image.open(image.file)
# Run inference with the PIL Image
results = model.predict(source=image, conf=conf, iou=iou)
# Extract detection results
result = results[0]
# print(result)
detections = []
for box in result.boxes:
detection = {
"class": result.names[int(box.cls[0])],
"confidence": float(box.conf[0]),
"bbox": box.xyxy[0].tolist() # Convert bbox tensor to list
}
detections.append(detection)
print(detections)
return {"detections": detections}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)