fix: stabilize cold display occupancy detection

This commit is contained in:
2026-06-15 13:40:20 +08:00
parent 1059850378
commit fa2c90e250
5 changed files with 68 additions and 1 deletions

View File

@@ -10,6 +10,7 @@ from cold_display_guard.vision import (
RuntimeVisionSettings,
ZoneOccupancyDetector,
load_runtime_vision_settings,
metrics_indicate_occupied,
point_in_polygon,
)
@@ -157,6 +158,7 @@ class VisionTests(unittest.TestCase):
self.assertEqual(settings.sample_stride_pixels, 4)
self.assertEqual(settings.occupancy_mean_delta, 55.0)
self.assertEqual(settings.occupancy_absolute_dark_fraction, 0.0)
self.assertEqual(settings.occupancy_confirm_frames, 2)
self.assertEqual(settings.empty_confirm_frames, 2)
self.assertEqual(settings.trash_motion_delta, 18.0)
@@ -164,6 +166,25 @@ class VisionTests(unittest.TestCase):
self.assertEqual(settings.trash_sustained_motion_frames, 2)
self.assertEqual(settings.trash_motion_cooldown_seconds, 3)
def test_absolute_dark_fraction_can_detect_food_already_present_in_baseline(self) -> None:
settings = RuntimeVisionSettings(
occupancy_mean_delta=55,
occupancy_texture_delta=18,
occupancy_dark_fraction=0.06,
occupancy_absolute_dark_fraction=0.085,
)
occupied = metrics_indicate_occupied(
settings,
mean_delta=5.0,
texture_delta=0.5,
dark_fraction=0.09,
baseline_dark_fraction=0.10,
bright_fraction=0.0,
)
self.assertTrue(occupied)
def test_detector_can_seed_previous_baseline_and_occupancy(self) -> None:
detector = ZoneOccupancyDetector(
[Region("1", ((0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)))],