-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathpayload_constructor.py
More file actions
106 lines (90 loc) · 2.67 KB
/
Copy pathpayload_constructor.py
File metadata and controls
106 lines (90 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
from typing import List, Optional, Dict, Union
from .dataset_item import DatasetItem
from .annotation import (
BoxAnnotation,
PolygonAnnotation,
SegmentationAnnotation,
)
from .prediction import (
BoxPrediction,
PolygonPrediction,
SegmentationPrediction,
)
from .constants import (
ANNOTATION_UPDATE_KEY,
NAME_KEY,
METADATA_KEY,
REFERENCE_ID_KEY,
ANNOTATIONS_KEY,
ITEMS_KEY,
UPDATE_KEY,
MODEL_ID_KEY,
ANNOTATION_METADATA_SCHEMA_KEY,
SEGMENTATIONS_KEY,
)
def construct_append_payload(
dataset_items: List[DatasetItem], force: bool = False
) -> dict:
items = []
for item in dataset_items:
items.append(item.to_payload())
return (
{ITEMS_KEY: items}
if not force
else {ITEMS_KEY: items, UPDATE_KEY: True}
)
def construct_annotation_payload(
annotation_items: List[Union[BoxAnnotation, PolygonAnnotation]],
update: bool,
) -> dict:
annotations = []
for annotation_item in annotation_items:
annotations.append(annotation_item.to_payload())
return {ANNOTATIONS_KEY: annotations, ANNOTATION_UPDATE_KEY: update}
def construct_segmentation_payload(
annotation_items: Union[
List[SegmentationAnnotation], List[SegmentationPrediction]
],
update: bool,
) -> dict:
annotations = []
for annotation_item in annotation_items:
annotations.append(annotation_item.to_payload())
return {SEGMENTATIONS_KEY: annotations, ANNOTATION_UPDATE_KEY: update}
def construct_box_predictions_payload(
box_predictions: List[Union[BoxPrediction, PolygonPrediction]],
update: bool,
) -> dict:
predictions = []
for prediction in box_predictions:
predictions.append(prediction.to_payload())
return {ANNOTATIONS_KEY: predictions, ANNOTATION_UPDATE_KEY: update}
def construct_model_creation_payload(
name: str, reference_id: str, metadata: Optional[Dict]
) -> dict:
return {
NAME_KEY: name,
REFERENCE_ID_KEY: reference_id,
METADATA_KEY: metadata if metadata else {},
}
def construct_model_run_creation_payload(
name: str,
reference_id: Optional[str],
model_id: Optional[str],
metadata: Optional[Dict],
annotation_metadata_schema: Optional[Dict] = None,
) -> dict:
payload = {
NAME_KEY: name,
METADATA_KEY: metadata if metadata else {},
}
if reference_id:
payload[REFERENCE_ID_KEY] = reference_id
if model_id:
payload[MODEL_ID_KEY] = model_id
return {
NAME_KEY: name,
REFERENCE_ID_KEY: reference_id,
METADATA_KEY: metadata if metadata else {},
ANNOTATION_METADATA_SCHEMA_KEY: annotation_metadata_schema,
}