kevanme commited on
Commit
adc62a4
·
verified ·
1 Parent(s): d546b92

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -26
app.py CHANGED
@@ -1,39 +1,47 @@
1
  import gradio as gr
2
  import numpy as np
 
 
3
  import tensorflow as tf
4
 
5
- # Cargar el modelo guardado en formato .keras
6
- siamese_model = tf.keras.models.load_model("mnist_siamese_model.keras")
 
 
 
7
 
8
- # Función de predicción
9
- def predict(img1, img2):
10
- # Preprocesar las imágenes: convertir a escala de grises, redimensionar, normalizar
11
- img1 = img1.convert('L').resize((28, 28))
12
- img2 = img2.convert('L').resize((28, 28))
13
-
14
- arr1 = np.array(img1).astype('float32') / 255.0
15
- arr2 = np.array(img2).astype('float32') / 255.0
16
 
17
- arr1 = np.expand_dims(arr1, axis=(0, -1)) # (1, 28, 28, 1)
18
- arr2 = np.expand_dims(arr2, axis=(0, -1))
 
 
 
 
19
 
20
- # Realizar la predicción
21
- pred = siamese_model.predict([arr1, arr2])[0][0]
22
- resultado = "Iguales ✅" if pred > 0.5 else "Diferentes ❌"
23
- return f"{resultado} (Confianza: {pred:.2f})"
24
-
25
- # Crear la interfaz Gradio
26
- iface = gr.Interface(
 
 
 
 
 
 
 
27
  fn=predict,
28
  inputs=[
29
- gr.Image(label="Imagen 1", shape=(28, 28)),
30
- gr.Image(label="Imagen 2", shape=(28, 28))
31
  ],
32
- outputs=gr.Text(label="Resultado"),
33
- title="🔗 Verificación Siamese MNIST",
34
- description="Sube dos imágenes de dígitos escritos a mano y verifica si son el mismo número.",
35
  )
36
 
37
- # Lanzar la app (Hugging Face lo hace automáticamente)
38
- iface.launch()
39
 
 
1
  import gradio as gr
2
  import numpy as np
3
+ from tensorflow.keras.models import load_model
4
+ from PIL import Image
5
  import tensorflow as tf
6
 
7
+ # 🧠 Cargar modelo (asegúrate de que el archivo esté en la raíz del repositorio)
8
+ def euclidean_distance(vects):
9
+ x, y = vects
10
+ sum_square = tf.reduce_sum(tf.square(x - y), axis=1, keepdims=True)
11
+ return tf.sqrt(tf.maximum(sum_square, tf.keras.backend.epsilon()))
12
 
13
+ model = load_model("mnist_siamese_model.keras", custom_objects={'euclidean_distance': euclidean_distance})
 
 
 
 
 
 
 
14
 
15
+ # 📌 Preprocesar imágenes
16
+ def preprocess(img):
17
+ img = img.convert("L").resize((28, 28))
18
+ img = np.array(img).astype("float32") / 255.0
19
+ img = np.expand_dims(img, axis=-1) # (28, 28, 1)
20
+ return img
21
 
22
+ # 🔍 Función de predicción
23
+ def predict(img1, img2):
24
+ img1 = preprocess(img1)
25
+ img2 = preprocess(img2)
26
+ img1 = np.expand_dims(img1, axis=0)
27
+ img2 = np.expand_dims(img2, axis=0)
28
+
29
+ distance = model.predict([img1, img2])[0][0]
30
+ threshold = 0.5
31
+ same = distance < threshold
32
+ return f"¿Mismo dígito? {'Sí' if same else 'No'} (distancia: {distance:.4f})"
33
+
34
+ # 🎛️ Interfaz Gradio
35
+ interface = gr.Interface(
36
  fn=predict,
37
  inputs=[
38
+ gr.Image(type="pil", label="Imagen 1"),
39
+ gr.Image(type="pil", label="Imagen 2")
40
  ],
41
+ outputs="text",
42
+ title="Modelo Siamese con MNIST",
43
+ description="Sube dos imágenes de dígitos para verificar si representan el mismo número."
44
  )
45
 
46
+ interface.launch()
 
47