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: