Spaces:
Sleeping
Sleeping
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()
|