mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-30 02:32:04 +08:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			dependabot
			...
			update_cal
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 91ac4c4cee | ||
|   | b85c488d7e | 
| @@ -20,3 +20,7 @@ class MotionDetector(ABC): | ||||
|     @abstractmethod | ||||
|     def detect(self, frame): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def is_calibrating(self): | ||||
|         pass | ||||
|   | ||||
| @@ -38,6 +38,9 @@ class FrigateMotionDetector(MotionDetector): | ||||
|         self.threshold = threshold | ||||
|         self.contour_area = contour_area | ||||
|  | ||||
|     def is_calibrating(self): | ||||
|         return False | ||||
|  | ||||
|     def detect(self, frame): | ||||
|         motion_boxes = [] | ||||
|  | ||||
|   | ||||
| @@ -49,6 +49,9 @@ class ImprovedMotionDetector(MotionDetector): | ||||
|         self.contrast_values[:, 1:2] = 255 | ||||
|         self.contrast_values_index = 0 | ||||
|  | ||||
|     def is_calibrating(self): | ||||
|         return self.calibrating | ||||
|  | ||||
|     def detect(self, frame): | ||||
|         motion_boxes = [] | ||||
|  | ||||
| @@ -141,7 +144,6 @@ class ImprovedMotionDetector(MotionDetector): | ||||
|  | ||||
|         # if calibrating or the motion contours are > 80% of the image area (lightning, ir, ptz) recalibrate | ||||
|         if self.calibrating or pct_motion > self.config.lightning_threshold: | ||||
|             motion_boxes = [] | ||||
|             self.calibrating = True | ||||
|  | ||||
|         if self.save_images: | ||||
|   | ||||
| @@ -1027,7 +1027,12 @@ class TestConfig(unittest.TestCase): | ||||
|                                 "roles": ["detect"], | ||||
|                             }, | ||||
|                         ] | ||||
|                     } | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 720, | ||||
|                         "width": 1280, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1082,6 +1087,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "snapshots": { | ||||
|                         "height": 100, | ||||
|                     }, | ||||
| @@ -1107,7 +1117,12 @@ class TestConfig(unittest.TestCase): | ||||
|                                 "roles": ["detect"], | ||||
|                             }, | ||||
|                         ] | ||||
|                     } | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1132,6 +1147,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "snapshots": { | ||||
|                         "height": 150, | ||||
|                         "enabled": True, | ||||
| @@ -1160,6 +1180,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1181,7 +1206,12 @@ class TestConfig(unittest.TestCase): | ||||
|                                 "roles": ["detect"], | ||||
|                             }, | ||||
|                         ] | ||||
|                     } | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1205,6 +1235,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "rtmp": { | ||||
|                         "enabled": True, | ||||
|                     }, | ||||
| @@ -1234,6 +1269,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1257,6 +1297,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1278,7 +1323,12 @@ class TestConfig(unittest.TestCase): | ||||
|                                 "roles": ["detect"], | ||||
|                             }, | ||||
|                         ] | ||||
|                     } | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1302,6 +1352,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "live": { | ||||
|                         "quality": 7, | ||||
|                     }, | ||||
| @@ -1329,6 +1384,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1350,7 +1410,12 @@ class TestConfig(unittest.TestCase): | ||||
|                                 "roles": ["detect"], | ||||
|                             }, | ||||
|                         ] | ||||
|                     } | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1375,6 +1440,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "timestamp_style": {"position": "bl", "thickness": 4}, | ||||
|                 } | ||||
|             }, | ||||
| @@ -1400,6 +1470,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1423,6 +1498,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1450,6 +1530,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ], | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                 } | ||||
|             }, | ||||
|         } | ||||
| @@ -1475,6 +1560,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             }, | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "zones": { | ||||
|                         "steps": { | ||||
|                             "coordinates": "0,0,0,0", | ||||
| @@ -1546,6 +1636,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             {"path": "rtsp://10.0.0.1:554/video", "roles": ["detect"]} | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "onvif": {"autotracking": {"movement_weights": "1.23, 2.34, 0.50"}}, | ||||
|                 } | ||||
|             }, | ||||
| @@ -1569,6 +1664,11 @@ class TestConfig(unittest.TestCase): | ||||
|                             {"path": "rtsp://10.0.0.1:554/video", "roles": ["detect"]} | ||||
|                         ] | ||||
|                     }, | ||||
|                     "detect": { | ||||
|                         "height": 1080, | ||||
|                         "width": 1920, | ||||
|                         "fps": 5, | ||||
|                     }, | ||||
|                     "onvif": {"autotracking": {"movement_weights": "1.234, 2.345a"}}, | ||||
|                 } | ||||
|             }, | ||||
|   | ||||
| @@ -21,7 +21,6 @@ from frigate.log import LogPipe | ||||
| from frigate.motion import MotionDetector | ||||
| from frigate.motion.improved_motion import ImprovedMotionDetector | ||||
| from frigate.object_detection import RemoteObjectDetector | ||||
| from frigate.ptz.autotrack import ptz_moving_at_frame_time | ||||
| from frigate.track import ObjectTracker | ||||
| from frigate.track.norfair_tracker import NorfairTracker | ||||
| from frigate.types import PTZMetricsTypes | ||||
| @@ -777,19 +776,8 @@ def process_frames( | ||||
|             logger.info(f"{camera_name}: frame {frame_time} is not in memory store.") | ||||
|             continue | ||||
|  | ||||
|         # look for motion if enabled and ptz is not moving | ||||
|         # ptz_moving_at_frame_time() always returns False for | ||||
|         # non ptz/autotracking cameras | ||||
|         motion_boxes = ( | ||||
|             motion_detector.detect(frame) | ||||
|             if motion_enabled.value | ||||
|             and not ptz_moving_at_frame_time( | ||||
|                 frame_time, | ||||
|                 ptz_metrics["ptz_start_time"].value, | ||||
|                 ptz_metrics["ptz_stop_time"].value, | ||||
|             ) | ||||
|             else [] | ||||
|         ) | ||||
|         # look for motion if enabled | ||||
|         motion_boxes = motion_detector.detect(frame) if motion_enabled.value else [] | ||||
|  | ||||
|         regions = [] | ||||
|         consolidated_detections = [] | ||||
| @@ -814,8 +802,10 @@ def process_frames( | ||||
|                 ) | ||||
|                 # and it hasn't disappeared | ||||
|                 and object_tracker.disappeared[obj["id"]] == 0 | ||||
|                 # and it doesn't overlap with any current motion boxes | ||||
|                 and not intersects_any(obj["box"], motion_boxes) | ||||
|                 # and it doesn't overlap with any current motion boxes when not calibrating | ||||
|                 and not intersects_any( | ||||
|                     obj["box"], [] if motion_detector.is_calibrating() else motion_boxes | ||||
|                 ) | ||||
|             ] | ||||
|  | ||||
|             # get tracked object boxes that aren't stationary | ||||
| @@ -825,7 +815,10 @@ def process_frames( | ||||
|                 if obj["id"] not in stationary_object_ids | ||||
|             ] | ||||
|  | ||||
|             combined_boxes = motion_boxes + tracked_object_boxes | ||||
|             combined_boxes = tracked_object_boxes | ||||
|             # only add in the motion boxes when not calibrating | ||||
|             if not motion_detector.is_calibrating(): | ||||
|                 combined_boxes += motion_boxes | ||||
|  | ||||
|             cluster_candidates = get_cluster_candidates( | ||||
|                 frame_shape, region_min_size, combined_boxes | ||||
|   | ||||
		Reference in New Issue
	
	Block a user