Calamar49 commited on
Commit
7d0f1a1
·
1 Parent(s): 0bb14f8
Files changed (3) hide show
  1. README.md +3 -0
  2. app.py +9 -8
  3. requirements.txt +3 -3
README.md CHANGED
@@ -1,6 +1,9 @@
1
  ---
2
  title: Clasificador de Orquídeas
3
  emoji: 🌸
 
 
4
  sdk: gradio
5
  sdk_version: 4.31.0
 
6
  ---
 
1
  ---
2
  title: Clasificador de Orquídeas
3
  emoji: 🌸
4
+ colorFrom: green
5
+ colorTo: teal
6
  sdk: gradio
7
  sdk_version: 4.31.0
8
+ python_version: 3.10
9
  ---
app.py CHANGED
@@ -1,4 +1,4 @@
1
- # app.py (Versión final y correcta para Gradio SDK)
2
 
3
  import torch
4
  import torch.nn as nn
@@ -8,10 +8,11 @@ import json
8
  import timm
9
  import gradio as gr
10
 
11
- # --- 1. Definición del Modelo (directamente aquí) ---
12
  class VisionEnsembleModel(nn.Module):
13
  def __init__(self, num_classes, cnn_model_name='efficientnet_b2', vit_model_name='vit_small_patch16_224'):
14
  super().__init__()
 
15
  self.cnn = timm.create_model(cnn_model_name, pretrained=False, num_classes=num_classes)
16
  cnn_features = self.cnn.get_classifier().in_features
17
  self.cnn.reset_classifier(0)
@@ -42,7 +43,7 @@ LABELS_PATH = "model/species_labels_map.json"
42
  NUM_CLASSES = 156
43
 
44
  try:
45
- with open(LABELS_PATH) as f:
46
  labels_map = json.load(f)
47
  print("Mapa de etiquetas cargado con éxito.")
48
  except Exception as e:
@@ -76,16 +77,16 @@ def predict(image):
76
  return confidences
77
 
78
  # --- 4. Crear la Interfaz de Gradio ---
 
79
  iface = gr.Interface(
80
  fn=predict,
81
  inputs=gr.Image(type="numpy", label="Sube una imagen de tu orquídea"),
82
  outputs=gr.Label(num_top_classes=5, label="Predicciones"),
83
  title="Clasificador de Orquídeas",
84
- description="Sube una foto de una orquídea y la IA (CNN+ViT) intentará identificar la especie.",
85
  allow_flagging="never"
86
  )
87
 
88
- # --- 5. Lanzar la Aplicación ---
89
- # Al estar en el nivel superior del script (sin el if),
90
- # la plataforma de Hugging Face lo ejecutará correctamente.
91
- iface.launch()
 
1
+ # app.py (Versión final, autocontenida y robusta para Gradio SDK)
2
 
3
  import torch
4
  import torch.nn as nn
 
8
  import timm
9
  import gradio as gr
10
 
11
+ # --- 1. Definición del Modelo (directamente aquí para evitar errores) ---
12
  class VisionEnsembleModel(nn.Module):
13
  def __init__(self, num_classes, cnn_model_name='efficientnet_b2', vit_model_name='vit_small_patch16_224'):
14
  super().__init__()
15
+ # Se crean con pretrained=False porque cargaremos nuestros propios pesos
16
  self.cnn = timm.create_model(cnn_model_name, pretrained=False, num_classes=num_classes)
17
  cnn_features = self.cnn.get_classifier().in_features
18
  self.cnn.reset_classifier(0)
 
43
  NUM_CLASSES = 156
44
 
45
  try:
46
+ with open(LABELS_PATH, encoding="utf-8") as f:
47
  labels_map = json.load(f)
48
  print("Mapa de etiquetas cargado con éxito.")
49
  except Exception as e:
 
77
  return confidences
78
 
79
  # --- 4. Crear la Interfaz de Gradio ---
80
+ # La plataforma de Hugging Face encontrará esta variable 'iface' y la lanzará automáticamente.
81
  iface = gr.Interface(
82
  fn=predict,
83
  inputs=gr.Image(type="numpy", label="Sube una imagen de tu orquídea"),
84
  outputs=gr.Label(num_top_classes=5, label="Predicciones"),
85
  title="Clasificador de Orquídeas",
86
+ description="Sube una foto de una orquídea y la IA (un ensamblado de CNN y Vision Transformer) intentará identificar la especie.",
87
  allow_flagging="never"
88
  )
89
 
90
+ # --- 5. Lanzar la demo (opcional pero recomendado para pruebas locales) ---
91
+ if __name__ == "__main__":
92
+ iface.launch()
 
requirements.txt CHANGED
@@ -1,6 +1,6 @@
1
  # requirements.txt
2
- torch
3
- torchvision
4
  timm
5
  Pillow
6
- gradio==4.31.0
 
1
  # requirements.txt
2
+ torch==2.1.0
3
+ torchvision==0.16.0
4
  timm
5
  Pillow
6
+ gradio==4.31.0