crack-api / app.py
thompson1234's picture
Update app.py
066556e verified
raw
history blame
1.82 kB
from fastapi import FastAPI, UploadFile, File
from fastapi.middleware.cors import CORSMiddleware
from ultralytics import YOLO
from huggingface_hub import hf_hub_download
import numpy as np
from PIL import Image
import io
import uvicorn
app = FastAPI()
# CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# ===========================================
# DOWNLOAD CRACK MODEL FROM HF
# ===========================================
print("πŸ”΅ Loading local crack model...")
model = YOLO("best.pt")
print("βœ… Crack Model Loaded Successfully")
# ===========================================
# PREDICTION API
# ===========================================
@app.post("/predict")
async def predict(img: UploadFile = File(...)):
try:
bytes_data = await img.read()
image = Image.open(io.BytesIO(bytes_data)).convert("RGB")
np_img = np.array(image)
results = model(np_img)
result = results[0]
# crack detection: check boxes
if result.boxes is None or len(result.boxes) == 0:
return {
"data": [
{"label": "normal", "confidence": 1.0}
]
}
# There are crack boxes
conf = float(result.boxes.conf.max().item())
return {
"data": [
{
"label": "crack",
"confidence": conf
}
]
}
except Exception as e:
print("❌ Prediction error:", e)
return {
"data": [{"label": "normal", "confidence": 1.0}],
"error": str(e)
}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)