Files
mt/tools/create_camera_settings.py

61 lines
2.2 KiB
Python
Raw Permalink 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())