Fake / app.py
eesfeg's picture
tg
3cce3e9
import gradio as gr
import numpy as np
from PIL import Image
import cv2
from inference import FakeImageDetector
# Initialize detector
detector = FakeImageDetector()
def predict_image(image):
"""
Predict if image is real or fake
"""
try:
# Convert Gradio image to PIL
if isinstance(image, np.ndarray):
image_pil = Image.fromarray(image)
else:
image_pil = image
# Make prediction
result = detector.predict(image_pil, return_confidence=True)
if result is None:
return "Error processing image", None
# Prepare output
label = result['prediction']
confidence = result['confidence']
# Create visualization
display_img = np.array(image_pil)
display_img = cv2.resize(display_img, (400, 400))
# Add text overlay
color = (0, 255, 0) if label == 'Real' else (255, 0, 0) # Green for real, red for fake
cv2.putText(display_img, f"{label}: {confidence:.1f}%",
(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2)
return f"Prediction: {label} (Confidence: {confidence:.1f}%)", display_img
except Exception as e:
return f"Error: {str(e)}", None
# Create Gradio interface
title = "Fake Image Detector"
description = "Upload an image to detect if it's real or AI-generated/fake"
examples = [["real_0.jpg"], ["fake_0.jpg"]] # Add your example images
iface = gr.Interface(
fn=predict_image,
inputs=gr.Image(type="pil", label="Upload Image"),
outputs=[
gr.Textbox(label="Prediction"),
gr.Image(label="Visualization", type="numpy")
],
title=title,
description=description,
examples=examples,
theme="soft"
)
if __name__ == "__main__":
iface.launch(share=True)