Hadilc's picture
Upload 2 files
717b5e6 verified
Raw History Blame Contribute Delete
1.86 kB
from fastapi import FastAPI, File, UploadFile
from fastapi.middleware.cors import CORSMiddleware
from ultralytics import YOLO
from PIL import Image
import io
import os
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
# Download and cache model on startup
from huggingface_hub import hf_hub_download
model_path = hf_hub_download(
repo_id="Decizez/yolov-corrosion-detection",
filename="Lite_YOLO8_v1.pt"
)
model = YOLO(model_path)
print("✅ Model loaded successfully")
@app.get("/health")
async def health():
return {"status": "ok"}
@app.post("/detect")
async def detect(file: UploadFile = File(...)):
contents = await file.read()
image = Image.open(io.BytesIO(contents)).convert("RGB")
w, h = image.width, image.height
results = model(image)
detections = []
for result in results:
boxes = result.boxes
if boxes is not None:
for box in boxes:
conf = float(box.conf[0])
if conf > 0.3:
x1, y1, x2, y2 = box.xyxy[0].tolist()
detections.append({
"label": "Corrosion Detected",
"confidence": round(conf * 100, 1),
"area_percent": round(
((x2 - x1) * (y2 - y1)) / (w * h) * 100, 1
),
"box": {
"x": round(x1 / w * 100, 1),
"y": round(y1 / h * 100, 1),
"width": round((x2 - x1) / w * 100, 1),
"height": round((y2 - y1) / h * 100, 1)
}
})
return {
"detections": detections,
"frame_size": {"w": w, "h": h}
}