def show_result_meshlab(data, result, out_dir, score_thr=0.0, show=False, snapshot=False): """Show result by meshlab. Args: data (dict): Contain data from pipeline. result (dict): Predicted result from model. out_dir (str): Directory to save visualized result. score_thr (float): Minimum score of bboxes to be shown. Default: 0.0 show (bool): Visualize the results online. Defaults to False. snapshot (bool): Whether to save the online results. Defaults to False. """ points = data['points'][0][0].cpu().numpy() pts_filename = data['img_metas'][0][0]['pts_filename'] file_name = osp.split(pts_filename)[-1].split('.')[0] assert out_dir is not None, 'Expect out_dir, got none.' if 'pts_bbox' in result[0].keys(): pred_bboxes = result[0]['pts_bbox']['boxes_3d'].tensor.numpy() pred_scores = result[0]['pts_bbox']['scores_3d'].numpy() else: pred_bboxes = result[0]['boxes_3d'].tensor.numpy() pred_scores = result[0]['scores_3d'].numpy() # filter out low score bboxes for visualization if score_thr > 0: inds = pred_scores > score_thr pred_bboxes = pred_bboxes[inds] # for now we convert points into depth mode box_mode = data['img_metas'][0][0]['box_mode_3d'] if box_mode != Box3DMode.DEPTH: points = points[..., [1, 0, 2]] points[..., 0] *= -1 show_bboxes = Box3DMode.convert(pred_bboxes, box_mode, Box3DMode.DEPTH) else: show_bboxes = deepcopy(pred_bboxes) show_result(points, None, show_bboxes, out_dir, file_name, show=show, snapshot=snapshot) if 'img' not in data.keys(): return out_dir, file_name # multi-modality visualization # project 3D bbox to 2D image plane if box_mode == Box3DMode.LIDAR: if 'lidar2img' not in data['img_metas'][0][0]: raise NotImplementedError( 'LiDAR to image transformation matrix is not provided') show_bboxes = LiDARInstance3DBoxes(pred_bboxes, origin=(0.5, 0.5, 0)) img = mmcv.imread(data['img_metas'][0][0]['filename']) show_multi_modality_result(img, None, show_bboxes, data['img_metas'][0][0]['lidar2img'], out_dir, file_name, show=show) elif box_mode == Box3DMode.DEPTH: if 'calib' not in data.keys(): raise NotImplementedError( 'camera calibration information is not provided') show_bboxes = DepthInstance3DBoxes(pred_bboxes, origin=(0.5, 0.5, 0)) img = mmcv.imread(data['img_metas'][0][0]['filename']) show_multi_modality_result(img, None, show_bboxes, data['calib'][0], out_dir, file_name, depth_bbox=True, img_metas=data['img_metas'][0][0], show=show) else: raise NotImplementedError( f'visualization of {box_mode} bbox is not supported') return out_dir, file_name