Skip to content

Commit 8b02bd4

Browse files
Drew KaulDrew Kaul
authored andcommitted
fix to_payload fn's
1 parent 41dfb29 commit 8b02bd4

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

nucleus/constants.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
CAMERA_PARAMS_KEY = "camera_params"
1616
CLASS_PDF_KEY = "class_pdf"
1717
CONFIDENCE_KEY = "confidence"
18+
CX_KEY = "cx"
19+
CY_KEY = "cy"
1820
DATASET_ID_KEY = "dataset_id"
1921
DATASET_ITEM_IDS_KEY = "dataset_item_ids"
2022
DATASET_ITEM_ID_KEY = "dataset_item_id"
@@ -32,7 +34,10 @@
3234
ERROR_ITEMS = "upload_errors"
3335
ERROR_PAYLOAD = "error_payload"
3436
FRAMES_KEY = "frames"
37+
FX_KEY = "fx"
38+
FY_KEY = "fy"
3539
GEOMETRY_KEY = "geometry"
40+
HEADING_KEY = "heading"
3641
HEIGHT_KEY = "height"
3742
IGNORED_ITEMS = "ignored_items"
3843
IMAGE_KEY = "image"
@@ -77,6 +82,7 @@
7782
VERTICES_KEY = "vertices"
7883
WIDTH_KEY = "width"
7984
YAW_KEY = "yaw"
85+
W_KEY = "w"
8086
X_KEY = "x"
8187
Y_KEY = "y"
8288
Z_KEY = "z"

nucleus/scene.py

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
11
import json
22
from abc import ABC
33
from dataclasses import dataclass, field
4-
from typing import Optional, Union, Dict, List, Set
4+
from typing import Optional, Union, Any, Dict, List, Set
55
from enum import Enum
66
from nucleus.constants import (
77
CAMERA_PARAMS_KEY,
8+
CX_KEY,
9+
CY_KEY,
810
FRAMES_KEY,
11+
FX_KEY,
12+
FY_KEY,
13+
HEADING_KEY,
914
INDEX_KEY,
1015
ITEMS_KEY,
1116
METADATA_KEY,
17+
POSITION_KEY,
1218
REFERENCE_ID_KEY,
1319
TYPE_KEY,
1420
URL_KEY,
21+
W_KEY,
22+
X_KEY,
23+
Y_KEY,
24+
Z_KEY,
1525
)
1626
from .annotation import Point3D
1727
from .utils import flatten
@@ -29,6 +39,20 @@ class Quaternion:
2939
z: float
3040
w: float
3141

42+
@classmethod
43+
def from_json(cls, payload: Dict[str, float]):
44+
return cls(
45+
payload[X_KEY], payload[Y_KEY], payload[Z_KEY], payload[W_KEY]
46+
)
47+
48+
def to_payload(self) -> dict:
49+
return {
50+
X_KEY: self.x,
51+
Y_KEY: self.y,
52+
Z_KEY: self.z,
53+
W_KEY: self.w,
54+
}
55+
3256

3357
@dataclass
3458
class CameraParams:
@@ -39,6 +63,27 @@ class CameraParams:
3963
cx: float
4064
cy: float
4165

66+
@classmethod
67+
def from_json(cls, payload: Dict[str, Any]):
68+
return cls(
69+
Point3D.from_json(payload[POSITION_KEY]),
70+
Quaternion.from_json(payload[HEADING_KEY]),
71+
payload[FX_KEY],
72+
payload[FY_KEY],
73+
payload[CX_KEY],
74+
payload[CY_KEY],
75+
)
76+
77+
def to_payload(self) -> dict:
78+
return {
79+
POSITION_KEY: self.position.to_payload(),
80+
HEADING_KEY: self.heading.to_payload(),
81+
FX_KEY: self.fx,
82+
FY_KEY: self.fy,
83+
CX_KEY: self.cx,
84+
CY_KEY: self.cy,
85+
}
86+
4287

4388
@dataclass
4489
class SceneDatasetItem:
@@ -60,17 +105,21 @@ def from_json(cls, payload: dict):
60105
type=payload.get(TYPE_KEY, ""),
61106
reference_id=payload.get(REFERENCE_ID_KEY, None),
62107
metadata=payload.get(METADATA_KEY, None),
63-
camera_params=payload.get(CAMERA_PARAMS_KEY, None),
108+
camera_params=CameraParams.from_json(
109+
payload.get(CAMERA_PARAMS_KEY, {})
110+
),
64111
)
65112

66113
def to_payload(self) -> dict:
67-
return {
114+
payload = {
68115
URL_KEY: self.url,
69116
TYPE_KEY: self.type,
70117
REFERENCE_ID_KEY: self.reference_id,
71118
METADATA_KEY: self.metadata,
72-
CAMERA_PARAMS_KEY: self.camera_params,
73119
}
120+
if self.camera_params:
121+
payload[CAMERA_PARAMS_KEY] = self.camera_params.to_payload()
122+
return payload
74123

75124
def to_json(self) -> str:
76125
return json.dumps(self.to_payload(), allow_nan=False)

0 commit comments

Comments
 (0)