import numpy as np from openpilot.common.transformations.orientation import rot_from_euler from openpilot.common.transformations.camera import get_view_frame_from_calib_frame, view_frame_from_device_frame # segnet SEGNET_SIZE = (512, 384) # MED model MEDMODEL_INPUT_SIZE = (512, 256) MEDMODEL_YUV_SIZE = (MEDMODEL_INPUT_SIZE[0], MEDMODEL_INPUT_SIZE[1] * 3 // 2) MEDMODEL_CY = 47.6 medmodel_fl = 910.0 medmodel_intrinsics = np.array([ [medmodel_fl, 0.0, 0.5 * MEDMODEL_INPUT_SIZE[0]], [0.0, medmodel_fl, MEDMODEL_CY], [0.0, 0.0, 1.0]]) # BIG model BIGMODEL_INPUT_SIZE = (1024, 512) BIGMODEL_YUV_SIZE = (BIGMODEL_INPUT_SIZE[0], BIGMODEL_INPUT_SIZE[1] * 3 // 2) bigmodel_fl = 910.0 bigmodel_intrinsics = np.array([ [bigmodel_fl, 0.0, 0.5 * BIGMODEL_INPUT_SIZE[0]], [0.0, bigmodel_fl, 256 + MEDMODEL_CY], [0.0, 0.0, 1.0]]) # SBIG model (big model with the size of small model) SBIGMODEL_INPUT_SIZE = (512, 256) SBIGMODEL_YUV_SIZE = (SBIGMODEL_INPUT_SIZE[0], SBIGMODEL_INPUT_SIZE[1] * 3 // 2) sbigmodel_fl = 455.0 sbigmodel_intrinsics = np.array([ [sbigmodel_fl, 0.0, 0.5 * SBIGMODEL_INPUT_SIZE[0]], [0.0, sbigmodel_fl, 0.5 * (256 + MEDMODEL_CY)], [0.0, 0.0, 1.0]]) bigmodel_frame_from_calib_frame = np.dot(bigmodel_intrinsics, get_view_frame_from_calib_frame(0, 0, 0, 0)) sbigmodel_frame_from_calib_frame = np.dot(sbigmodel_intrinsics, get_view_frame_from_calib_frame(0, 0, 0, 0)) medmodel_frame_from_calib_frame = np.dot(medmodel_intrinsics, get_view_frame_from_calib_frame(0, 0, 0, 0)) medmodel_frame_from_bigmodel_frame = np.dot(medmodel_intrinsics, np.linalg.inv(bigmodel_intrinsics)) calib_from_medmodel = np.linalg.inv(medmodel_frame_from_calib_frame[:, :3]) calib_from_sbigmodel = np.linalg.inv(sbigmodel_frame_from_calib_frame[:, :3]) # This function is verified to give similar results to xx.uncommon.utils.transform_img def get_warp_matrix(device_from_calib_euler: np.ndarray, intrinsics: np.ndarray, bigmodel_frame: bool = False) -> np.ndarray: calib_from_model = calib_from_sbigmodel if bigmodel_frame else calib_from_medmodel device_from_calib = rot_from_euler(device_from_calib_euler) camera_from_calib = intrinsics @ view_frame_from_device_frame @ device_from_calib warp_matrix: np.ndarray = camera_from_calib @ calib_from_model return warp_matrix