DeepFake / app.py
TKM03's picture
Update app.py
23d88ae verified
raw
history blame
5.24 kB
import os
import gradio as gr
import json
from gradio_client import Client, handle_file
# Initialize backend client with error handling
try:
backend = Client(os.getenv("BACKEND"), hf_token=os.getenv("TOKEN"))
except Exception as e:
raise Exception(f"Failed to initialize backend client: {str(e)}")
def detect(image):
"""Detect deepfake content in an image with comprehensive error handling"""
if image is None:
raise gr.Error("Please upload an image to analyze")
try:
result_text = backend.predict(
image=handle_file(image),
api_name="/detect"
)
result = json.loads(result_text)
if not result or result.get("status") != "ok":
raise gr.Error("Analysis failed: Invalid response from backend")
# Format results professionally
overall = f"{result['overall']}% Confidence"
aigen = f"{result['aigen']}% (AI-Generated Content Likelihood)"
deepfake = f"{result['deepfake']}% (Face Manipulation Likelihood)"
return overall, aigen, deepfake
except json.JSONDecodeError:
raise gr.Error("Error processing analysis results")
except Exception as e:
raise gr.Error(f"Analysis error: {str(e)}")
# Enhanced professional CSS
custom_css = """
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
font-family: 'Arial', sans-serif;
}
.header {
color: #2c3e50;
border-bottom: 2px solid #3498db;
padding-bottom: 10px;
}
.button-gradient {
background: linear-gradient(45deg, #3498db, #2ecc71, #9b59b6);
background-size: 400% 400%;
border: none;
padding: 12px 24px;
font-size: 16px;
font-weight: 600;
color: white;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
animation: gradientAnimation 3s ease infinite;
box-shadow: 0 2px 8px rgba(52, 152, 219, 0.3);
}
.button-gradient:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(52, 152, 219, 0.5);
}
@keyframes gradientAnimation {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.label {
font-weight: 600;
color: #34495e;
background: #f8f9fa;
padding: 10px;
border-radius: 5px;
margin: 5px 0;
}
.footer {
color: #7f8c8d;
font-size: 14px;
margin-top: 20px;
}
"""
# Professional content
MARKDOWN0 = """
<div class="header">
<h1>DeepFake Detection System</h1>
<p>Advanced AI-powered analysis for identifying manipulated media</p>
</div>
<div style="margin: 15px 0;">
<a href="https://faceonlive.com/deepfake-detector" target="_blank" style="color: #3498db; text-decoration: none;">
Learn About Our Technology
</a>
</div>
"""
MARKDOWN3 = """
<div class="footer">
<p>Additional Tools:</p>
<div style="margin: 10px 0;">
<a href="https://faceonlive.com/face-search-online" target="_blank" style="color: #3498db; text-decoration: none; margin-right: 15px;">
Face Search Technology
</a>
<a href="https://faceonlive.com/reverse-image-search" target="_blank" style="color: #3498db; text-decoration: none;">
Reverse Image Search
</a>
</div>
<p>© 2025 FaceOnLive - All Rights Reserved</p>
</div>
"""
with gr.Blocks(css=custom_css, theme=gr.themes.Default()) as demo:
gr.Markdown(MARKDOWN0)
with gr.Row(elem_classes="container"):
with gr.Column(scale=1):
image = gr.Image(
type='filepath',
height=400,
label="Upload Image for Analysis",
interactive=True
)
detect_button = gr.Button(
"Analyze Image",
elem_classes="button-gradient"
)
gr.Examples(
examples=['examples 1.jpg', 'examples 2.jpg'],
inputs=image,
outputs=['overall', 'aigen', 'deepfake'],
fn=detect,
cache_examples=True
)
with gr.Column(scale=2):
overall = gr.Label(label="Confidence Score", elem_classes="label")
with gr.Row():
aigen = gr.Label(label="AI-Generated Content", elem_classes="label")
deepfake = gr.Label(label="Face Manipulation", elem_classes="label")
gr.Markdown(MARKDOWN3)
# Visitor badge
gr.HTML("""
<div style="margin-top: 20px;">
<a href="https://visitorbadge.io/status?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2FFaceOnLive%2FDeep-Fake-Detector">
<img src="https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2FFaceOnLive%2FDeep-Fake-Detector&labelColor=%233495db&countColor=%232ecc71&style=flat" />
</a>
</div>
""")
detect_button.click(
fn=detect,
inputs=[image],
outputs=[overall, aigen, deepfake],
_js="() => {return [document.querySelector('input[type=file]').files[0]]}"
)
demo.queue(api_open=False, concurrency_count=8).launch(
server_name="0.0.0.0",
show_api=False,
debug=True
)