Skip to content

Commit 5ce34d6

Browse files
Drew KaulDrew Kaul
authored andcommitted
add camera_params and start validation
1 parent bb2e35a commit 5ce34d6

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

nucleus/scene.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from dataclasses import dataclass
2-
from typing import Optional, Dict, List
2+
from typing import Optional, Dict, List, Set
33
from enum import Enum
4+
from .annotation import Point3D
5+
from .utils import flatten
46

57

68
class DatasetItemType(Enum):
@@ -9,12 +11,31 @@ class DatasetItemType(Enum):
911
VIDEO = "video"
1012

1113

14+
@dataclass
15+
class Quaternion:
16+
x: float
17+
y: float
18+
z: float
19+
w: float
20+
21+
22+
@dataclass
23+
class CameraParams:
24+
position: Point3D
25+
heading: Quaternion
26+
fx: float
27+
fy: float
28+
cx: float
29+
cy: float
30+
31+
1232
@dataclass
1333
class SceneDatasetItem:
1434
url: str
1535
type: DatasetItemType
1636
reference_id: Optional[str] = None
1737
metadata: Optional[dict] = None
38+
camera_params: Optional[CameraParams] = None
1839

1940

2041
@dataclass
@@ -40,4 +61,18 @@ class Scene:
4061
class LidarScene(Scene):
4162
def __post_init__(self):
4263
# do validation here for lidar scene
43-
pass
64+
lidar_sources = flatten(
65+
[
66+
[
67+
source
68+
for source in frame.items.keys()
69+
if frame.items[source].type == DatasetItemType.POINTCLOUD
70+
]
71+
for frame in self.frames
72+
]
73+
)
74+
assert (
75+
len(Set(lidar_sources)) == 1
76+
), "Each lidar scene must have exactly one lidar source"
77+
78+
# TODO: check single pointcloud per frame

nucleus/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ def _get_all_field_values(metadata_list: List[dict], key: str):
3232
return {metadata[key] for metadata in metadata_list if key in metadata}
3333

3434

35+
def flatten(t):
36+
return [item for sublist in t for item in sublist]
37+
38+
3539
def suggest_metadata_schema(
3640
data: Union[
3741
List[DatasetItem], List[BoxPrediction], List[PolygonPrediction]

0 commit comments

Comments
 (0)