File size: 1,413 Bytes
f3bbb01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""Tests for PoseVisualizer.render_frame — single annotated still."""
import os
import numpy as np

from formscout.types import IngestResult, Pose2DResult


def _ingest(n=5, h=480, w=640):
    frames = [np.zeros((h, w, 3), dtype=np.uint8) for _ in range(n)]
    return IngestResult(frames=frames, fps=30.0, duration=n / 30.0, n_people=1, width=w, height=h)


def _pose(n=5):
    kps = []
    for i in range(n):
        kps.append({j: {"x": float(50 + j * 25), "y": float(80 + j * 18), "conf": 0.9}
                    for j in range(17)})
    return Pose2DResult(keypoints=kps, fps=30.0, confidence=0.9)


def test_render_frame_writes_png(tmp_path):
    from formscout.agents.visualizer import PoseVisualizer
    out = str(tmp_path / "key.png")
    path = PoseVisualizer().render_frame(_ingest(), _pose(), frame_idx=2,
                                         layers={"skeleton"}, caption="Deep Squat — heels elevated",
                                         out_png=out)
    assert path == out
    assert os.path.exists(out)
    assert os.path.getsize(out) > 0


def test_render_frame_bad_index_returns_none(tmp_path):
    from formscout.agents.visualizer import PoseVisualizer
    out = str(tmp_path / "key.png")
    path = PoseVisualizer().render_frame(_ingest(n=3), _pose(n=3), frame_idx=99,
                                         layers={"skeleton"}, caption="", out_png=out)
    assert path is None