Files
mt/tools/create_camera_settings.py

61 lines
2.2 KiB
Python
Raw Normal View History

from configargparse import ArgParser, YAMLConfigFileParser, ArgumentDefaultsRawHelpFormatter
from sys import exit
from open3d.geometry import Geometry
from open3d.visualization import Visualizer
from open3d.io import write_pinhole_camera_parameters
from pathlib import Path
from util import (
2024-06-11 11:07:05 +02:00
load_dataset,
existing_file,
)
def create_camera_settings(geometry: Geometry, camera_config_output_json_path: Path) -> None:
vis = Visualizer()
vis.create_window()
vis.add_geometry(geometry)
vis.run()
parameters = vis.get_view_control().convert_to_pinhole_camera_parameters()
write_pinhole_camera_parameters(camera_config_output_json_path.as_posix(), parameters)
print(f"Written camera config to {camera_config_output_json_path.as_posix()}!")
vis.destroy_window()
def main() -> int:
parser = ArgParser(
config_file_parser_class=YAMLConfigFileParser,
default_config_files=["create_camera_settings_config.yaml"],
formatter_class=ArgumentDefaultsRawHelpFormatter,
description="Use an interactive window to move the camera and export the camera view at the moment of closing"
" the window into a JSON file",
)
parser.add_argument("--render-config-file", is_config_file=True, help="yaml config file path")
parser.add_argument("--input-bag-path", required=True, type=existing_file, help="path to bag file")
parser.add_argument(
"--camera-config-output-json-path",
default=Path("./saved_camera_settings.json"),
type=Path,
help="path the camera settings json file should be saved to",
)
parser.add_argument(
"--bag-pointcloud-index",
type=int,
default=0,
help="index of the frame inside the experiment bag that should be displayed in 3d",
)
args = parser.parse_args()
print("Creating camera settings!")
print("Move the view in the window to the desired camera position" " and then close the window using the ESC key!")
2024-06-11 11:07:05 +02:00
dataset = load_dataset(args.input_bag_path)
open3d_pointcloud = dataset[args.bag_pointcloud_index].to_instance("open3d")
create_camera_settings(open3d_pointcloud, args.camera_config_output_json_path)
return 0
if __name__ == "__main__":
exit(main())