code: def cvt_to_coco_json(annotations):
      image_id = 0
      annotation_id = 0
      coco = dict()
      coco["images"] = []
      coco["type"] = "instance"
      coco["categories"] = []
      coco["annotations"] = []
      image_set = set()
  
      def addAnnItem(
          annotation_id, image_id, category_id, bbox, difficult_flag
      ):
          annotation_item = dict()
          annotation_item["segmentation"] = []
  
          seg = []
          # bbox[] is x1,y1,x2,y2
          # left_top
          seg.append(int(bbox[0]))
          seg.append(int(bbox[1]))
          # left_bottom
          seg.append(int(bbox[0]))
          seg.append(int(bbox[3]))
          # right_bottom
          seg.append(int(bbox[2]))
          seg.append(int(bbox[3]))
          # right_top
          seg.append(int(bbox[2]))
          seg.append(int(bbox[1]))
  
          annotation_item["segmentation"].append(seg)
  
          xywh = np.array(
              [bbox[0], bbox[1], bbox[2] - bbox[0], bbox[3] - bbox[1]]
          )
          annotation_item["area"] = int(xywh[2] * xywh[3])
          if difficult_flag == 1:
              annotation_item["ignore"] = 0
              annotation_item["iscrowd"] = 1
          else:
              annotation_item["ignore"] = 0
              annotation_item["iscrowd"] = 0
          annotation_item["image_id"] = int(image_id)
          annotation_item["bbox"] = xywh.astype(int).tolist()
          annotation_item["category_id"] = int(category_id)
          annotation_item["id"] = int(annotation_id)
          coco["annotations"].append(annotation_item)
          return annotation_id + 1
  
      for category_id, name in enumerate(voc_classes()):
          category_item = dict()
          category_item["supercategory"] = str("none")
          category_item["id"] = int(category_id)
          category_item["name"] = str(name)
          coco["categories"].append(category_item)
  
      for ann_dict in annotations:
          file_name = ann_dict["filename"]
          ann = ann_dict["ann"]
          assert file_name not in image_set
          image_item = dict()
          image_item["id"] = int(image_id)
          image_item["file_name"] = str(file_name)
          image_item["height"] = int(ann_dict["height"])
          image_item["width"] = int(ann_dict["width"])
          coco["images"].append(image_item)
          image_set.add(file_name)
  
          bboxes = ann["bboxes"][:, :4]
          labels = ann["labels"]
          for bbox_id in range(len(bboxes)):
              bbox = bboxes[bbox_id]
              label = labels[bbox_id]
              annotation_id = addAnnItem(
                  annotation_id, image_id, label, bbox, difficult_flag=0
              )
  
          bboxes_ignore = ann["bboxes_ignore"][:, :4]
          labels_ignore = ann["labels_ignore"]
          for bbox_id in range(len(bboxes_ignore)):
              bbox = bboxes_ignore[bbox_id]
              label = labels_ignore[bbox_id]
              annotation_id = addAnnItem(
                  annotation_id, image_id, label, bbox, difficult_flag=1
              )
  
          image_id += 1
  
      return coco
  
file_path: mmdetection/tools/dataset_converters/pascal_voc.py
imports: import argparse
  import os.path
  import xml.etree.ElementTree
  import numpy
  from mmengine.fileio import dump, list_from_file
  from mmengine.utils import mkdir_or_exist, track_progress
  from mmdet.evaluation import voc_classes
label_desc: Use image node_id 3 for calling a global function with example usage: cvt_to_coco_json(annotations) and returns: coco, unknown