move_detect/tests/test_runtime.py

43 lines
1.3 KiB
Python

import numpy as np
from edge.config import load_config
from edge.models import Person, BBox, Keypoint
from edge.detectors.zone import Zone
from edge.runtime import PipelineRuntime
def _lying_person():
kps = [Keypoint(150, 300, 0.9) for _ in range(17)]
kps[5] = Keypoint(100, 300, 0.9); kps[6] = Keypoint(100, 310, 0.9)
kps[11] = Keypoint(200, 300, 0.9); kps[12] = Keypoint(200, 310, 0.9)
kps[0] = Keypoint(90, 320, 0.9)
return Person(BBox(90, 290, 210, 320), kps)
class _Source:
def read(self): return True, np.full((360, 640, 3), 128, np.uint8)
class _Pose:
def infer(self, frame): return [_lying_person()]
class _Sink:
def __init__(self): self.events = []
def try_send(self, e, snaps): self.events.append(e); return True
def test_step_runs_pipeline_and_emits_fall():
cfg = load_config({"FALL_PRONE_S": "0.5"})
sink = _Sink()
rt = PipelineRuntime(cfg, _Source(), _Pose(), sink)
rt.step(now=0.0)
rt.step(now=0.6)
from edge.events import EventType
assert any(e.event_type == EventType.FALL for e in sink.events)
def test_apply_zones_hotswaps():
cfg = load_config({})
rt = PipelineRuntime(cfg, _Source(), _Pose(), _Sink())
rt.apply_zones([Zone("z1", "restricted", [(0, 0), (9, 0), (9, 9)])])
assert rt.zone_detector.zones[0].zone_id == "z1"