@@ -151,6 +151,63 @@ def crop_image(self, input_dict):
151151 input_dict ['img_process_infos' ] = img_process_infos
152152 input_dict ['camera_imgs' ] = crop_images
153153 return input_dict
154+
155+ def load_camera_info (self , input_dict , info ):
156+ input_dict ["image_paths" ] = []
157+ input_dict ["lidar2camera" ] = []
158+ input_dict ["lidar2image" ] = []
159+ input_dict ["camera2ego" ] = []
160+ input_dict ["camera_intrinsics" ] = []
161+ input_dict ["camera2lidar" ] = []
162+
163+ for _ , camera_info in info ["cams" ].items ():
164+ input_dict ["image_paths" ].append (camera_info ["data_path" ])
165+
166+ # lidar to camera transform
167+ lidar2camera_r = np .linalg .inv (camera_info ["sensor2lidar_rotation" ])
168+ lidar2camera_t = (
169+ camera_info ["sensor2lidar_translation" ] @ lidar2camera_r .T
170+ )
171+ lidar2camera_rt = np .eye (4 ).astype (np .float32 )
172+ lidar2camera_rt [:3 , :3 ] = lidar2camera_r .T
173+ lidar2camera_rt [3 , :3 ] = - lidar2camera_t
174+ input_dict ["lidar2camera" ].append (lidar2camera_rt .T )
175+
176+ # camera intrinsics
177+ camera_intrinsics = np .eye (4 ).astype (np .float32 )
178+ camera_intrinsics [:3 , :3 ] = camera_info ["camera_intrinsics" ]
179+ input_dict ["camera_intrinsics" ].append (camera_intrinsics )
180+
181+ # lidar to image transform
182+ lidar2image = camera_intrinsics @ lidar2camera_rt .T
183+ input_dict ["lidar2image" ].append (lidar2image )
184+
185+ # camera to ego transform
186+ camera2ego = np .eye (4 ).astype (np .float32 )
187+ camera2ego [:3 , :3 ] = Quaternion (
188+ camera_info ["sensor2ego_rotation" ]
189+ ).rotation_matrix
190+ camera2ego [:3 , 3 ] = camera_info ["sensor2ego_translation" ]
191+ input_dict ["camera2ego" ].append (camera2ego )
192+
193+ # camera to lidar transform
194+ camera2lidar = np .eye (4 ).astype (np .float32 )
195+ camera2lidar [:3 , :3 ] = camera_info ["sensor2lidar_rotation" ]
196+ camera2lidar [:3 , 3 ] = camera_info ["sensor2lidar_translation" ]
197+ input_dict ["camera2lidar" ].append (camera2lidar )
198+ # read image
199+ filename = input_dict ["image_paths" ]
200+ images = []
201+ for name in filename :
202+ images .append (Image .open (str (self .root_path / name )))
203+
204+ input_dict ["camera_imgs" ] = images
205+ input_dict ["ori_shape" ] = images [0 ].size
206+
207+ # resize and crop image
208+ input_dict = self .crop_image (input_dict )
209+
210+ return input_dict
154211
155212 def __len__ (self ):
156213 if self ._merge_all_iters_to_one_epoch :
@@ -182,59 +239,7 @@ def __getitem__(self, index):
182239 'gt_boxes' : info ['gt_boxes' ] if mask is None else info ['gt_boxes' ][mask ]
183240 })
184241 if self .use_camera :
185- input_dict ["image_paths" ] = []
186- input_dict ["lidar2camera" ] = []
187- input_dict ["lidar2image" ] = []
188- input_dict ["camera2ego" ] = []
189- input_dict ["camera_intrinsics" ] = []
190- input_dict ["camera2lidar" ] = []
191-
192- for _ , camera_info in info ["cams" ].items ():
193- input_dict ["image_paths" ].append (camera_info ["data_path" ])
194-
195- # lidar to camera transform
196- lidar2camera_r = np .linalg .inv (camera_info ["sensor2lidar_rotation" ])
197- lidar2camera_t = (
198- camera_info ["sensor2lidar_translation" ] @ lidar2camera_r .T
199- )
200- lidar2camera_rt = np .eye (4 ).astype (np .float32 )
201- lidar2camera_rt [:3 , :3 ] = lidar2camera_r .T
202- lidar2camera_rt [3 , :3 ] = - lidar2camera_t
203- input_dict ["lidar2camera" ].append (lidar2camera_rt .T )
204-
205- # camera intrinsics
206- camera_intrinsics = np .eye (4 ).astype (np .float32 )
207- camera_intrinsics [:3 , :3 ] = camera_info ["camera_intrinsics" ]
208- input_dict ["camera_intrinsics" ].append (camera_intrinsics )
209-
210- # lidar to image transform
211- lidar2image = camera_intrinsics @ lidar2camera_rt .T
212- input_dict ["lidar2image" ].append (lidar2image )
213-
214- # camera to ego transform
215- camera2ego = np .eye (4 ).astype (np .float32 )
216- camera2ego [:3 , :3 ] = Quaternion (
217- camera_info ["sensor2ego_rotation" ]
218- ).rotation_matrix
219- camera2ego [:3 , 3 ] = camera_info ["sensor2ego_translation" ]
220- input_dict ["camera2ego" ].append (camera2ego )
221-
222- # camera to lidar transform
223- camera2lidar = np .eye (4 ).astype (np .float32 )
224- camera2lidar [:3 , :3 ] = camera_info ["sensor2lidar_rotation" ]
225- camera2lidar [:3 , 3 ] = camera_info ["sensor2lidar_translation" ]
226- input_dict ["camera2lidar" ].append (camera2lidar )
227- # read image
228- filename = input_dict ["image_paths" ]
229- images = []
230- for name in filename :
231- images .append (Image .open (str (self .root_path / name )))
232-
233- input_dict ["camera_imgs" ] = images
234- input_dict ["ori_shape" ] = images [0 ].size
235-
236- # resize and crop image
237- input_dict = self .crop_image (input_dict )
242+ input_dict = self .load_camera_info (input_dict , info )
238243
239244 data_dict = self .prepare_data (data_dict = input_dict )
240245
0 commit comments