acc_api / api /main.py
Adit1Sharma's picture
Initial commit: FastAPI Incident Analyzer for HF Spaces
8e6f164
Raw
History Blame Contribute Delete
1.74 kB
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import torch
from api.services.dino_service import GroundingDinoService
from api.routers.analysis import router as analysis_router
# Define the lifespan context manager for startup and shutdown events
@asynccontextmanager
async def lifespan(app: FastAPI):
# Initialize the Grounding DINO Service (downloads model if not cached and loads onto device)
dino_service = GroundingDinoService()
app.state.dino_service = dino_service
yield
# Clean up and free device memory
if hasattr(app.state, "dino_service"):
del app.state.dino_service
if torch.cuda.is_available():
torch.cuda.empty_cache()
# Create FastAPI application instance
app = FastAPI(
title="Emergency Incident Detector & Analyzer API",
description="A REST API wrapper around Grounding DINO for real-time disaster and accident scene analysis.",
version="1.0.0",
lifespan=lifespan
)
# Set up CORS middleware to support local testing and front-end integration
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include incident routers
app.include_router(analysis_router)
# Basic health-check endpoint
@app.get("/health", tags=["Health"])
def health_check():
return {
"status": "healthy",
"model_loaded": hasattr(app.state, "dino_service") and app.state.dino_service is not None
}
@app.get("/", tags=["Root"])
def read_root():
return {
"message": "Welcome to the Emergency Incident Detection API. Go to /docs for the interactive Swagger API documentation."
}