File size: 1,802 Bytes
e73e2a2
 
3a2cd79
e73e2a2
4191df3
3a2cd79
e6fe7fe
3a2cd79
 
e73e2a2
eaa1a24
b453465
e73e2a2
 
 
 
3a2cd79
4191df3
d719fa7
4191df3
 
 
 
 
 
e6fe7fe
d719fa7
 
93ce865
d719fa7
 
 
 
 
4191df3
d719fa7
4191df3
3a2cd79
b453465
3a2cd79
4191df3
 
 
 
b453465
e73e2a2
 
b453465
 
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
import os
import cv2
import numpy as np
import gradio as gr
from PIL import Image
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

# 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_pil: Image.Image) -> str:
    try:
        # Convert PIL to numpy
        image = np.array(image_pil.convert("RGB"))

        # Resize and preprocess
        xcp_img = cv2.resize(image, (299, 299))
        eff_img = cv2.resize(image, (224, 224))

        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

        return "Real" if avg_pred > 0.5 else "Fake"
    except Exception as e:
        return f"Error: {str(e)}"

demo = gr.Interface(
    fn=predict,
    inputs=gr.Image(type="pil", label="Upload Image"),  # βœ… Use PIL instead of numpy
    outputs=gr.Textbox(label="Prediction"),             # βœ… Safe, schema-compatible
    title="Deepfake Image Detector",
    description="Upload a full image. The model classifies it as real or fake.",
    allow_flagging="never"
)

if __name__ == "__main__":
    demo.launch()