yoloserv/modules/paravision/liveness/tests/test_utils.py

101 lines
3.1 KiB
Python

import os
import pyrealsense2 as rs
import numpy as np
from unittest import TestCase
from ..session import Liveness, CameraParams
from ..utils import estimate_depth_bounding_box, expand_bbox_to_edge_and_crop
from ..types import Rectangle
ASSETS_PATH = os.path.join(os.path.dirname(__file__), "assets")
liveness_session = None
expected_projected_bounding_box = [
514.62513733,
267.85284424,
726.44473267,
551.44799805,
]
class TestUtils(TestCase):
@classmethod
def setUpClass(cls):
global liveness_session
liveness_session = Liveness()
def setUp(self):
self.liveness_session = liveness_session
def test_estimate_depth_bounding_box(self):
bounding_box = Rectangle(
528.551139831543, 234.36917863815668, 839.0621948242188, 642.2044240250417
)
depth_intrinsic = rs.intrinsics()
depth_intrinsic.width = 1280
depth_intrinsic.height = 720
depth_intrinsic.ppx = 640.387
depth_intrinsic.ppy = 357.513
depth_intrinsic.fx = 635.811
depth_intrinsic.fy = 635.811
depth_intrinsic.model = rs.distortion.brown_conrady
depth_intrinsic.coeffs = [0, 0, 0, 0, 0]
color_intrinsic = rs.intrinsics()
color_intrinsic.width = 1280
color_intrinsic.height = 720
color_intrinsic.ppx = 647.024
color_intrinsic.ppy = 356.927
color_intrinsic.fx = 922.169
color_intrinsic.fy = 922.476
color_intrinsic.model = rs.distortion.inverse_brown_conrady
color_intrinsic.coeffs = [0, 0, 0, 0, 0]
color_depth_extr = rs.extrinsics()
color_depth_extr.rotation = [
0.999945,
0.0103263,
0.00163071,
-0.0103348,
0.999932,
0.00530964,
-0.00157577,
-0.0053262,
0.999985,
]
color_depth_extr.translation = [-0.0147758, -0.000159923, -0.000372309]
camera_params = CameraParams(depth_intrinsic, color_intrinsic, color_depth_extr)
proj_depth_bb = estimate_depth_bounding_box(bounding_box, camera_params)
self.assertIsNotNone(
proj_depth_bb, msg="unexpected or none projected depth bounding box"
)
self.assertTrue(
np.allclose(proj_depth_bb, expected_projected_bounding_box),
msg="invalid projected depth bounding box",
)
def test_expand_bbox_to_edge_and_crop(self):
depth_frame = liveness_session.load_depth_data_from_file(
os.path.join(ASSETS_PATH, "depth.txt")
)
expanded_cropped_frame = expand_bbox_to_edge_and_crop(
depth_frame, expected_projected_bounding_box
)
expected_cropped_depth_frame = liveness_session.load_depth_data_from_file(
os.path.join(ASSETS_PATH, "cropped_depth.txt")
)
self.assertIsNotNone(
expanded_cropped_frame, msg="unexpected cropped depth frame"
)
self.assertTrue(
np.array_equal(expanded_cropped_frame, expected_cropped_depth_frame),
msg="invalid cropped depth frame",
)