Visualize Random COCO
Visualize N random Samples
This is a small script to generate samples with bounding boxes and corresponding labels.
COCO Format
from pycocotools.coco import COCO
import random
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import os
def find_name_by_id(lst, search_id):
for item in lst:
if item.get("id") == search_id:
return item.get("name")
return None
def save_annotated_images(coco, image_ids, num_images, visdrone_folder, output_folder):
for i in range(num_images):
image_id = random.choice(image_ids)
image_data = coco.loadImgs(image_id)[0]
image_path = os.path.join(visdrone_folder, image_data['file_name'])
annotations = coco.loadAnns(coco.getAnnIds(image_id))
# Load the image
image = plt.imread(image_path)
# Plot annotations
fig, ax = plt.subplots()
ax.imshow(image)
for ann in annotations:
bbox = ann['bbox']
rect = patches.Rectangle((bbox[0], bbox[1]), bbox[2], bbox[3],
linewidth=1, edgecolor='r', facecolor='none')
plt.gca().add_patch(rect)
category_id = ann['category_id']
category_name = find_name_by_id(coco.dataset["categories"], category_id)# [category_id - 1]
plt.text(bbox[0], bbox[1] - 2, category_name, fontsize=8,
color='r', verticalalignment='top', bbox={'color': 'white', 'alpha': 0.7, 'pad': 2})
ax.axis('off')
output_path = os.path.join(output_folder, f'annotated_{i+1}.jpg')
plt.savefig(output_path, bbox_inches='tight')
plt.close()
# Specify the COCO annotations file path and output folder
coco_annotations_path = '../scaled_visdrone_mot_train.json'
visdrone_folder = '../scaled_label_train'
output_folder = "."
# Initialize COCO API
coco = COCO(coco_annotations_path)
# Get all image IDs
image_ids = coco.getImgIds()
# Save annotated images for 5 random images
save_annotated_images(coco, image_ids, num_images=5, visdrone_folder=visdrone_folder, output_folder=output_folder)