Spaces:
Running
on
L4
Running
on
L4
# Copyright (c) Meta Platforms, Inc. and affiliates. | |
# All rights reserved. | |
# | |
# This source code is licensed under the license found in the | |
# LICENSE file in the root directory of this source tree. | |
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 |