|
from fastapi import APIRouter, UploadFile, File, Depends, Form, Request, HTTPException |
|
from fastapi.responses import FileResponse, JSONResponse |
|
from client.dependencies import inference_service |
|
from client.services import InferenceService |
|
from PIL import Image |
|
from io import BytesIO |
|
from fastapi import Form |
|
|
|
from PIL import Image |
|
from io import BytesIO |
|
import numpy as np |
|
import os |
|
import tempfile |
|
import logging |
|
from typing import List |
|
|
|
router = APIRouter(tags=["Client"]) |
|
|
|
|
|
@router.get(path="/") |
|
def login() -> FileResponse: |
|
return FileResponse(path="client/static/login.html") |
|
|
|
|
|
@router.get(path="/index") |
|
def static_index() -> FileResponse: |
|
return FileResponse(path="client/static/index.html") |
|
|
|
|
|
@router.get(path="/createAccount") |
|
def create_account(request: Request) -> FileResponse: |
|
return FileResponse(path="client/static/createAccount.html") |
|
|
|
|
|
@router.post("/get_image") |
|
async def get_image( |
|
image: UploadFile = File(...), |
|
inference_service: InferenceService = Depends(inference_service), |
|
) -> JSONResponse: |
|
|
|
contents = await image.read() |
|
|
|
|
|
size = len(contents) |
|
|
|
|
|
return JSONResponse( |
|
content={ |
|
"message": "Image received successfully", |
|
"filename": image.filename, |
|
"size": size, |
|
} |
|
) |
|
|
|
|
|
@router.post("/submitAccount") |
|
async def submit_account( |
|
video: UploadFile = File(...), |
|
email: str = Form(...), |
|
i_service: InferenceService = Depends(inference_service), |
|
): |
|
""" |
|
This function processes the create account form, reads the uploaded video, |
|
extracts some of the frames and saves them in a temporary directory. |
|
""" |
|
|
|
logging.info( |
|
f"Received video: filename={video.filename}, content_type={video.content_type}" |
|
) |
|
logging.info(f"Received email: {email}") |
|
|
|
video_content: bytes = await video.read() |
|
i_service.save_video(video_content=video_content, user_id=email) |
|
frames_path: str = i_service.save_frames(user_id=email) |
|
model_path: str = i_service.train_model(frames_path=frames_path, user_id=email) |
|
i_service.push_model(model_path=model_path, user_id=email) |
|
return JSONResponse(content={"message": "Account created successfully"}) |
|
|