Spaces:
Runtime error
Runtime error
import gradio as gr | |
import tensorflow as tf | |
import numpy as np | |
from tensorflow.keras.models import load_model | |
import keras | |
# 1. Load your model | |
def scaling(x, scale=255.0, **kwargs): | |
return x * scale | |
def l2_normalize(x, axis=-1, epsilon=1e-10): | |
return tf.nn.l2_normalize(x, axis=axis, epsilon=epsilon) | |
# Pass the registered functions explicitly | |
custom_objects = {"scaling": scaling, "l2_normalize": l2_normalize} | |
# Load the model with custom_objects | |
model = load_model("facenet_real_fake_classifier_final.keras", custom_objects=custom_objects) | |
# 2. Define your inference function | |
def detect_forgery(image): | |
# Preprocess the image to match your model’s input requirements | |
img = tf.image.resize(image, (160, 160)) # Example size; adjust for your model | |
img = tf.expand_dims(img, axis=0) | |
img = img / 255.0 # Example normalization; adapt as needed | |
# Run inference | |
predictions = model.predict(img)[0] | |
pred_value = float(predictions) # or pred_value.item() | |
# Suppose predictions = [prob_real, prob_fake] | |
# Format output | |
# You can return a dictionary or a string. For example: | |
if pred_value >= 0.5: | |
# It's real, use p as the confidence | |
confidence = pred_value | |
label = "REAL" | |
else: | |
# It's fake, confidence is (1 - p) | |
confidence = 1.0 - pred_value | |
label = "FAKE" | |
return f"{label} with confidence {confidence:.2f}" | |
# 3. Build your Gradio interface | |
demo = gr.Interface( | |
fn=detect_forgery, | |
inputs=gr.Image(type="numpy"), # 'type="numpy"' gives a NumPy array | |
outputs="text", | |
title="Face Forgery Detector", | |
description="Upload a face image to check if it's likely forged or real." | |
) | |
# 4. Launch the app (Gradio handles the rest) | |
if __name__ == "__main__": | |
_ = model.predict(np.zeros((1, 160, 160, 3), dtype=np.float32)) | |
demo.launch() | |