Spaces:
Runtime error
Runtime error
File size: 3,844 Bytes
3a3c2be 2dc47c6 cb82c24 2dc47c6 589bf82 514b638 c975f81 0ef1091 589bf82 5e8743b dae402a 589bf82 3a3c2be 2dc47c6 514b638 2dc47c6 3a3c2be 2dc47c6 cb82c24 2dc47c6 514b638 1ae13cc 37b013a cb82c24 7b57752 4667507 b2619fa 1ae13cc b2619fa 1ae13cc 7b57752 1ae13cc 7b57752 1ae13cc b2619fa cb82c24 589bf82 37b013a 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 |
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.set_num_threads(1)
torch.set_num_interop_threads(1)
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=1000)
def analyze_video(video_file):
try:
truncated_video = truncate_video(video_file)
results = analyzer.analyze_media(truncated_video)
combined_assessment = int(results.get('combined_assessment', 0))
analysis_result = "genuine/original" if combined_assessment < 50 else "a deepfake"
output = {
"message": f"According to our analysis, the video you uploaded appears to be {analysis_result}. "
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. Processing time 1-10 minutes. For any false negatives, please contact the publisher for verification. Incognito Mode Recommended"
)
if __name__ == "__main__":
interface.launch()
|