feat: 添加多摄像头测试工具,支持实时预览和快照功能

This commit is contained in:
2026-08-06 15:01:17 +08:00
parent bb672e3f39
commit f6b484d168
3 changed files with 572 additions and 0 deletions
@@ -0,0 +1,2 @@
*
!.gitignore
@@ -0,0 +1,76 @@
from __future__ import annotations
import importlib.util
from pathlib import Path
import sys
import pytest
MODULE_PATH = (
Path(__file__).resolve().parents[1]
/ "tools"
/ "realsense_multi_camera_test.py"
)
SPEC = importlib.util.spec_from_file_location("realsense_multi_camera_test", MODULE_PATH)
assert SPEC is not None and SPEC.loader is not None
camera_test = importlib.util.module_from_spec(SPEC)
sys.modules[SPEC.name] = camera_test
SPEC.loader.exec_module(camera_test)
def devices() -> list[camera_test.DeviceInfo]:
return [
camera_test.DeviceInfo("Intel RealSense D405", "D405", "412622272532", "3.2"),
camera_test.DeviceInfo("Intel RealSense D455", "D455", "234222303366", "3.2"),
camera_test.DeviceInfo("Intel RealSense D405", "D405", "260322272273", "3.2"),
]
def test_assigns_camera_roles_with_and_without_left_serial() -> None:
unidentified = camera_test.assign_camera_roles(devices(), None)
assert [camera.role for camera in unidentified] == ["GLOBAL", "D405-A", "D405-B"]
assert [camera.serial for camera in unidentified[1:]] == ["260322272273", "412622272532"]
identified = camera_test.assign_camera_roles(devices(), "412622272532")
assert {camera.role: camera.serial for camera in identified} == {
"GLOBAL": "234222303366",
"LEFT": "412622272532",
"RIGHT": "260322272273",
}
def test_rejects_invalid_camera_selection() -> None:
with pytest.raises(ValueError, match="左臂序列号"):
camera_test.assign_camera_roles(devices(), "missing")
with pytest.raises(ValueError, match="2 台 D405 和 1 台 D455"):
camera_test.assign_camera_roles(devices()[:-1], None)
def test_counts_frame_number_gaps() -> None:
stats = camera_test.FrameStats(target_fps=30, start_time=0.0)
stats.update(10, 0.0)
stats.update(11, 1.0 / 30.0)
stats.update(14, 2.0 / 30.0)
assert stats.received == 3
assert stats.dropped == 2
assert stats.drop_rate == pytest.approx(0.4)
assert stats.average_fps(2.0 / 30.0) == pytest.approx(30.0)
def test_snapshot_names_follow_camera_roles() -> None:
identified = camera_test.assign_camera_roles(devices(), "412622272532")
assert camera_test.snapshot_filenames(identified) == {
"234222303366": "global.png",
"412622272532": "left.png",
"260322272273": "right.png",
}
unidentified = camera_test.assign_camera_roles(devices(), None)
assert camera_test.snapshot_filenames(unidentified) == {
"234222303366": "global.png",
"260322272273": "d405_260322272273.png",
"412622272532": "d405_412622272532.png",
}