Ejemplo n.º 1
0
def test_loading_image_lidar(data_loader: ArgoverseTrackingLoader) -> None:
    camera = CAMERA_LIST[0]
    log = "1"
    image_1 = data_loader.get_image_at_timestamp(0, camera, log)
    image_2 = data_loader.get_image_list_sync(camera, log, load=True)[0]
    image_3 = data_loader.get_image(0, camera, log)
    image_4 = data_loader.get_image_sync(0, camera, log)
    assert np.array_equal(image_1, image_2) and np.array_equal(
        image_1, image_3) and np.array_equal(image_1, image_4)

    lidar_0 = data_loader.get_lidar(0, log)

    lidar_gt = np.array([
        [0.0, 0.0, 5.0],
        [1.0, 0.0, 5.0],
        [2.0, 0.0, 5.0],
        [3.0, 0.0, 5.0],
        [4.0, 0.0, 5.0],
        [5.0, 0.0, 5.0],
        [6.0, 0.0, 5.0],
        [7.0, 0.0, 5.0],
        [8.0, 0.0, 5.0],
        [9.0, 0.0, 5.0],
    ])
    assert np.array_equal(lidar_0, lidar_gt)
Ejemplo n.º 2
0
def shuffle_log(subset, log: ArgoverseTrackingLoader):
    index = np.arange(log.num_lidar_frame)
    random.shuffle(index)
    for idx in index:
        lidar = log.get_lidar(idx)
        label = log.get_label_object(idx)
        yield idx, subset, lidar, label, log
Ejemplo n.º 3
0
def test_calib(data_loader: ArgoverseTrackingLoader) -> None:
    assert data_loader.calib
    camera = "ring_front_center"
    calib = data_loader.get_calibration(camera)
    pc = data_loader.get_lidar(0)

    uv = calib.project_ego_to_image(pc)
    uv_cam = calib.project_ego_to_cam(pc)

    assert (uv == calib.project_cam_to_image(uv_cam)).all
    assert (uv_cam == calib.project_image_to_cam(uv)).all
    assert (pc == calib.project_image_to_ego(uv)).all
Ejemplo n.º 4
0
def draw_point_cloud(
    ax: plt.Axes,
    title: str,
    argoverse_data: ArgoverseTrackingLoader,
    idx: int,
    axes: Optional[Any] = None,
    xlim3d: Any = None,
    ylim3d: Any = None,
    zlim3d: Any = None,
) -> None:
    axes = _get_axes_or_default(axes)
    pc = argoverse_data.get_lidar(idx)
    assert isinstance(pc, np.ndarray)
    objects = argoverse_data.get_label_object(idx)
    ax.scatter(*np.transpose(pc[:, axes]),
               s=point_size,
               c=pc[:, 2],
               cmap="gray")
    ax.set_title(title)
    ax.set_xlabel("{} axis".format(axes_str[axes[0]]))
    ax.set_ylabel("{} axis".format(axes_str[axes[1]]))
    if len(axes) > 2:
        ax.set_xlim3d(*axes_limits[axes[0]])
        ax.set_ylim3d(*axes_limits[axes[1]])
        ax.set_zlim3d(*axes_limits[axes[2]])
        ax.set_zlabel("{} axis".format(axes_str[axes[2]]))
    else:
        ax.set_xlim(*axes_limits[axes[0]])
        ax.set_ylim(*axes_limits[axes[1]])
        # User specified limits
    if xlim3d != None:
        ax.set_xlim3d(xlim3d)
    if ylim3d != None:
        ax.set_ylim3d(ylim3d)
    if zlim3d != None:
        ax.set_zlim3d(zlim3d)

    for obj in objects:
        if obj.occlusion == 100:
            continue

        if obj.label_class is None:
            logger.warning("No label class, just picking the default color.")
            color = _COLOR_MAP[-1]
        else:
            color = _COLOR_MAP[OBJ_CLASS_MAPPING_DICT[obj.label_class]]

        draw_box(ax, obj.as_3d_bbox().T, axes=axes, color=color)
Ejemplo n.º 5
0
def draw_point_cloud_trajectory(
    ax: plt.Axes,
    title: str,
    argoverse_data: ArgoverseTrackingLoader,
    idx: int,
    axes: Optional[Any] = None,
    xlim3d: Any = None,
    ylim3d: Any = None,
    zlim3d: Any = None,
) -> None:
    axes = _get_axes_or_default(axes)
    unique_id_list = set()
    for i in range(len(argoverse_data.lidar_list)):
        for label in argoverse_data.get_label_object(i):
            unique_id_list.add(label.track_id)
    color_map = {
        track_id: (
            float(np.random.rand()),
            float(np.random.rand()),
            float(np.random.rand()),
        )
        for track_id in unique_id_list
    }
    pc = argoverse_data.get_lidar(idx)
    assert isinstance(pc, np.ndarray)
    objects = argoverse_data.get_label_object(idx)
    ax.scatter(*np.transpose(pc[:, axes]),
               s=point_size,
               c=pc[:, 2],
               cmap="gray")
    ax.set_title(title)
    ax.set_xlabel("{} axis".format(axes_str[axes[0]]))
    ax.set_ylabel("{} axis".format(axes_str[axes[1]]))
    if len(axes) > 2:
        ax.set_xlim3d(*axes_limits[axes[0]])
        ax.set_ylim3d(*axes_limits[axes[1]])
        ax.set_zlim3d(*axes_limits[axes[2]])
        ax.set_zlabel("{} axis".format(axes_str[axes[2]]))
    else:
        ax.set_xlim(*axes_limits[axes[0]])
        ax.set_ylim(*axes_limits[axes[1]])
        # User specified limits
    if xlim3d != None:
        ax.set_xlim3d(xlim3d)
    if ylim3d != None:
        ax.set_ylim3d(ylim3d)
    if zlim3d != None:
        ax.set_zlim3d(zlim3d)
    visible_track_id = set()
    for obj in objects:
        if obj.occlusion == 100:
            continue
        draw_box(ax,
                 obj.as_3d_bbox().T,
                 axes=axes,
                 color=color_map[obj.track_id])

        visible_track_id.add(obj.track_id)

    current_pose = argoverse_data.get_pose(idx)
    traj_by_id: Dict[Optional[str], List[Any]] = defaultdict(list)
    for i in range(0, idx, 1):
        if current_pose is None:
            logger.warning("`current_pose` is missing at index %d", idx)
            break

        pose = argoverse_data.get_pose(i)
        if pose is None:
            logger.warning("`pose` is missing at index %d", i)
            continue

        objects = argoverse_data.get_label_object(i)

        for obj in objects:
            if obj.occlusion == 100:
                continue
            if obj.track_id is None or obj.track_id not in visible_track_id:
                continue
            x, y, z = pose.transform_point_cloud(
                np.array([np.array(obj.translation)]))[0]

            x, y, _ = current_pose.inverse_transform_point_cloud(
                np.array([np.array([x, y, z])]))[0]

            # ax.scatter(x,y, s=point_size, c=color_map[obj.track_id])
            if obj.track_id is None:
                logger.warning(
                    "Label has no track_id.  Collisions with other tracks that are missing IDs could happen"
                )

            traj_by_id[obj.track_id].append([x, y])

    for track_id in traj_by_id.keys():
        traj = np.array(traj_by_id[track_id])
        ax.plot(
            traj[:, 0],
            traj[:, 1],
            color=color_map[track_id],
            linestyle="--",
            linewidth=1,
        )