Update app.py
Browse files
app.py
CHANGED
@@ -4,7 +4,6 @@ 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 (asegúrate de que 'model.pt' esté en el mismo directorio)
|
10 |
model = YOLO("model.pt")
|
@@ -20,7 +19,10 @@ def process_image(image):
|
|
20 |
# Inicializar la lista para almacenar la información de las máscaras
|
21 |
mask_info_list = []
|
22 |
|
23 |
-
#
|
|
|
|
|
|
|
24 |
for result in results:
|
25 |
# Verificar si se detectaron máscaras
|
26 |
if result.masks is not None and len(result.masks.data) > 0:
|
@@ -62,9 +64,6 @@ def process_image(image):
|
|
62 |
# Definir el mapa de colores
|
63 |
colormap = plt.cm.get_cmap('viridis')
|
64 |
|
65 |
-
# Crear una imagen en blanco para las máscaras
|
66 |
-
mask_image = np.zeros_like(img, dtype=np.uint8)
|
67 |
-
|
68 |
# Crear una matriz para rastrear qué máscara se asigna a cada píxel
|
69 |
mask_indices = np.full((img.shape[0], img.shape[1]), -1, dtype=int)
|
70 |
|
@@ -105,10 +104,39 @@ def process_image(image):
|
|
105 |
img_with_masks = img.copy()
|
106 |
print("No se detectaron máscaras en esta imagen.")
|
107 |
|
108 |
-
# Convertir
|
|
|
109 |
img_with_masks_rgb = cv2.cvtColor(img_with_masks, cv2.COLOR_BGR2RGB)
|
110 |
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
|
113 |
# Crear la interfaz de Gradio
|
114 |
iface = gr.Interface(
|
|
|
4 |
from ultralytics import YOLO
|
5 |
import gradio as gr
|
6 |
from matplotlib.patches import Rectangle
|
|
|
7 |
|
8 |
# Cargar el modelo YOLO (asegúrate de que 'model.pt' esté en el mismo directorio)
|
9 |
model = YOLO("model.pt")
|
|
|
19 |
# Inicializar la lista para almacenar la información de las máscaras
|
20 |
mask_info_list = []
|
21 |
|
22 |
+
# Crear una imagen en blanco para las máscaras
|
23 |
+
mask_image = np.zeros_like(img, dtype=np.uint8)
|
24 |
+
|
25 |
+
# Procesar resultados
|
26 |
for result in results:
|
27 |
# Verificar si se detectaron máscaras
|
28 |
if result.masks is not None and len(result.masks.data) > 0:
|
|
|
64 |
# Definir el mapa de colores
|
65 |
colormap = plt.cm.get_cmap('viridis')
|
66 |
|
|
|
|
|
|
|
67 |
# Crear una matriz para rastrear qué máscara se asigna a cada píxel
|
68 |
mask_indices = np.full((img.shape[0], img.shape[1]), -1, dtype=int)
|
69 |
|
|
|
104 |
img_with_masks = img.copy()
|
105 |
print("No se detectaron máscaras en esta imagen.")
|
106 |
|
107 |
+
# Convertir las imágenes de BGR a RGB para matplotlib
|
108 |
+
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
|
109 |
img_with_masks_rgb = cv2.cvtColor(img_with_masks, cv2.COLOR_BGR2RGB)
|
110 |
|
111 |
+
# Crear una figura de matplotlib
|
112 |
+
fig, ax = plt.subplots(figsize=(8, 8))
|
113 |
+
ax.imshow(img_with_masks_rgb)
|
114 |
+
ax.axis('off')
|
115 |
+
|
116 |
+
# Crear la leyenda si hay máscaras detectadas
|
117 |
+
if mask_info_list:
|
118 |
+
from matplotlib.patches import Patch
|
119 |
+
handles = []
|
120 |
+
labels = []
|
121 |
+
for mask_info in mask_info_list:
|
122 |
+
color_rgb = mask_info['color_rgb']
|
123 |
+
color_normalized = np.array(color_rgb) / 255
|
124 |
+
patch = Patch(facecolor=color_normalized)
|
125 |
+
label = f"{mask_info['class']}: {mask_info['confidence']:.2f}"
|
126 |
+
handles.append(patch)
|
127 |
+
labels.append(label)
|
128 |
+
|
129 |
+
# Añadir la leyenda al gráfico
|
130 |
+
ax.legend(handles, labels, loc='upper right')
|
131 |
+
|
132 |
+
# Convertir la figura de matplotlib a una imagen que pueda ser mostrada en Gradio
|
133 |
+
fig.canvas.draw()
|
134 |
+
img_figure = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
|
135 |
+
img_figure = img_figure.reshape(fig.canvas.get_width_height()[::-1] + (3,))
|
136 |
+
|
137 |
+
plt.close(fig) # Cerrar la figura para liberar memoria
|
138 |
+
|
139 |
+
return img_figure
|
140 |
|
141 |
# Crear la interfaz de Gradio
|
142 |
iface = gr.Interface(
|