Visualizes a sample from BEV with annotations and detection results. :param nusc: NuScenes object. :param sample_token: The nuScenes sample token. :param gt_boxes: Ground truth boxes grouped by sample. :param pred_boxes: Prediction grouped by sample. :param nsweeps: Number o
(nusc: NuScenes,
sample_token: str,
gt_boxes: EvalBoxes,
pred_boxes: EvalBoxes,
nsweeps: int = 1,
conf_th: float = 0.15,
eval_range: float = 50,
verbose: bool = True,
savepath: str = None)
| 107 | plt.show() |
| 108 | |
| 109 | def visualize_sample_radar(nusc: NuScenes, |
| 110 | sample_token: str, |
| 111 | gt_boxes: EvalBoxes, |
| 112 | pred_boxes: EvalBoxes, |
| 113 | nsweeps: int = 1, |
| 114 | conf_th: float = 0.15, |
| 115 | eval_range: float = 50, |
| 116 | verbose: bool = True, |
| 117 | savepath: str = None) -> None: |
| 118 | """ |
| 119 | Visualizes a sample from BEV with annotations and detection results. |
| 120 | :param nusc: NuScenes object. |
| 121 | :param sample_token: The nuScenes sample token. |
| 122 | :param gt_boxes: Ground truth boxes grouped by sample. |
| 123 | :param pred_boxes: Prediction grouped by sample. |
| 124 | :param nsweeps: Number of sweeps used for lidar visualization. |
| 125 | :param conf_th: The confidence threshold used to filter negatives. |
| 126 | :param eval_range: Range in meters beyond which boxes are ignored. |
| 127 | :param verbose: Whether to print to stdout. |
| 128 | :param savepath: If given, saves the the rendering here instead of displaying. |
| 129 | """ |
| 130 | # Retrieve sensor & pose records. |
| 131 | sample_rec = nusc.get('sample', sample_token) |
| 132 | ref_sd_record = nusc.get('sample_data', sample_rec['data']['LIDAR_TOP']) |
| 133 | cs_record = nusc.get('calibrated_sensor', ref_sd_record['calibrated_sensor_token']) |
| 134 | pose_record = nusc.get('ego_pose', ref_sd_record['ego_pose_token']) |
| 135 | |
| 136 | # Get boxes. |
| 137 | boxes_gt_global = gt_boxes[sample_token] |
| 138 | boxes_est_global = pred_boxes[sample_token] |
| 139 | |
| 140 | # Map GT boxes to lidar. |
| 141 | boxes_gt = boxes_to_sensor(boxes_gt_global, pose_record, cs_record) |
| 142 | |
| 143 | # Map EST boxes to lidar. |
| 144 | boxes_est = boxes_to_sensor(boxes_est_global, pose_record, cs_record) |
| 145 | |
| 146 | # Add scores to EST boxes. |
| 147 | for box_est, box_est_global in zip(boxes_est, boxes_est_global): |
| 148 | box_est.score = box_est_global.detection_score |
| 149 | |
| 150 | rad_types = [ |
| 151 | 'RADAR_FRONT', 'RADAR_FRONT_LEFT', 'RADAR_FRONT_RIGHT', |
| 152 | 'RADAR_BACK_LEFT', 'RADAR_BACK_RIGHT' |
| 153 | ] |
| 154 | |
| 155 | points = np.zeros((18,0)) |
| 156 | new_times = np.zeros((1,0)) |
| 157 | |
| 158 | for token in rad_types: |
| 159 | |
| 160 | sd_record = nusc.get('sample_data', sample_rec['data'][token]) |
| 161 | chan = sd_record['channel'] |
| 162 | |
| 163 | pc, times = RadarPointCloud_v2.from_file_multisweep(nusc, |
| 164 | sample_rec, sample_rec, chan, 'LIDAR_TOP', nsweeps=nsweeps) |
| 165 | |
| 166 | points = np.concatenate([points, pc.points], axis=1) |
no test coverage detected