fecia commited on
Commit
d8b1ecf
1 Parent(s): 9d34803

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -34
app.py CHANGED
@@ -3,14 +3,12 @@ import numpy as np
3
  import matplotlib.pyplot as plt
4
  from ultralytics import YOLO
5
  import gradio as gr
6
- from matplotlib.patches import Rectangle
7
- from matplotlib.legend import Legend
8
 
9
  # Cargar el modelo YOLO
10
  model = YOLO("model.pt")
11
 
12
  def process_image(image):
13
- # Convertir la imagen de PIL a NumPy array y de RGB a BGR (PIL usa RGB, OpenCV usa BGR)
14
  img_rgb = np.array(image)
15
  img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)
16
 
@@ -63,7 +61,7 @@ def process_image(image):
63
  sorted_classes = classes[sorted_indices]
64
 
65
  # Definir el mapa de colores (puedes cambiar a 'plasma', 'inferno', etc.)
66
- colormap = plt.cm.get_cmap('viridis') # Cambia 'viridis' por 'plasma' o 'inferno' si lo deseas
67
 
68
  # Crear una matriz para rastrear qué máscara se asigna a cada píxel
69
  mask_indices = np.full((img_bgr.shape[0], img_bgr.shape[1]), -1, dtype=int)
@@ -106,45 +104,32 @@ def process_image(image):
106
  img_with_masks = img_bgr.copy()
107
  print("No se detectaron máscaras en esta imagen.")
108
 
109
- # Convertir la imagen de BGR a RGB para matplotlib
 
110
  img_with_masks_rgb = cv2.cvtColor(img_with_masks, cv2.COLOR_BGR2RGB)
111
 
112
- # Crear una figura para mostrar la imagen y la leyenda
113
- fig, ax = plt.subplots(figsize=(8, 8))
114
- ax.imshow(img_with_masks_rgb)
115
- ax.axis('off')
116
-
117
- # Crear la leyenda si hay máscaras detectadas
118
  if mask_info_list:
119
- handles = []
120
- labels = []
121
  for mask_info in mask_info_list:
122
- color_rgb_normalized = np.array(mask_info['color_rgb']) / 255 # Normalizar al rango [0, 1]
123
- patch = Rectangle((0, 0), 1, 1, facecolor=color_rgb_normalized)
124
- label = f"Stenosis probability: {mask_info['confidence']:.2f}"
125
- handles.append(patch)
126
- labels.append(label)
127
-
128
- # Añadir la leyenda al gráfico
129
- legend = Legend(ax, handles, labels, loc='upper right')
130
- ax.add_artist(legend)
131
-
132
- plt.tight_layout()
133
-
134
- # Convertir la figura a una imagen NumPy
135
- fig.canvas.draw()
136
- img_figure = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
137
- img_figure = img_figure.reshape(fig.canvas.get_width_height()[::-1] + (3,))
138
-
139
- plt.close(fig) # Cerrar la figura para liberar memoria
140
 
141
- return img_figure
142
 
143
- # Crear la interfaz de Gradio
144
  iface = gr.Interface(
145
  fn=process_image,
146
  inputs=gr.Image(type="pil"),
147
- outputs=gr.Image(type="numpy"),
 
 
 
 
148
  title="Detección de Estenosis",
149
  description="Sube una imagen para detectar estenosis."
150
  )
 
3
  import matplotlib.pyplot as plt
4
  from ultralytics import YOLO
5
  import gradio as gr
 
 
6
 
7
  # Cargar el modelo YOLO
8
  model = YOLO("model.pt")
9
 
10
  def process_image(image):
11
+ # Convertir la imagen de PIL a NumPy array y de RGB a BGR
12
  img_rgb = np.array(image)
13
  img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)
14
 
 
61
  sorted_classes = classes[sorted_indices]
62
 
63
  # Definir el mapa de colores (puedes cambiar a 'plasma', 'inferno', etc.)
64
+ colormap = plt.cm.get_cmap('viridis')
65
 
66
  # Crear una matriz para rastrear qué máscara se asigna a cada píxel
67
  mask_indices = np.full((img_bgr.shape[0], img_bgr.shape[1]), -1, dtype=int)
 
104
  img_with_masks = img_bgr.copy()
105
  print("No se detectaron máscaras en esta imagen.")
106
 
107
+ # Convertir las imágenes de BGR a RGB para mostrarlas en Gradio
108
+ img_original_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
109
  img_with_masks_rgb = cv2.cvtColor(img_with_masks, cv2.COLOR_BGR2RGB)
110
 
111
+ # Generar la leyenda como texto
 
 
 
 
 
112
  if mask_info_list:
113
+ legend_text = ""
 
114
  for mask_info in mask_info_list:
115
+ color_rgb = mask_info['color_rgb']
116
+ color_hex = '#%02x%02x%02x' % tuple(color_rgb)
117
+ label = f"<span style='color:{color_hex};'>■</span> {mask_info['class']}: {mask_info['confidence']:.2f}<br>"
118
+ legend_text += label
119
+ else:
120
+ legend_text = "No se detectaron máscaras en esta imagen."
 
 
 
 
 
 
 
 
 
 
 
 
121
 
122
+ return img_original_rgb, img_with_masks_rgb, legend_text
123
 
124
+ # Crear la interfaz de Gradio con múltiples salidas
125
  iface = gr.Interface(
126
  fn=process_image,
127
  inputs=gr.Image(type="pil"),
128
+ outputs=[
129
+ gr.Image(type="numpy", label="Imagen Original"),
130
+ gr.Image(type="numpy", label="Imagen con Máscaras"),
131
+ gr.HTML(label="Leyenda")
132
+ ],
133
  title="Detección de Estenosis",
134
  description="Sube una imagen para detectar estenosis."
135
  )