File size: 1,850 Bytes
e73e2a2
 
3a2cd79
e73e2a2
3a2cd79
e6fe7fe
3a2cd79
 
e73e2a2
eaa1a24
b26c2e5
e73e2a2
 
 
 
3a2cd79
abc9bfa
 
 
 
 
 
 
 
 
 
 
 
b26c2e5
 
abc9bfa
 
b26c2e5
 
abc9bfa
cbc8997
b26c2e5
 
 
abc9bfa
b26c2e5
abc9bfa
 
 
 
 
 
 
b26c2e5
6ac5675
b26c2e5
6ac5675
cbc8997
6ac5675
b26c2e5
 
6ac5675
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
import os
import cv2
import numpy as np
import gradio as gr
import tensorflow as tf
from tensorflow.keras.models import load_model
from tensorflow.keras.applications.xception import preprocess_input as xcp_pre
from tensorflow.keras.applications.efficientnet import preprocess_input as eff_pre
from huggingface_hub import hf_hub_download

# Download and load models
xcp_path = hf_hub_download(repo_id="Zeyadd-Mostaffa/deepfake-image-detector", filename="xception_model.h5")
eff_path = hf_hub_download(repo_id="Zeyadd-Mostaffa/deepfake-image-detector", filename="efficientnet_model.h5")
xcp_model = load_model(xcp_path)
eff_model = load_model(eff_path)

def predict(image_path):
    # Read the image from file path
    image = cv2.imread(image_path)

    # Check if loading failed
    if image is None:
        raise ValueError("Failed to load image. Make sure the input is an image file.")

    # Convert BGR to RGB (OpenCV loads images in BGR)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    # Resize for each model
    xcp_img = cv2.resize(image, (299, 299))
    eff_img = cv2.resize(image, (224, 224))

    # Preprocess
    xcp_tensor = xcp_pre(xcp_img.astype(np.float32))[np.newaxis, ...]
    eff_tensor = eff_pre(eff_img.astype(np.float32))[np.newaxis, ...]

    # Predict
    xcp_pred = xcp_model.predict(xcp_tensor, verbose=0).flatten()[0]
    eff_pred = eff_model.predict(eff_tensor, verbose=0).flatten()[0]
    avg_pred = (xcp_pred + eff_pred) / 2

    label = "Real" if avg_pred > 0.5 else "Fake"

    return {
        "label": label,
        "average": round(avg_pred, 3),
        "xception": round(xcp_pred, 3),
        "efficientnet": round(eff_pred, 3)
    }

iface = gr.Interface(
    fn=predict,
    inputs=gr.Image(type="filepath"),
    outputs=gr.JSON(),  # ✅ Now it actually returns a dict
    live=False
)

iface.launch()