| from fastapi import FastAPI, File, UploadFile, Response, status, HTTPException, Depends |
| import tempfile |
| import os |
| import time |
| from watchdog.observers import Observer |
| from watchdog.events import FileSystemEventHandler |
| from fastapi.middleware.cors import CORSMiddleware |
|
|
| import sys |
| import os |
|
|
| |
| BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
|
|
| |
| sys.path.append(BASE_DIR) |
| sys.path.append(os.path.join(BASE_DIR, "Server")) |
| sys.path.append(os.path.join(BASE_DIR, "ML model")) |
| sys.path.append(os.path.join(BASE_DIR, "ML model", "ensemble_prediction_system")) |
| sys.path.append(os.path.join(BASE_DIR, "ML model", "custom_cnn_lstm_model")) |
|
|
| import sys |
| from pathlib import Path |
| import sys |
|
|
| import sys |
| from pathlib import Path |
|
|
| import os |
| import sys |
| from pathlib import Path |
|
|
| import os |
| import sys |
| from pathlib import Path |
|
|
| |
| SERVER_DIR = Path(__file__).resolve().parent |
|
|
| |
| PROJECT_ROOT = SERVER_DIR.parent |
| ENSEMBLE_DIR = PROJECT_ROOT / "ML model" / "ensemble_prediction_system" |
|
|
| |
| if str(ENSEMBLE_DIR) not in sys.path: |
| sys.path.append(str(ENSEMBLE_DIR)) |
|
|
| |
| from EnsemCNet import detectDeepfake, extractFrame, metaLearner |
|
|
| app = FastAPI() |
|
|
| origins = ["*"] |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=origins, |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| ALLOWED_VIDEO_TYPES = [ |
| "video/mp4", |
| "video/avi", |
| "video/mpeg", |
| "video/quicktime", |
| "video/x-msvideo" |
| ] |
|
|
|
|
| def to_json_serializable(value): |
| try: |
| import numpy as np |
| except ImportError: |
| np = None |
|
|
| if isinstance(value, dict): |
| return {k: to_json_serializable(v) for k, v in value.items()} |
| if isinstance(value, (list, tuple)): |
| return [to_json_serializable(v) for v in value] |
| if np is not None and isinstance(value, np.ndarray): |
| return value.tolist() |
| return value |
|
|
|
|
| async def validate_video(file: UploadFile): |
| if file.content_type not in ALLOWED_VIDEO_TYPES: |
| raise HTTPException( |
| status_code=400, |
| detail="Only video files are allowed" |
| ) |
| return file |
|
|
|
|
| from pathlib import Path |
|
|
| BASE_DIR = Path(__file__).resolve().parent |
|
|
| UPLOAD_FOLDER = BASE_DIR / "user_videos" |
| UPLOAD_FOLDER.mkdir(exist_ok=True) |
|
|
|
|
| @app.post("/predict", status_code=status.HTTP_201_CREATED) |
| async def predict_video(file: UploadFile = Depends(validate_video)): |
| |
| if not file.filename: |
| raise HTTPException( |
| status_code=status.HTTP_400_BAD_REQUEST, |
| detail="File must have a valid filename" |
| ) |
| |
| file_path = os.path.join(UPLOAD_FOLDER, file.filename) |
| |
| |
| with open(file_path, "wb") as buffer: |
| content = await file.read() |
| buffer.write(content) |
| |
| result = analyze(file_path) |
|
|
| |
|
|
| return { |
| "status": "success", |
| "result": to_json_serializable(result) |
| } |
|
|
|
|
| def analyze(video_path): |
| from pathlib import Path |
|
|
| BASE_DIR = Path(__file__).resolve().parent |
|
|
| output_path = BASE_DIR / "user_video" |
| output_path.mkdir(exist_ok=True) |
| frame_folder = extractFrame(video_path,output_path) |
| model_output = detectDeepfake(frame_folder) |
| lr = metaLearner() |
| pred = lr.predict(model_output) |
| return(pred) |
|
|
|
|
|
|
| |
| |
| |
|
|
| |
|
|
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
| |
|
|
| |
|
|
|
|
| |
| |
| |
| |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
| |