File size: 2,784 Bytes
7ab05dd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os
import json
import argparse


def get_splits_paths(dataset_path):
    # Get the names of all subfolders in the given folder
    im_path = os.path.join(dataset_path, "images")
    pc_path = dataset_path
    splits = ["train", "val"]
    split_path = os.path.join(dataset_path, "splits")
    os.makedirs(split_path, exist_ok=True)
    for split in splits:
        im_split_path = os.path.join(im_path, split)
        pc_split_path = os.path.join(pc_path, split).replace(
            dataset_path, "data/structured3d"
        )
        split_names = [f.name for f in os.scandir(im_split_path) if f.is_dir()]
        split_dict = {}
        for name in split_names:
            cam_split_name_path = os.path.join(im_split_path, name)
            cam_names = [f.name for f in os.scandir(cam_split_name_path) if f.is_dir()]
            for cam_name in cam_names:
                im_split_name_path = os.path.join(
                    cam_split_name_path, cam_name, "color", "prsp"
                )
                co_split_name_path = os.path.join(
                    cam_split_name_path,
                    cam_name,
                    "correspondence",
                    "prsp_correspondence",
                )
                png_files = [
                    f for f in os.listdir(im_split_name_path) if f.endswith(".png")
                ]
                png_files = sorted(png_files, key=lambda x: int(x.split(".")[0]))
                # Get the full paths of the .png files
                png_file_paths = [
                    os.path.join(im_split_name_path, f).replace(
                        dataset_path, "data/structured3d"
                    )
                    for f in png_files
                ]
                co_file_paths = [
                    os.path.join(co_split_name_path, f.replace(".png", ".npy")).replace(
                        dataset_path, "data/structured3d"
                    )
                    for f in png_files
                ]
                split_dict[f"{name}_{cam_name}"] = {}
                split_dict[f"{name}_{cam_name}"]["pointclouds"] = os.path.join(
                    pc_split_path, name, cam_name
                )
                split_dict[f"{name}_{cam_name}"]["images"] = png_file_paths
                split_dict[f"{name}_{cam_name}"]["correspondences"] = co_file_paths
        with open(os.path.join(split_path, f"{split}.json"), "w") as f:
            json.dump(split_dict, f, indent=4)


# Example usage
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--dataset_root",
        required=True,
        help="Path to the Structured3D dataset containing scene folders",
    )
    config = parser.parse_args()
    get_splits_paths(config.dataset_root)