def coco_to_yolo(config): import os import json from pathlib import Path from tqdm import tqdm labels_dir = config["root_labels"] annotations_dir = config["root_annotations"] def convert_coco_json_to_yolo(coco_json_path, output_dir): with open(coco_json_path) as f: data = json.load(f) images = {img['id']: img for img in data['images']} categories = {cat['id']: cat['name'] for cat in data['categories']} category_id_map = {cat_id: i for i, cat_id in enumerate(sorted(categories.keys()))} os.makedirs(output_dir, exist_ok=True) print(len(images)) for ann in tqdm(data['annotations']): img = images[ann['image_id']] image_name = Path(img['file_name']).stem img_width = img['width'] img_height = img['height'] bbox = ann['bbox'] # [x_min, y_min, width, height] x_center = (bbox[0] + bbox[2] / 2) / img_width y_center = (bbox[1] + bbox[3] / 2) / img_height w = bbox[2] / img_width h = bbox[3] / img_height class_id = category_id_map[ann['category_id']] label_path = os.path.join(output_dir, f"{image_name}.txt") with open(label_path, "a") as f: f.write(f"{class_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}\n") print(f"Converted labels saved to: {output_dir}") # Example usage convert_coco_json_to_yolo( coco_json_path=annotations_dir+"instances_train.json", output_dir=labels_dir+"train/" ) convert_coco_json_to_yolo( coco_json_path=annotations_dir+"instances_val.json", output_dir=labels_dir+"val/" ) convert_coco_json_to_yolo( coco_json_path=annotations_dir+"instances_test.json", output_dir=labels_dir+"test/" )