Refactor triangulation stages and camera model
This commit is contained in:
+70
-1
@@ -52,7 +52,7 @@ def test_camera_structure_repr():
|
||||
camera.T = [[1], [2], [3]]
|
||||
camera.width = 640
|
||||
camera.height = 480
|
||||
camera.type = "pinhole"
|
||||
camera.model = rpt.CameraModel.PINHOLE
|
||||
|
||||
rendered = repr(camera)
|
||||
assert "Camera 1" in rendered
|
||||
@@ -100,6 +100,75 @@ def test_triangulate_repeatability():
|
||||
np.testing.assert_allclose(first, second, rtol=1e-5, atol=1e-5)
|
||||
|
||||
|
||||
def test_build_pair_candidates_exposes_cartesian_view_pairs():
|
||||
poses_2d, person_counts = rpt.pack_poses_2d(
|
||||
[
|
||||
np.zeros((2, 2, 3), dtype=np.float32),
|
||||
np.zeros((1, 2, 3), dtype=np.float32),
|
||||
np.zeros((3, 2, 3), dtype=np.float32),
|
||||
],
|
||||
joint_count=2,
|
||||
)
|
||||
|
||||
pairs = rpt.build_pair_candidates(poses_2d, person_counts)
|
||||
|
||||
assert len(pairs) == (2 * 1) + (2 * 3) + (1 * 3)
|
||||
assert (pairs[0].view1, pairs[0].view2, pairs[0].person1, pairs[0].person2) == (0, 1, 0, 0)
|
||||
assert pairs[-1].global_person2 == 5
|
||||
|
||||
|
||||
def test_triangulate_accepts_empty_previous_poses():
|
||||
poses_2d, person_counts, cameras = load_case("data/p1/sample.json", "tests/poses_p1.json")
|
||||
roomparams = np.asarray([[5.6, 6.4, 2.4], [0.0, -0.5, 1.2]], dtype=np.float32)
|
||||
empty_previous = np.zeros((0, len(JOINT_NAMES), 4), dtype=np.float32)
|
||||
|
||||
baseline = rpt.triangulate_poses(poses_2d, person_counts, cameras, roomparams, JOINT_NAMES)
|
||||
with_previous = rpt.triangulate_poses(
|
||||
poses_2d,
|
||||
person_counts,
|
||||
cameras,
|
||||
roomparams,
|
||||
JOINT_NAMES,
|
||||
empty_previous,
|
||||
)
|
||||
|
||||
np.testing.assert_allclose(with_previous, baseline, rtol=1e-5, atol=1e-5)
|
||||
|
||||
|
||||
def test_triangulate_debug_matches_final_output():
|
||||
poses_2d, person_counts, cameras = load_case("data/h1/sample.json", "tests/poses_h1.json")
|
||||
roomparams = np.asarray([[4.8, 6.0, 2.0], [0.0, 0.0, 1.0]], dtype=np.float32)
|
||||
|
||||
final_poses = rpt.triangulate_poses(poses_2d, person_counts, cameras, roomparams, JOINT_NAMES)
|
||||
trace = rpt.triangulate_debug(poses_2d, person_counts, cameras, roomparams, JOINT_NAMES)
|
||||
|
||||
np.testing.assert_allclose(trace.final_poses, final_poses, rtol=1e-5, atol=1e-5)
|
||||
assert len(trace.pairs) >= len(trace.core_proposals)
|
||||
for group in trace.grouping.groups:
|
||||
assert all(0 <= index < len(trace.core_proposals) for index in group.proposal_indices)
|
||||
for merge_indices in trace.merge.group_proposal_indices:
|
||||
assert all(0 <= index < len(trace.core_proposals) for index in merge_indices)
|
||||
|
||||
|
||||
def test_filter_pairs_with_previous_poses_returns_debug_matches():
|
||||
poses_2d, person_counts, cameras = load_case("data/p1/sample.json", "tests/poses_p1.json")
|
||||
roomparams = np.asarray([[5.6, 6.4, 2.4], [0.0, -0.5, 1.2]], dtype=np.float32)
|
||||
previous_poses = rpt.triangulate_poses(poses_2d, person_counts, cameras, roomparams, JOINT_NAMES)
|
||||
|
||||
debug = rpt.filter_pairs_with_previous_poses(
|
||||
poses_2d,
|
||||
person_counts,
|
||||
cameras,
|
||||
JOINT_NAMES,
|
||||
previous_poses,
|
||||
)
|
||||
|
||||
assert debug.used_previous_poses is True
|
||||
assert len(debug.matches) == len(rpt.build_pair_candidates(poses_2d, person_counts))
|
||||
assert len(debug.kept_pairs) == len(debug.kept_pair_indices)
|
||||
assert any(match.matched_view1 or match.matched_view2 for match in debug.matches)
|
||||
|
||||
|
||||
def test_triangulate_does_not_mutate_inputs():
|
||||
poses_2d, person_counts, cameras = load_case("data/h1/sample.json", "tests/poses_h1.json")
|
||||
roomparams = np.asarray([[4.8, 6.0, 2.0], [0.0, 0.0, 1.0]], dtype=np.float32)
|
||||
|
||||
Reference in New Issue
Block a user