from fastapi import FastAPI, UploadFile, File, Response,Header, BackgroundTasks,Body from fastapi.staticfiles import StaticFiles from vitpose import VitPose from dotenv import load_dotenv from tasks import process_video from fastapi.responses import JSONResponse from config import AI_API_TOKEN import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) app = FastAPI() vitpose = VitPose() # vitpose.pipeline.warmup() load_dotenv() app.mount("/static", StaticFiles()) @app.get("/") def read_root(): return {"message": "Hello World"} @app.get("/test") def test(): return {"message": "from test"} @app.post("/upload") async def upload(background_tasks: BackgroundTasks, file: UploadFile = File(...), token: str = Header(...), user_id: str = Body(...), player_id: str = Body(...)): if token != AI_API_TOKEN: return JSONResponse(content={"message": "Unauthorized", "status": 401}) logger.info("reading contents") contents = await file.read() # Save the file to the local directory logger.info("saving file") with open(file.filename, "wb") as f: f.write(contents) logger.info(f"file saved {file.filename}") # Create a clone of the file with content already read background_tasks.add_task(process_video, file.filename, vitpose, user_id,player_id) # Return the file as a response return JSONResponse(content={"message": "Video uploaded successfully", "status": 200})