Spaces:
Sleeping
Sleeping
import gradio as gr | |
import numpy as np | |
from tensorflow.keras.models import load_model | |
from PIL import Image | |
import tensorflow as tf | |
#Cargar modelo | |
def euclidean_distance(vects): | |
x, y = vects | |
sum_square = tf.reduce_sum(tf.square(x - y), axis=1, keepdims=True) | |
return tf.sqrt(tf.maximum(sum_square, tf.keras.backend.epsilon())) | |
model = load_model("mnist_siamese_model.keras", custom_objects={'euclidean_distance': euclidean_distance}) | |
#Preprocesar imágenes | |
def preprocess(img): | |
img = img.convert("L").resize((28, 28)) | |
img = np.array(img).astype("float32") / 255.0 | |
img = np.expand_dims(img, axis=-1) # (28, 28, 1) | |
return img | |
#Función de predicción | |
def predict(img1, img2): | |
img1 = preprocess(img1) | |
img2 = preprocess(img2) | |
img1 = np.expand_dims(img1, axis=0) | |
img2 = np.expand_dims(img2, axis=0) | |
distance = model.predict([img1, img2])[0][0] | |
threshold = 0.5 | |
same = distance < threshold | |
return f"¿Es el mismo dígito? {'Sí' if same else 'No'} (distancia: {distance:.4f})" | |
#Interfaz Gradio | |
interface = gr.Interface( | |
fn=predict, | |
inputs=[ | |
gr.Image(type="pil", label="Imagen 1"), | |
gr.Image(type="pil", label="Imagen 2") | |
], | |
outputs="text", | |
title="Modelo Siamese con MNIST", | |
description="Sube dos imágenes de dígitos para verificar si representan el mismo número." | |
) | |
interface.launch() | |