| | |
| | |
| | |
| | |
| | |
| |
|
| | import json |
| | import cv2 |
| | import numpy as np |
| | import copy |
| | import importlib |
| | from typing import Any, Dict |
| |
|
| | def load_module(module_name, class_name=None, silent: bool = False): |
| | module = importlib.import_module(module_name) |
| | return getattr(module, class_name) if class_name else module |
| |
|
| |
|
| | def load_class(class_name): |
| | return load_module(*class_name.rsplit(".", 1)) |
| |
|
| |
|
| | def load_from_config(config, **kwargs): |
| | """Instantiate an object given a config and arguments.""" |
| | assert "class_name" in config and "module_name" not in config |
| | config = copy.deepcopy(config) |
| | class_name = config.pop("class_name") |
| | object_class = load_class(class_name) |
| | return object_class(**config, **kwargs) |
| |
|
| |
|
| | def load_opencv_calib(extrin_path, intrin_path): |
| | cameras = {} |
| |
|
| | fse = cv2.FileStorage() |
| | fse.open(extrin_path, cv2.FileStorage_READ) |
| |
|
| | fsi = cv2.FileStorage() |
| | fsi.open(intrin_path, cv2.FileStorage_READ) |
| |
|
| | names = [ |
| | fse.getNode("names").at(c).string() for c in range(fse.getNode("names").size()) |
| | ] |
| |
|
| | for camera in names: |
| | rot = fse.getNode(f"R_{camera}").mat() |
| | R = fse.getNode(f"Rot_{camera}").mat() |
| | T = fse.getNode(f"T_{camera}").mat() |
| | R_pred = cv2.Rodrigues(rot)[0] |
| | assert np.all(np.isclose(R_pred, R)) |
| | K = fsi.getNode(f"K_{camera}").mat() |
| | cameras[camera] = { |
| | "Rt": np.concatenate([R, T], axis=1).astype(np.float32), |
| | "K": K.astype(np.float32), |
| | } |
| | return cameras |