22
22
)
23
23
24
24
25
+ class Annotation :
26
+ @classmethod
27
+ def from_json (cls , payload : dict ):
28
+ if payload .get (TYPE_KEY , None ) == BOX_TYPE :
29
+ geometry = payload .get (GEOMETRY_KEY , {})
30
+ return BoxAnnotation .from_json (payload )
31
+ elif payload .get (TYPE_KEY , None ) == POLYGON_TYPE :
32
+ geometry = payload .get (GEOMETRY_KEY , {})
33
+ return PolygonAnnotation .from_json (payload )
34
+ else :
35
+ return SegmentationAnnotation .from_json (payload )
36
+
37
+ # def from_json(cls, payload: dict):
38
+ # if payload.get(TYPE_KEY, None) == BOX_TYPE:
39
+ # geometry = payload.get(GEOMETRY_KEY, {})
40
+ # return BoxAnnotation(
41
+ # label=payload.get(LABEL_KEY, 0),
42
+ # x=geometry.get(X_KEY, 0),
43
+ # y=geometry.get(Y_KEY, 0),
44
+ # width=geometry.get(WIDTH_KEY, 0),
45
+ # height=geometry.get(HEIGHT_KEY, 0),
46
+ # reference_id=payload.get(REFERENCE_ID_KEY, None),
47
+ # item_id=payload.get(DATASET_ITEM_ID_KEY, None),
48
+ # annotation_id=payload.get(ANNOTATION_ID_KEY, None),
49
+ # metadata=payload.get(METADATA_KEY, {}),
50
+ # )
51
+ # elif payload.get(TYPE_KEY, None) == POLYGON_TYPE:
52
+ # geometry = payload.get(GEOMETRY_KEY, {})
53
+ # return PolygonAnnotation(
54
+ # label=payload.get(LABEL_KEY, 0),
55
+ # vertices=geometry.get(VERTICES_KEY, []),
56
+ # reference_id=payload.get(REFERENCE_ID_KEY, None),
57
+ # item_id=payload.get(DATASET_ITEM_ID_KEY, None),
58
+ # annotation_id=payload.get(ANNOTATION_ID_KEY, None),
59
+ # metadata=payload.get(METADATA_KEY, {}),
60
+ # )
61
+ # else:
62
+ # return SegmentationAnnotation(
63
+ # mask_url=payload.get(MASK_URL_KEY),
64
+ # annotations=[
65
+ # Segment.from_json(ann)
66
+ # for ann in payload.get(ANNOTATIONS_KEY, [])
67
+ # ],
68
+ # reference_id=payload.get(REFERENCE_ID_KEY, None),
69
+ # item_id=payload.get(ITEM_ID_KEY, None),
70
+ # )
71
+
72
+
25
73
class Segment :
26
74
def __init__ (
27
75
self , label : str , index : int , metadata : Optional [dict ] = None
@@ -51,14 +99,17 @@ def to_payload(self) -> dict:
51
99
return payload
52
100
53
101
54
- class SegmentationAnnotation :
102
+ class SegmentationAnnotation ( Annotation ) :
55
103
def __init__ (
56
104
self ,
57
105
mask_url : str ,
58
106
annotations : List [Segment ],
59
107
reference_id : Optional [str ] = None ,
60
108
item_id : Optional [str ] = None ,
61
109
):
110
+ super ().__init__ ()
111
+ if not mask_url :
112
+ raise Exception ("You must specify a mask_url." )
62
113
if bool (reference_id ) == bool (item_id ):
63
114
raise Exception (
64
115
"You must specify either a reference_id or an item_id for an annotation."
@@ -74,7 +125,7 @@ def __str__(self):
74
125
@classmethod
75
126
def from_json (cls , payload : dict ):
76
127
return cls (
77
- mask_url = payload .get (MASK_URL_KEY , None ),
128
+ mask_url = payload .get (MASK_URL_KEY ),
78
129
annotations = [
79
130
Segment .from_json (ann )
80
131
for ann in payload .get (ANNOTATIONS_KEY , [])
@@ -101,7 +152,7 @@ class AnnotationTypes(Enum):
101
152
102
153
103
154
# TODO: Add base annotation class to reduce repeated code here
104
- class BoxAnnotation :
155
+ class BoxAnnotation ( Annotation ) :
105
156
# pylint: disable=too-many-instance-attributes
106
157
def __init__ (
107
158
self ,
@@ -115,6 +166,7 @@ def __init__(
115
166
annotation_id : Optional [str ] = None ,
116
167
metadata : Optional [Dict ] = None ,
117
168
):
169
+ super ().__init__ ()
118
170
if bool (reference_id ) == bool (item_id ):
119
171
raise Exception (
120
172
"You must specify either a reference_id or an item_id for an annotation."
@@ -164,7 +216,7 @@ def __str__(self):
164
216
165
217
166
218
# TODO: Add Generic type for 2D point
167
- class PolygonAnnotation :
219
+ class PolygonAnnotation ( Annotation ) :
168
220
def __init__ (
169
221
self ,
170
222
label : str ,
@@ -174,6 +226,7 @@ def __init__(
174
226
annotation_id : Optional [str ] = None ,
175
227
metadata : Optional [Dict ] = None ,
176
228
):
229
+ super ().__init__ ()
177
230
if bool (reference_id ) == bool (item_id ):
178
231
raise Exception (
179
232
"You must specify either a reference_id or an item_id for an annotation."
0 commit comments