|
|
|
|
|
import os |
|
import requests |
|
|
|
def download_if_missing(url, dest): |
|
if not os.path.exists(dest): |
|
print(f"Downloading model from {url} to {dest}...") |
|
os.makedirs(os.path.dirname(dest), exist_ok=True) |
|
with requests.get(url, stream=True) as r: |
|
r.raise_for_status() |
|
with open(dest, "wb") as f: |
|
for chunk in r.iter_content(chunk_size=8192): |
|
f.write(chunk) |
|
print("Download complete.") |
|
|
|
|
|
DAMAGE_MODEL_URL = "https://huggingface.co/AItoolstack/car_damage_detection/resolve/main/yolov8_models/damage/weights/weights/best.pt" |
|
PARTS_MODEL_URL = "https://huggingface.co/AItoolstack/car_damage_detection/resolve/main/yolov8_models/parts/weights/weights/best.pt" |
|
|
|
DAMAGE_MODEL_PATH = os.path.join("models", "damage", "weights", "weights", "best.pt") |
|
PARTS_MODEL_PATH = os.path.join("models", "parts", "weights", "weights", "best.pt") |
|
|
|
download_if_missing(DAMAGE_MODEL_URL, DAMAGE_MODEL_PATH) |
|
download_if_missing(PARTS_MODEL_URL, PARTS_MODEL_PATH) |
|
|
|
from fastapi import FastAPI, File, UploadFile, BackgroundTasks |
|
from fastapi.staticfiles import StaticFiles |
|
from fastapi.templating import Jinja2Templates |
|
from fastapi.responses import JSONResponse, HTMLResponse |
|
from fastapi.middleware.cors import CORSMiddleware |
|
import uvicorn |
|
from datetime import datetime |
|
import aiofiles |
|
from pathlib import Path |
|
import uuid |
|
from app.routers import inference |
|
|
|
app = FastAPI(title="Car Damage Detection API") |
|
|
|
|
|
app.add_middleware( |
|
CORSMiddleware, |
|
allow_origins=["*"], |
|
allow_credentials=True, |
|
allow_methods=["*"], |
|
allow_headers=["*"], |
|
) |
|
|
|
|
|
app.mount("/static", StaticFiles(directory="app/static"), name="static") |
|
templates = Jinja2Templates(directory="app/templates") |
|
|
|
|
|
app.include_router(inference.router) |
|
|
|
if __name__ == "__main__": |
|
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True) |
|
|