File size: 1,565 Bytes
e73e2a2
 
3a2cd79
e73e2a2
3a2cd79
e6fe7fe
3a2cd79
 
e73e2a2
eaa1a24
e3fbc7a
 
 
e73e2a2
 
3a2cd79
3378d00
abc9bfa
 
e3fbc7a
abc9bfa
 
 
b26c2e5
 
abc9bfa
b26c2e5
 
abc9bfa
b26c2e5
 
abc9bfa
e3fbc7a
b26c2e5
e3fbc7a
b26c2e5
6ac5675
b26c2e5
f8b37ec
efb1c5d
e3fbc7a
b26c2e5
 
efb1c5d
e3fbc7a
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
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

# Load models from Hugging Face Hub
xcp_path = hf_hub_download(repo_id="Zeyadd-Mostaffa/deepfake-image-detector_final", filename="xception_model.h5")
eff_path = hf_hub_download(repo_id="Zeyadd-Mostaffa/deepfake-image-detector_final", filename="efficientnet_model.h5")
xcp_model = load_model(xcp_path)
eff_model = load_model(eff_path)

def predict(image_path):  # receives filepath from gr.Image(type="filepath")
    image = cv2.imread(image_path)
    if image is None:
        return "Invalid image"

    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    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, ...]

    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

iface = gr.Interface(
    fn=predict,
    inputs=gr.Image(type="filepath", label="image_path"),
    outputs=gr.Text(label="output"),  # <-- FIXED HERE
    allow_flagging="never"
)


iface.launch()