Spaces:
Running
Running
File size: 3,618 Bytes
2e8ccd8 a262dd1 2e8ccd8 23d88ae a262dd1 23d88ae a262dd1 23d88ae a262dd1 23d88ae 2e8ccd8 a262dd1 2e8ccd8 23d88ae 2e8ccd8 23d88ae 2e8ccd8 23d88ae 2e8ccd8 23d88ae a262dd1 23d88ae 2e8ccd8 a262dd1 23d88ae 2e8ccd8 23d88ae 2e8ccd8 18855ba 23d88ae 18855ba 23d88ae 18855ba 23d88ae 2e8ccd8 a262dd1 f7d4f80 23d88ae a262dd1 |
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 110 111 112 113 114 |
import gradio as gr
from transformers import ViTForImageClassification, ViTImageProcessor
from PIL import Image
import torch
# Load the model and processor from Hugging Face
model = ViTForImageClassification.from_pretrained("dima806/deepfake_vs_real_image_detection")
processor = ViTImageProcessor.from_pretrained("dima806/deepfake_vs_real_image_detection")
def detect(image):
"""Detect deepfake content in an image using dima806/deepfake_vs_real_image_detection"""
if image is None:
raise gr.Error("Please upload an image to analyze")
try:
# Convert Gradio image (filepath) to PIL Image
pil_image = Image.open(image).convert("RGB")
# Preprocess the image
inputs = processor(images=pil_image, return_tensors="pt")
# Perform inference
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_class = torch.argmax(logits, dim=1).item()
# Get confidence scores
probabilities = torch.softmax(logits, dim=1)[0]
confidence_real = probabilities[0].item() * 100
confidence_fake = probabilities[1].item() * 100
# Map class index to label
label = model.config.id2label[predicted_class]
# Prepare output
overall = f"{max(confidence_real, confidence_fake):.1f}% Confidence"
aigen = f"{confidence_fake:.1f}% (AI-Generated Content Likelihood)"
deepfake = f"{confidence_fake:.1f}% (Face Manipulation Likelihood)"
return overall, aigen, deepfake
except Exception as e:
raise gr.Error(f"Analysis error: {str(e)}")
# Custom CSS (unchanged from your original)
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%; }
}
"""
MARKDOWN0 = """
<div class="header">
<h1>DeepFake Detection System</h1>
<p>Advanced AI-powered analysis for identifying manipulated media<br>
Powered by dima806/deepfake_vs_real_image_detection model</p>
</div>
"""
# Create Gradio interface
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")
detect_button = gr.Button("Analyze Image", elem_classes="button-gradient")
with gr.Column(scale=2):
overall = gr.Label(label="Confidence Score")
aigen = gr.Label(label="AI-Generated Content")
deepfake = gr.Label(label="Face Manipulation")
detect_button.click(
fn=detect,
inputs=[image],
outputs=[overall, aigen, deepfake]
)
# Launch the application
demo.launch(
debug=True
)
|