def parse_darwin_annotation( annotation: Dict[str, Any]) -> Optional[dt.Annotation]: name: str = annotation["name"] main_annotation: Optional[dt.Annotation] = None if "polygon" in annotation: bounding_box = annotation.get("bounding_box") if "additional_paths" in annotation["polygon"]: paths = [annotation["polygon"]["path"] ] + annotation["polygon"]["additional_paths"] main_annotation = dt.make_complex_polygon(name, paths, bounding_box) else: main_annotation = dt.make_polygon(name, annotation["polygon"]["path"], bounding_box) elif "complex_polygon" in annotation: bounding_box = annotation.get("bounding_box") if "additional_paths" in annotation["complex_polygon"]: paths = annotation["complex_polygon"]["path"] + annotation[ "complex_polygon"]["additional_paths"] main_annotation = dt.make_complex_polygon(name, paths, bounding_box) else: main_annotation = dt.make_complex_polygon( name, annotation["complex_polygon"]["path"], bounding_box) elif "bounding_box" in annotation: bounding_box = annotation["bounding_box"] main_annotation = dt.make_bounding_box(name, bounding_box["x"], bounding_box["y"], bounding_box["w"], bounding_box["h"]) elif "tag" in annotation: main_annotation = dt.make_tag(name) elif "line" in annotation: main_annotation = dt.make_line(name, annotation["line"]["path"]) elif "keypoint" in annotation: main_annotation = dt.make_keypoint(name, annotation["keypoint"]["x"], annotation["keypoint"]["y"]) elif "ellipse" in annotation: main_annotation = dt.make_ellipse(name, annotation["ellipse"]) elif "cuboid" in annotation: main_annotation = dt.make_cuboid(name, annotation["cuboid"]) elif "skeleton" in annotation: main_annotation = dt.make_skeleton(name, annotation["skeleton"]["nodes"]) if not main_annotation: print(f"[WARNING] Unsupported annotation type: '{annotation.keys()}'") return None if "instance_id" in annotation: main_annotation.subs.append( dt.make_instance_id(annotation["instance_id"]["value"])) if "attributes" in annotation: main_annotation.subs.append( dt.make_attributes(annotation["attributes"])) if "text" in annotation: main_annotation.subs.append(dt.make_text(annotation["text"]["text"])) return main_annotation
def _to_keypoint_annotation(point: Dict[str, Any], classes: List[Dict[str, Any]]) -> Annotation: x: float = cast(float, point.get("x")) y: float = cast(float, point.get("y")) class_id: int = cast(int, point.get("classId")) instance_class: Dict[str, Any] = _find_class(class_id, classes) name: str = str(instance_class.get("name")) attributes: Optional[SubAnnotation] = _get_attributes(point, instance_class) subannotations: Optional[List[SubAnnotation]] = None if attributes: subannotations = [attributes] return make_keypoint(f"{name}-point", x, y, subannotations)
def _to_keypoint_annotation(point: Point, title: str) -> Annotation: x: float = cast(float, point.get("x")) y: float = cast(float, point.get("y")) return make_keypoint(title, x, y)