bookmark/tests/test_motion_stop_strategy.py

38 lines
1.2 KiB
Python

import numpy as np
from bookmark.capture_strategies.motion_stop import MotionStopStrategy
def make_frame(value: int) -> np.ndarray:
return np.full((10, 10, 3), value, dtype=np.uint8)
def test_does_not_fire_while_frames_keep_changing():
strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=3)
for value in range(0, 50, 10):
assert strategy.observe(make_frame(value)) is False
def test_fires_after_stable_frames():
strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=3)
strategy.observe(make_frame(100))
strategy.observe(make_frame(100))
strategy.observe(make_frame(100))
assert strategy.observe(make_frame(100)) is True
def test_fires_only_once():
strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=2)
strategy.observe(make_frame(50))
strategy.observe(make_frame(50))
assert strategy.observe(make_frame(50)) is True
assert strategy.observe(make_frame(50)) is False
def test_reset_clears_state():
strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=2)
strategy.observe(make_frame(50))
strategy.observe(make_frame(50))
strategy.observe(make_frame(50))
strategy.reset()
assert strategy.observe(make_frame(50)) is False