Update app.py
Browse files
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
|
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')
|
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
|
|
|
110 |
img_with_masks_rgb = cv2.cvtColor(img_with_masks, cv2.COLOR_BGR2RGB)
|
111 |
|
112 |
-
#
|
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 |
-
|
120 |
-
labels = []
|
121 |
for mask_info in mask_info_list:
|
122 |
-
|
123 |
-
|
124 |
-
label = f"
|
125 |
-
|
126 |
-
|
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
|
142 |
|
143 |
-
# Crear la interfaz de Gradio
|
144 |
iface = gr.Interface(
|
145 |
fn=process_image,
|
146 |
inputs=gr.Image(type="pil"),
|
147 |
-
outputs=
|
|
|
|
|
|
|
|
|
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 |
)
|