|
16 | 16 | from t4_devkit.common.timestamp import sec2us, us2sec |
17 | 17 | from t4_devkit.dataclass import LidarPointCloud, RadarPointCloud |
18 | 18 | from t4_devkit.schema import SensorModality |
19 | | -from t4_devkit.viewer import RerunViewer, distance_color, format_entity |
| 19 | +from t4_devkit.viewer import RerunViewer, ViewerBuilder, distance_color, format_entity |
20 | 20 |
|
21 | 21 | if TYPE_CHECKING: |
22 | 22 | from t4_devkit import Tier4 |
@@ -57,44 +57,31 @@ def _init_viewer( |
57 | 57 | self, |
58 | 58 | app_id: str, |
59 | 59 | *, |
60 | | - render3d: bool = True, |
61 | | - render2d: bool = True, |
62 | 60 | render_ann: bool = True, |
63 | 61 | save_dir: str | None = None, |
64 | 62 | ) -> RerunViewer: |
65 | | - if not (render3d or render2d): |
66 | | - raise ValueError("At least one of `render3d` or `render2d` must be True.") |
67 | | - |
68 | | - cameras = ( |
69 | | - [ |
70 | | - sensor.channel |
71 | | - for sensor in self._t4.sensor |
72 | | - if sensor.modality == SensorModality.CAMERA |
73 | | - ] |
74 | | - if render2d |
75 | | - else None |
76 | | - ) |
| 63 | + cameras = [ |
| 64 | + sensor.channel for sensor in self._t4.sensor if sensor.modality == SensorModality.CAMERA |
| 65 | + ] |
77 | 66 |
|
78 | | - viewer = RerunViewer( |
79 | | - app_id=app_id, |
80 | | - cameras=cameras, |
81 | | - with_3d=render3d, |
82 | | - save_dir=save_dir, |
| 67 | + # project 3D boxes if there is no 2D annotation |
| 68 | + projection = len(self._t4.object_ann) == 0 and len(self._t4.surface_ann) == 0 |
| 69 | + builder = ( |
| 70 | + ViewerBuilder().with_spatial3d().with_spatial2d(cameras=cameras, projection=projection) |
83 | 71 | ) |
84 | 72 |
|
85 | 73 | if render_ann: |
86 | | - viewer = viewer.with_labels(self._label2id) |
| 74 | + builder = builder.with_labels(self._label2id) |
87 | 75 |
|
88 | 76 | global_map_filepath = osp.join(self._t4.data_root, "map/global_map_center.pcd.yaml") |
89 | 77 | if osp.exists(global_map_filepath): |
90 | 78 | with open(global_map_filepath) as f: |
91 | 79 | map_metadata: dict = yaml.safe_load(f) |
92 | 80 | map_origin: dict = map_metadata["/**"]["ros__parameters"]["map_origin"] |
93 | | - latitude = map_origin["latitude"] |
94 | | - longitude = map_origin["longitude"] |
95 | | - viewer = viewer.with_global_origin((latitude, longitude)) |
| 81 | + latitude, longitude = map_origin["latitude"], map_origin["longitude"] |
| 82 | + builder = builder.with_streetmap((latitude, longitude)) |
96 | 83 |
|
97 | | - return viewer |
| 84 | + return builder.build(app_id, save_dir=save_dir) |
98 | 85 |
|
99 | 86 | def render_scene( |
100 | 87 | self, |
@@ -128,17 +115,8 @@ def render_scene( |
128 | 115 | if sensor.modality == SensorModality.CAMERA |
129 | 116 | ] |
130 | 117 |
|
131 | | - render3d = len(first_lidar_tokens) > 0 or len(first_radar_tokens) > 0 |
132 | | - render2d = len(first_camera_tokens) > 0 |
133 | | - |
134 | 118 | app_id = f"scene@{self._t4.dataset_id}" |
135 | | - viewer = self._init_viewer( |
136 | | - app_id, |
137 | | - render3d=render3d, |
138 | | - render2d=render2d, |
139 | | - render_ann=True, |
140 | | - save_dir=save_dir, |
141 | | - ) |
| 119 | + viewer = self._init_viewer(app_id, render_ann=True, save_dir=save_dir) |
142 | 120 |
|
143 | 121 | self._render_map(viewer) |
144 | 122 |
|
@@ -236,17 +214,8 @@ def render_instance( |
236 | 214 | if sensor.modality == SensorModality.CAMERA |
237 | 215 | ] |
238 | 216 |
|
239 | | - render3d = len(first_lidar_tokens) > 0 or len(first_radar_tokens) > 0 |
240 | | - render2d = len(first_camera_tokens) > 0 |
241 | | - |
242 | 217 | app_id = f"instance@{self._t4.dataset_id}" |
243 | | - viewer = self._init_viewer( |
244 | | - app_id, |
245 | | - render3d=render3d, |
246 | | - render2d=render2d, |
247 | | - render_ann=True, |
248 | | - save_dir=save_dir, |
249 | | - ) |
| 218 | + viewer = self._init_viewer(app_id, render_ann=True, save_dir=save_dir) |
250 | 219 |
|
251 | 220 | self._render_map(viewer) |
252 | 221 |
|
|
0 commit comments