Calamar49 commited on
Commit
3ea120a
·
1 Parent(s): 784df80
Files changed (1) hide show
  1. app.py +17 -9
app.py CHANGED
@@ -1,4 +1,4 @@
1
- # app.py (versión final y simplificada con Gradio)
2
 
3
  import torch
4
  import torchvision.transforms as transforms
@@ -10,7 +10,7 @@ import gradio as gr
10
  # --- 1. Importar la definición del modelo ---
11
  from VisionEnsembleModel import VisionEnsembleModel
12
 
13
- # --- 2. Carga del Modelo y Componentes ---
14
  device = torch.device("cpu")
15
  MODEL_PATH = "model/best_vision_ensemble_model.pth"
16
  LABELS_PATH = "model/species_labels_map.json"
@@ -32,24 +32,35 @@ transforms_val = transforms.Compose([
32
  transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
33
  ])
34
 
35
- # --- 3. Función de Predicción (sin cambios) ---
36
  def predict(image):
37
  pil_image = Image.fromarray(image.astype('uint8'), 'RGB')
38
  input_tensor = transforms_val(pil_image).unsqueeze(0).to(device)
39
  with torch.no_grad():
40
  output = model(input_tensor)
41
  probabilities = torch.nn.functional.softmax(output[0], dim=0)
42
-
43
  top5_prob, top5_catid = torch.topk(probabilities, 5)
 
 
44
  confidences = {}
45
  for i in range(top5_prob.size(0)):
 
46
  species_id = top5_catid[i].item()
 
47
  prob = top5_prob[i].item()
48
- species_name = labels_map.get(str(species_id), "Desconocido")
 
 
 
 
 
49
  confidences[species_name] = prob
 
 
50
  return confidences
51
 
52
- # --- 4. Crear y Lanzar la Interfaz de Gradio ---
53
  iface = gr.Interface(
54
  fn=predict,
55
  inputs=gr.Image(type="numpy", label="Sube una imagen de tu orquídea"),
@@ -58,7 +69,4 @@ iface = gr.Interface(
58
  description="Sube una foto de una orquídea y la IA (CNN+ViT) intentará identificar la especie.",
59
  )
60
 
61
- # Lanzamos la aplicación.
62
- # server_name="0.0.0.0" es crucial para que funcione dentro de Docker.
63
- # server_port=7860 es el puerto estándar que Hugging Face expone.
64
  iface.launch(server_name="0.0.0.0", server_port=7860)
 
1
+ # app.py (versión final con nombres de especies en la salida)
2
 
3
  import torch
4
  import torchvision.transforms as transforms
 
10
  # --- 1. Importar la definición del modelo ---
11
  from VisionEnsembleModel import VisionEnsembleModel
12
 
13
+ # --- 2. Carga del Modelo y Componentes (Sin cambios) ---
14
  device = torch.device("cpu")
15
  MODEL_PATH = "model/best_vision_ensemble_model.pth"
16
  LABELS_PATH = "model/species_labels_map.json"
 
32
  transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
33
  ])
34
 
35
+ # --- 3. Función de Predicción (CON LA CORRECCIÓN) ---
36
  def predict(image):
37
  pil_image = Image.fromarray(image.astype('uint8'), 'RGB')
38
  input_tensor = transforms_val(pil_image).unsqueeze(0).to(device)
39
  with torch.no_grad():
40
  output = model(input_tensor)
41
  probabilities = torch.nn.functional.softmax(output[0], dim=0)
42
+
43
  top5_prob, top5_catid = torch.topk(probabilities, 5)
44
+
45
+ # --- ¡ESTA ES LA CORRECCIÓN CLAVE! ---
46
  confidences = {}
47
  for i in range(top5_prob.size(0)):
48
+ # Obtenemos el ID numérico predicho
49
  species_id = top5_catid[i].item()
50
+ # Obtenemos la probabilidad
51
  prob = top5_prob[i].item()
52
+
53
+ # Usamos el mapa de etiquetas para "traducir" el ID a un nombre.
54
+ # Lo convertimos a string (str(species_id)) para que coincida con las claves del JSON.
55
+ species_name = labels_map.get(str(species_id), f"Desconocido (ID: {species_id})")
56
+
57
+ # Añadimos al diccionario el NOMBRE como clave y la probabilidad como valor.
58
  confidences[species_name] = prob
59
+ # ------------------------------------
60
+
61
  return confidences
62
 
63
+ # --- 4. Crear y Lanzar la Interfaz de Gradio (Sin cambios) ---
64
  iface = gr.Interface(
65
  fn=predict,
66
  inputs=gr.Image(type="numpy", label="Sube una imagen de tu orquídea"),
 
69
  description="Sube una foto de una orquídea y la IA (CNN+ViT) intentará identificar la especie.",
70
  )
71
 
 
 
 
72
  iface.launch(server_name="0.0.0.0", server_port=7860)