43 lines
1.3 KiB
Python
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"
|