diff --git a/config/back-mask.bmp b/config/back-mask.bmp new file mode 100644 index 000000000..b64353d12 Binary files /dev/null and b/config/back-mask.bmp differ diff --git a/config/config.yml b/config/config.yml index 53ee9d20b..a0d38c33d 100644 --- a/config/config.yml +++ b/config/config.yml @@ -13,6 +13,7 @@ cameras: # values that begin with a "$" will be replaced with environment variable password: $RTSP_PASSWORD path: /cam/realmonitor?channel=1&subtype=2 + mask: back-mask.bmp regions: - size: 350 x_offset: 0 @@ -26,24 +27,3 @@ cameras: x_offset: 750 y_offset: 250 min_person_area: 2000 - back2: - rtsp: - user: viewer - host: 10.0.10.10 - port: 554 - # values that begin with a "$" will be replaced with environment variable - password: $RTSP_PASSWORD - path: /cam/realmonitor?channel=1&subtype=2 - regions: - - size: 350 - x_offset: 0 - y_offset: 300 - min_person_area: 5000 - - size: 400 - x_offset: 350 - y_offset: 250 - min_person_area: 2000 - - size: 400 - x_offset: 750 - y_offset: 250 - min_person_area: 2000 \ No newline at end of file diff --git a/frigate/video.py b/frigate/video.py index 41b77f9ba..e35b6d8cb 100644 --- a/frigate/video.py +++ b/frigate/video.py @@ -170,6 +170,13 @@ class Camera: # start a thread to publish object scores (currently only person) mqtt_publisher = MqttObjectPublisher(self.mqtt_client, self.mqtt_topic_prefix, self.objects_parsed, self.detected_objects) mqtt_publisher.start() + + # load in the mask for person detection + if 'mask' in self.config: + self.mask = cv2.imread("/config/{}".format(self.config['mask']), cv2.IMREAD_GRAYSCALE) + else: + self.mask = np.zeros((self.frame_shape[0], self.frame_shape[1], 1), np.uint8) + self.mask[:] = 255 def start(self): self.capture_process.start() @@ -206,6 +213,15 @@ class Camera: # detected person, don't add it to detected objects if region and region['min_person_area'] > person_area: continue + + # compute the coordinates of the person and make sure + # the location isnt outide the bounds of the image (can happen from rounding) + y_location = min(int(obj['ymax']), len(self.mask)-1) + x_location = min(int((obj['xmax']-obj['xmin'])/2.0), len(self.mask[0])-1) + + # if the person is in a masked location, continue + if self.mask[y_location][x_location] == [0]: + continue self.detected_objects.append(obj)