mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	Don't zero out motion during calibration (#8163)
* don't zero out motion boxes * define detect resolution to speed up tests
This commit is contained in:
		
							parent
							
								
									fa6c6c50d0
								
							
						
					
					
						commit
						9ea10f8541
					
				@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user