From f4aa02cc19c303b0006c8b06feac4f9bb4ed7ae1 Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Wed, 7 Jul 2021 07:31:42 -0500 Subject: [PATCH] allow specific objects to be listed for a zone (fixes #1123) --- docs/docs/configuration/cameras.md | 6 ++++++ frigate/config.py | 4 ++++ frigate/object_processing.py | 3 +++ 3 files changed, 13 insertions(+) diff --git a/docs/docs/configuration/cameras.md b/docs/docs/configuration/cameras.md index e22912105..273be9b7e 100644 --- a/docs/docs/configuration/cameras.md +++ b/docs/docs/configuration/cameras.md @@ -93,6 +93,9 @@ zones: # Required: List of x,y coordinates to define the polygon of the zone. # NOTE: Coordinates can be generated at https://www.image-map.net/ coordinates: 545,1077,747,939,788,805 + # Optional: List of objects that can trigger this zone (default: all tracked objects) + objects: + - person # Optional: Zone level object filters. # NOTE: The global and camera filters are applied upstream. filters: @@ -312,6 +315,9 @@ cameras: # Required: List of x,y coordinates to define the polygon of the zone. # NOTE: Coordinates can be generated at https://www.image-map.net/ coordinates: 545,1077,747,939,788,805 + # Optional: List of objects that can trigger this zone (default: all tracked objects) + objects: + - person # Optional: Zone level object filters. # NOTE: The global and camera filters are applied upstream. filters: diff --git a/frigate/config.py b/frigate/config.py index 55b421fcd..48df20ea7 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -185,6 +185,10 @@ class ZoneConfig(BaseModel): coordinates: Union[str, List[str]] = Field( title="Coordinates polygon for the defined zone." ) + objects: List[str] = Field( + default_factory=list, + title="List of objects that can trigger the zone.", + ) _color: Optional[Tuple[int, int, int]] = PrivateAttr() _contour: np.ndarray = PrivateAttr() diff --git a/frigate/object_processing.py b/frigate/object_processing.py index 372db8ef7..660f74d87 100644 --- a/frigate/object_processing.py +++ b/frigate/object_processing.py @@ -143,6 +143,9 @@ class TrackedObject: bottom_center = (self.obj_data["centroid"][0], self.obj_data["box"][3]) # check each zone for name, zone in self.camera_config.zones.items(): + # if the zone is not for this object type, skip + if len(zone.objects) > 0 and not self.obj_data["label"] in zone.objects: + continue contour = zone.contour # check if the object is in the zone if cv2.pointPolygonTest(contour, bottom_center, False) >= 0: