MinaNasser's picture
initialcommit
12d0de7
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from routes import base, data
from helpers.db import init_chroma, chroma_client
from helpers.configs import get_settings
from pathlib import Path
import os
import urllib.request
ASSETS_DIR = "assets"
MODEL_URL = "https://github.com/YapaLab/yolo-face/releases/download/1.0.0/yolov11n-face.pt"
MODEL_PATH = os.path.join(ASSETS_DIR, "yolov11n-face.pt")
@asynccontextmanager
async def lifespan(app: FastAPI):
print("Initializing ChromaDB...")
init_chroma()
print("ChromaDB Ready.")
if not Path(MODEL_PATH).exists():
Path(ASSETS_DIR).mkdir(exist_ok=True)
print("⬇ Downloading YOLO face model...")
urllib.request.urlretrieve(MODEL_URL, MODEL_PATH)
print("Model ready.")
else:
print("Model already exists.")
yield
if chroma_client is not None:
try:
chroma_client.persist()
print("ChromaDB persisted & closed.")
except:
pass
app = FastAPI(lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(base.base_router)
app.include_router(data.data_router)
if __name__ == "__main__":
import uvicorn
settings = get_settings()
print(f"Server running at http://127.0.0.1:{settings.port}")
uvicorn.run(app, host=settings.host, port=settings.port)