def _load_pointcloud()

in dataset/co3d_dataset.py [0:0]


def _load_pointcloud(pcl_path, max_points=0):
    with open(pcl_path, "rb") as f:
        plydata = PlyData.read(f)

    pcl_data = torch.stack(
        [
            torch.FloatTensor(np.array(plydata["vertex"][c]).astype(float))
            for c in ("x", "y", "z", "red", "green", "blue", "nx", "ny", "nz")
        ],
        dim=1,
    )

    if pcl_data.shape[0] > max_points > 0:
        prm = torch.randperm(pcl_data.shape[0])[:max_points]
        pcl_data = pcl_data[prm]

    points, points_rgb, normals = pcl_data.split([3, 3, 3], dim=1)

    return Pointclouds(points[None], normals[None], features=points_rgb[None] / 255.0)