diff --git a/README.md b/README.md index 94c4fb8..5b45061 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ flyguard/ ядро: стадии обработки, память, сч export.py 3D-рамки, время до столкновения, маркеры RViz synth.py вставка предметов трассировкой лучей tools/ обучение, оценка, разбор, полигон с аугментациями -tests/ 52 теста, запускаются без данных и без ROS +tests/ 53 теста, запускаются без данных и без ROS docs/ методика и результаты artifacts/ обученные модели ``` diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py index 9209159..b8943dd 100644 --- a/tests/test_pipeline.py +++ b/tests/test_pipeline.py @@ -1079,3 +1079,29 @@ def test_gpu_failing_to_warm_up_leaves_cpu(monkeypatch): assert "no kernel image" in fg.gpu_error finally: reset_device_cache() + + +def test_brain_view_scales_for_high_resolution(): + """Мозг для экрана в 2×: вдвое больше по обеим осям, облако из атласа + своего размера, а в целом та же картинка, что у узла.""" + cv2 = pytest.importorskip("cv2") + # в выгрузке для команды вида мозга нет — там тест пропускается + BrainHybrid = pytest.importorskip("flyguard.brain_hybrid").BrainHybrid + from flyguard.bag import Bag + from flyguard.pipeline import FlyGuard, Params + + if not DATA.exists(): + pytest.skip("нет записей") + one, two = BrainHybrid(), BrainHybrid(scale=2) + if not one.enabled: + pytest.skip("нет атласа нейронов") + fg = FlyGuard(Params(enable_looming=True)) + a = b = None + for _, pc in Bag(next(p for p in DATA.iterdir() if p.is_dir())).frames(stop=20): + res = fg.process(pc, keep_debug=True) + if res is not None: + a, b = one.render(res), two.render(res) + assert a is not None + assert b.shape == (2 * a.shape[0], 2 * a.shape[1], 3) + small = cv2.resize(b, (a.shape[1], a.shape[0]), interpolation=cv2.INTER_AREA) + assert abs(float(small.mean()) - float(a.mean())) < 0.15 * float(a.mean())