Aqui una alternativa para mostrar todos los bounding boxes:
Primero definamos un diccionario con todas las classes:
CLASS_LABELS = {
1: "Cars",
2: "Truck",
3: "Pedestrian",
4: "Bicyclist",
5: "Light"
}
Luego modificamos los gt_boxes
para incluir los labels de las classes:
y_val, x_val, _ = np.array(img).shape
gt_boxes = {}
for idx, row in df_train.iterrows():
bbox = np.array(
[
[
row["ymin"] / y_val,
row["xmin"] / x_val,
row["ymax"] / y_val,
row["xmax"] / x_val,
]
],
dtype=np.float32,
)
frame = row["frame"]
label = row["class_id"]
if frame in gt_boxes:
gt_boxes[frame] = {
"boxes": np.append(gt_boxes[frame]["boxes"], np.array(bbox), axis=0),
"id": np.append(gt_boxes[frame]["id"], np.array([label]), axis=0)
}
else:
gt_boxes[frame] = {"boxes": np.array(bbox), "id": np.array([label])}
Tambien debemos modificar el diccionario category_index
:
category_index = {i: {"id": i, "name": k} for i, k in CLASS_LABELS.items()}
Por ultimo, modificamos el código que nos permite visualizar las imagenes con los boxes:
num_examples = 20
idx = 0
plt.figure(figsize=(30, 30))
for key, value in islice(gt_boxes.items(), num_examples):
boxes = value["boxes"]
labels = value["id"]
im = np.array(Image.open(my_path + key))
dummy_scores = np.ones(shape=[boxes.shape[0]], dtype=np.float32)
plt.subplot(4, 5, idx + 1)
plot_detections(
im,
boxes,
labels,
dummy_scores,
category_index
)
idx += 1
plt.show()
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?