File size: 1,524 Bytes
12d0de7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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)