File size: 1,861 Bytes
3cce3e9
fe08bee
2ae87d4
fe08bee
3cce3e9
2ae87d4
3cce3e9
 
fd0a84c
3cce3e9
 
 
 
fe08bee
3cce3e9
 
 
 
 
2ae87d4
3cce3e9
 
2ae87d4
3cce3e9
 
2ae87d4
3cce3e9
 
 
2ae87d4
3cce3e9
 
 
2ae87d4
3cce3e9
 
 
 
2ae87d4
3cce3e9
 
2ae87d4
3cce3e9
2ae87d4
3cce3e9
 
 
 
fd0a84c
2ae87d4
3cce3e9
 
 
 
 
 
 
 
 
 
2ae87d4
9499ccb
fd0a84c
3cce3e9
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
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)