Files
frigate/frigate/test/test_zone_coordinates.py
T
El Mehdi TAFIKandGitHub c9f7cc8165
CI / AMD64 Build (push) Canceled after 0s
CI / AMD64 Smoke Test (push) Canceled after 0s
CI / ARM Build (push) Canceled after 0s
CI / Jetson Jetpack 6 (push) Canceled after 0s
CI / AMD64 Extra Build (push) Canceled after 0s
CI / ARM Extra Build (push) Canceled after 0s
CI / Synaptics Build (push) Canceled after 0s
CI / Assemble and push default build (push) Canceled after 0s
Compare mask coordinates numerically (#24666)
* Compare mask coordinates numerically

* Fix zone coordinate comparisons and normalize mask examples

* Fix validation errors for malformed zone coordinates
2026-10-16 07:53:31 -05:00

52 lines
2.0 KiB
Python

"""Tests for relative and legacy zone coordinates."""
import unittest
from itertools import product
import numpy as np
from frigate.config.camera.zone import ZoneConfig
class TestZoneCoordinates(unittest.TestCase):
def test_relative_coordinate_precision(self):
expected = np.array([[0, 0], [200, 0], [200, 40], [0, 40]])
for edge, as_list in product(
("1", "1.0", "1.00", "1.000", "1.000000"), (False, True)
):
points = ["0,0", f"{edge},0", f"{edge},0.4", "0,0.4"]
coordinates = points if as_list else ",".join(points)
with self.subTest(coordinates=coordinates):
zone = ZoneConfig(coordinates=coordinates)
zone.generate_contour((100, 200))
np.testing.assert_array_equal(zone.contour, expected)
self.assertEqual(zone.coordinates, coordinates)
def test_invalid_coordinates(self):
for points in (
["invalid,0", "1,0", "1,0.4", "0,0.4"],
["0,invalid", "1,0", "1,0.4", "0,0.4"],
):
for coordinates in (",".join(points), points):
with self.subTest(coordinates=coordinates):
zone = ZoneConfig(coordinates=coordinates)
with self.assertRaisesRegex(
ValueError, "Invalid coordinates found in configuration file"
):
zone.generate_contour((100, 200))
def test_pixel_coordinates(self):
points = ["0,0", "200,0", "200,40", "0,40"]
expected = np.array([[0, 0], [200, 0], [200, 40], [0, 40]])
for coordinates in (",".join(points), points):
with self.subTest(coordinates=coordinates):
zone = ZoneConfig(coordinates=coordinates)
zone.generate_contour((100, 200))
np.testing.assert_array_equal(zone.contour, expected)
self.assertEqual(zone.coordinates, "0.0,0.0,1.0,0.0,1.0,0.4,0.0,0.4")