| import sys |
| import os |
|
|
| |
| sys.path.append("/root/autodl-tmp/taming-3dgs") |
| try: |
| from scene.colmap_loader import read_extrinsics_binary, read_intrinsics_binary, qvec2rotmat |
| from scene.colmap_loader import read_points3D_binary |
| except ImportError: |
| print("❌ 找不到 taming-3dgs 路径,请确认目录存在。") |
| sys.exit(1) |
|
|
| def convert(): |
| base_path = "/root/autodl-tmp/dataset/synthetic_nerf/Synthetic_NeRF/Lego/sparse/0" |
| print(f"🔄 正在手动解析二进制并生成文本文件: {base_path}") |
| |
| |
| try: |
| intrinsics = read_intrinsics_binary(os.path.join(base_path, "cameras.bin")) |
| with open(os.path.join(base_path, "cameras.txt"), "w") as f: |
| for i in intrinsics: |
| |
| params = " ".join([str(p) for p in intrinsics[i].params]) |
| f.write(f"{i} {intrinsics[i].model} {intrinsics[i].width} {intrinsics[i].height} {params}\n") |
| print(" - cameras.txt 生成成功") |
| except Exception as e: print(f" - cameras 转换失败: {e}") |
|
|
| |
| try: |
| extrinsics = read_extrinsics_binary(os.path.join(base_path, "images.bin")) |
| with open(os.path.join(base_path, "images.txt"), "w") as f: |
| for i in extrinsics: |
| e = extrinsics[i] |
| q = " ".join([str(x) for x in e.qvec]) |
| t = " ".join([str(x) for x in e.tvec]) |
| |
| f.write(f"{i} {q} {t} {e.camera_id} {e.name}\n") |
| |
| f.write("\n") |
| print(" - images.txt 生成成功") |
| except Exception as e: print(f" - images 转换失败: {e}") |
|
|
| |
| try: |
| pts3d = read_points3D_binary(os.path.join(base_path, "points3D.bin")) |
| with open(os.path.join(base_path, "points3D.txt"), "w") as f: |
| for i in pts3d: |
| p = pts3d[i] |
| xyz = " ".join([str(x) for x in p.xyz]) |
| rgb = " ".join([str(x) for x in p.rgb]) |
| f.write(f"{i} {xyz} {rgb} {p.error} 0\n") |
| print(" - points3D.txt 生成成功") |
| except Exception as e: print(f" - points3D 转换失败: {e}") |
|
|
| if __name__ == "__main__": |
| convert() |
|
|