Spaces:
Runtime error
Runtime error
File size: 3,998 Bytes
3a3c2be 2dc47c6 cb82c24 2dc47c6 589bf82 514b638 c975f81 0ef1091 589bf82 dae402a 589bf82 3a3c2be 2dc47c6 514b638 2dc47c6 3a3c2be 2dc47c6 cb82c24 2dc47c6 514b638 1ae13cc 777d6d0 cb82c24 7b57752 514b638 7b57752 1ae13cc 7b57752 1ae13cc 7b57752 1ae13cc cb82c24 589bf82 82d6a67 cb82c24 |
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import os
import subprocess
import importlib.util
import gradio as gr
import logging
from moviepy.editor import VideoFileClip
import json
import spaces
import torch
torch.use_deterministic_algorithms(True)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
torch.backends.cuda.matmul.allow_tf32 = False
torch.backends.cudnn.allow_tf32 = False
def truncate_video(video_file):
"""Truncates video to 15 seconds and saves it as a temporary file."""
clip = VideoFileClip(video_file)
truncated_clip = clip.subclip(0, min(15, clip.duration))
truncated_video_file = "temp_truncated_video.mp4"
truncated_clip.write_videofile(truncated_video_file, codec="libx264", audio_codec="aac")
return truncated_video_file
def clone_repo():
"""Clone the GitHub repository containing the backend."""
repo_url = "https://github.com/NeeravSood/AllMark-MVP.git" # Update when changing
repo_path = "./repository"
github_pat = os.getenv("GITHUB_PAT")
if not github_pat:
raise RuntimeError("GitHub Personal Access Token (GITHUB_PAT) not found in environment variables.")
authenticated_repo_url = f"https://{github_pat}@github.com/NeeravSood/AllMark-MVP.git"
if os.path.exists(repo_path):
print("Repository already cloned.")
else:
try:
subprocess.run(
["git", "clone", authenticated_repo_url, repo_path],
check=True,
text=True,
capture_output=True
)
print("Repository cloned successfully.")
except subprocess.CalledProcessError as e:
print("Output:", e.stdout)
print("Error:", e.stderr)
raise RuntimeError(f"Failed to clone repository: {e.stderr}")
def import_backend_script(script_name):
"""Dynamically import the backend script."""
try:
script_path = os.path.join("./repository", script_name)
if not os.path.exists(script_path):
raise FileNotFoundError(f"Script {script_name} not found in the repository.")
spec = importlib.util.spec_from_file_location("backend_module", script_path)
backend_module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(backend_module)
return backend_module
except Exception as e:
logging.error(f"Error importing backend script: {str(e)}")
raise RuntimeError(f"Failed to import backend script: {str(e)}")
clone_repo()
backend = import_backend_script("app.py")
analyzer = backend.DeepfakeAnalyzer()
#@spaces.GPU(duration=300)
def analyze_video(video_file):
try:
truncated_video = truncate_video(video_file)
results = analyzer.analyze_media(truncated_video)
combined_assessment = results.get('combined_assessment', 0)
if isinstance(combined_assessment, (int, float)):
combined_probability = combined_assessment
else:
combined_probability = 100 if combined_assessment == "Deepfake" else 0
analysis_result = "genuine/original" if combined_probability < 50 else "a deepfake"
output = {
"message": f"According to our analysis, the video you uploaded appears to be {analysis_result} "
f"with a {combined_probability:.2f}% probability. "
f"{len(results['video_analysis']['frame_results'])} frames were analyzed in total."
}
return output
except Exception as e:
logging.error(f"Error during analysis: {e}")
return {"error": "An error occurred during video analysis. Please check your input and try again."}
interface = gr.Interface(
fn=analyze_video,
inputs=gr.Video(label="Upload Video"),
outputs="json",
title="AllMark - Deepfake Analyzer",
description="Upload a video to analyze. N.B. - Only mp4 files. Model is in testing phase so some false negatives may occur."
)
if __name__ == "__main__":
interface.launch()
|