docs: def convert_csv_annotations_to_cropobject(annotations_path: str, image_path: str) -> List[CropObject]:
      """
      Converts a normalized dataset of objects into crop-objects.
      :param annotations_path: Path to the csv-file that contains bounding boxes in the following
                               format for a single image:
                  image_name,top,left,bottom,right,class_name,confidence
                  CVC-MUSCIMA_W-01_N-10_D-ideal_1.png,138.93,2286.36,185.20,2316.52,8th_flag,1.00
      :param image_path: Image that is being described by the file given under the annotations_path
      :return: A list of CropObjects as being used by the MUSCIMA++ dataset including the binary image-masks
      """
      annotations = pd.read_csv(annotations_path)
      image = Image.open(image_path) # type: Image.Image
  
      crop_objects = []
      node_id = 0
      for index, annotation in annotations.iterrows():
          # Annotation example:
          # image_name,top,left,bottom,right,class_name,confidence
          # CVC-MUSCIMA_W-01_N-10_D-ideal_1.png,138.93,2286.36,185.20,2316.52,8th_flag,1.00
          image_name = annotation["image_name"]
          class_name = annotation["class_name"]
          top = round(annotation["top"])
          left = round(annotation["left"])
          width = round(annotation["right"] - annotation["left"])
          heigth = round(annotation["bottom"] - annotation["top"])
          crop_object = CropObject(node_id, class_name, top, left, width, heigth)
          crop_object.set_doc(image_name)
          crop_image = image.crop((left, top, crop_object.right, crop_object.bottom)).convert("1")
          # noinspection PyTypeChecker
          cropped_image_mask = np.array(crop_image)
          crop_object.set_mask(cropped_image_mask)
          crop_objects.append(crop_object)
          node_id += 1
  
      return crop_objects