38 lines
1.2 KiB
Python
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
|