Spaces:
Runtime error
Runtime error
File size: 4,150 Bytes
3a3c2be 2dc47c6 cb82c24 2dc47c6 589bf82 0ef1091 589bf82 9b30919 5e8743b dae402a 589bf82 3a3c2be 2dc47c6 9b30919 2dc47c6 3a3c2be 2dc47c6 cb82c24 2dc47c6 1534cde 2dc47c6 8cb4ac6 2dc47c6 1534cde 2dc47c6 8cb4ac6 514b638 1ae13cc 8cb4ac6 9b30919 7b57752 564bb7d 1534cde f755699 8cb4ac6 1ae13cc b2619fa 8cb4ac6 1ae13cc 7b57752 1ae13cc b2619fa 564bb7d 8cb4ac6 9b30919 8cb4ac6 cb82c24 1534cde |
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 104 105 106 107 108 109 |
import os
import subprocess
import importlib.util
import gradio as gr
import logging
from moviepy.editor import VideoFileClip
import torch
ACCESS_KEY = os.getenv("ACCESS_KEY")
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):
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():
repo_url = "https://github.com/NeeravSood/AllMark-MVP.git"
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)}")
# Run repository setup and model import
clone_repo()
backend = import_backend_script("app.py")
analyzer = backend.DeepfakeAnalyzer()
def analyze_video(video_file):
if ACCESS_KEY is None:
logging.error("Access key not set in environment variables.")
return {"error": "Server misconfiguration. Access key not set."}
try:
truncated_video = truncate_video(video_file)
results = analyzer.analyze_media(truncated_video)
combined_assessment = results.get('combined_assessment', 0)
if isinstance(combined_assessment, str) and combined_assessment.lower() == "deepfake":
analysis_result = "a deepfake"
else:
combined_assessment = int(combined_assessment) if str(combined_assessment).isdigit() else 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()
|