Source code for nicetoolbox.utils.calibration_gui.calib_io

import json
import os

import numpy as np


[docs]def get_calibration_dict(matrix_dict): calibration_dict = {} for camera_name, camera_dict in matrix_dict.items(): calibration_dict.update( { camera_name: dict( camera_name=camera_dict["name"], image_size=camera_dict["size"], intrinsic_matrix=camera_dict["K"], distortions=camera_dict["d"].squeeze(), rotation_matrix=camera_dict["R"], rvec=camera_dict["rvec"], translation=camera_dict["t"].squeeze(), extrinsics_matrix=camera_dict["Rt"], projection_matrix=camera_dict["P"], ) } ) return calibration_dict
[docs]def default(obj): # serialize numpy array for saving to json if type(obj).__module__ == np.__name__: if isinstance(obj, np.ndarray): return obj.tolist() return obj.item() raise TypeError("Unknown type:", type(obj))
[docs]def save_calibration_npz_json(entries, matrix_dict): calibration = {} # convert matrix_dict for session_name, session_data in matrix_dict.items(): for sequence_name, sequence_data in session_data.items(): name = "__".join([word for word in [session_name, sequence_name] if word != "None"]) calibration[name] = get_calibration_dict(sequence_data) # save to npz out_file_npz = os.path.join(entries["output_directory"].get(), "calibrations.npz") np.savez_compressed(out_file_npz, **calibration) # save to json out_file_json = os.path.join(entries["output_directory"].get(), "calibrations.json") with open(out_file_json, "w") as file: json.dump(calibration, file, default=default) entries["message"].set(f"Saved successfully to '{out_file_npz}'.")