(path, images, eval, llffhold=8, num_pts_ratio=1.0)
| 148 | ply_data.write(path) |
| 149 | |
| 150 | def readColmapSceneInfo(path, images, eval, llffhold=8, num_pts_ratio=1.0): |
| 151 | try: |
| 152 | cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.bin") |
| 153 | cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.bin") |
| 154 | cam_extrinsics = read_extrinsics_binary(cameras_extrinsic_file) |
| 155 | cam_intrinsics = read_intrinsics_binary(cameras_intrinsic_file) |
| 156 | except: |
| 157 | cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.txt") |
| 158 | cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.txt") |
| 159 | cam_extrinsics = read_extrinsics_text(cameras_extrinsic_file) |
| 160 | cam_intrinsics = read_intrinsics_text(cameras_intrinsic_file) |
| 161 | |
| 162 | reading_dir = "images" if images == None else images |
| 163 | cam_infos_unsorted = readColmapCameras(cam_extrinsics=cam_extrinsics, cam_intrinsics=cam_intrinsics, images_folder=os.path.join(path, reading_dir)) |
| 164 | cam_infos = sorted(cam_infos_unsorted.copy(), key = lambda x : x.image_name) |
| 165 | |
| 166 | if eval: |
| 167 | train_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold != 0] |
| 168 | test_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold == 0] |
| 169 | else: |
| 170 | train_cam_infos = cam_infos |
| 171 | test_cam_infos = [] |
| 172 | |
| 173 | nerf_normalization = getNerfppNorm(train_cam_infos) |
| 174 | |
| 175 | ply_path = os.path.join(path, "sparse/0/points3D.ply") |
| 176 | bin_path = os.path.join(path, "sparse/0/points3D.bin") |
| 177 | txt_path = os.path.join(path, "sparse/0/points3D.txt") |
| 178 | if not os.path.exists(ply_path): |
| 179 | print("Converting point3d.bin to .ply, will happen only the first time you open the scene.") |
| 180 | try: |
| 181 | xyz, rgb, _ = read_points3D_binary(bin_path) |
| 182 | except: |
| 183 | xyz, rgb, _ = read_points3D_text(txt_path) |
| 184 | storePly(ply_path, xyz, rgb) |
| 185 | try: |
| 186 | pcd = fetchPly(ply_path) |
| 187 | except: |
| 188 | pcd = None |
| 189 | if num_pts_ratio > 1.001: |
| 190 | num_pts = int((num_pts_ratio - 1) * pcd.points.shape[0]) |
| 191 | mean_xyz = pcd.points.mean(axis=0) |
| 192 | min_rand_xyz = mean_xyz - np.array([0.5, 0.5, 0.5]) |
| 193 | max_rand_xyz = mean_xyz + np.array([0.5, 2.0, 0.5]) |
| 194 | xyz = np.concatenate([pcd.points, |
| 195 | np.random.random((num_pts, 3)) * (max_rand_xyz - min_rand_xyz) + min_rand_xyz], |
| 196 | axis=0) |
| 197 | colors = np.concatenate([pcd.colors, |
| 198 | SH2RGB(np.random.random((num_pts, 3)) / 255.0)], |
| 199 | axis=0) |
| 200 | normals = np.concatenate([pcd.normals, |
| 201 | np.zeros((num_pts, 3))], |
| 202 | axis=0) |
| 203 | pcd = BasicPointCloud(points=xyz, colors=colors, normals=normals) |
| 204 | |
| 205 | scene_info = SceneInfo(point_cloud=pcd, |
| 206 | train_cameras=train_cam_infos, |
| 207 | test_cameras=test_cam_infos, |
nothing calls this directly
no test coverage detected