forked from Github/frigate
Autotracker: Basic zooming and moves with velocity estimation (#7713)
* don't zoom if camera doesn't support it * basic zooming * make zooming configurable * zooming docs * optional zooming in camera status * Use absolute instead of relative zooming * increase edge threshold * zoom considering object area * bugfixes * catch onvif zooming errors * relative zooming option for dahua/amcrest cams * docs * docs * don't make small movements * remove old logger statement * fix small movements * use enum in config for zooming * fix formatting * empty move queue first * clear tracked object before waiting for stop * use velocity estimation for movements * docs updates * add tests * typos * recalc every 50 moves * adjust zoom based on estimate box if calibrated * tweaks for fast objects and large movements * use real time for calibration and add info logging * docs updates * remove area scale * Add example video to docs * zooming font header size the same as the others * log an error if a ptz doesn't report a MoveStatus * debug logging for onvif service capabilities * ensure camera supports ONVIF MoveStatus
This commit is contained in:
@@ -138,8 +138,20 @@ class MqttConfig(FrigateBaseModel):
|
||||
return v
|
||||
|
||||
|
||||
class ZoomingModeEnum(str, Enum):
|
||||
disabled = "disabled"
|
||||
absolute = "absolute"
|
||||
relative = "relative"
|
||||
|
||||
|
||||
class PtzAutotrackConfig(FrigateBaseModel):
|
||||
enabled: bool = Field(default=False, title="Enable PTZ object autotracking.")
|
||||
calibrate_on_startup: bool = Field(
|
||||
default=False, title="Perform a camera calibration when Frigate starts."
|
||||
)
|
||||
zooming: ZoomingModeEnum = Field(
|
||||
default=ZoomingModeEnum.disabled, title="Autotracker zooming mode."
|
||||
)
|
||||
track: List[str] = Field(default=DEFAULT_TRACKED_OBJECTS, title="Objects to track.")
|
||||
required_zones: List[str] = Field(
|
||||
default_factory=list,
|
||||
@@ -152,6 +164,27 @@ class PtzAutotrackConfig(FrigateBaseModel):
|
||||
timeout: int = Field(
|
||||
default=10, title="Seconds to delay before returning to preset."
|
||||
)
|
||||
movement_weights: Optional[Union[float, List[float]]] = Field(
|
||||
default=[],
|
||||
title="Internal value used for PTZ movements based on the speed of your camera's motor.",
|
||||
)
|
||||
|
||||
@validator("movement_weights", pre=True)
|
||||
def validate_weights(cls, v):
|
||||
if v is None:
|
||||
return None
|
||||
|
||||
if isinstance(v, str):
|
||||
weights = list(map(float, v.split(",")))
|
||||
elif isinstance(v, list):
|
||||
weights = [float(val) for val in v]
|
||||
else:
|
||||
raise ValueError("Invalid type for movement_weights")
|
||||
|
||||
if len(weights) != 3:
|
||||
raise ValueError("movement_weights must have exactly 3 floats")
|
||||
|
||||
return weights
|
||||
|
||||
|
||||
class OnvifConfig(FrigateBaseModel):
|
||||
|
||||
Reference in New Issue
Block a user