mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-08 12:15:25 +03:00
Implement scaling factor
This commit is contained in:
parent
4b7977bf8d
commit
72e8551c62
@ -528,6 +528,13 @@ class BirdseyeModeEnum(str, Enum):
|
|||||||
return list(cls)[index]
|
return list(cls)[index]
|
||||||
|
|
||||||
|
|
||||||
|
class BirdseyeLayoutConfig(FrigateBaseModel):
|
||||||
|
scaling_factor: float = Field(
|
||||||
|
default=2.0, title="Birdseye Scaling Factor", gt=1.0, le=5.0
|
||||||
|
)
|
||||||
|
max_cameras: Optional[int] = Field(default=None, title="Max cameras")
|
||||||
|
|
||||||
|
|
||||||
class BirdseyeConfig(FrigateBaseModel):
|
class BirdseyeConfig(FrigateBaseModel):
|
||||||
enabled: bool = Field(default=True, title="Enable birdseye view.")
|
enabled: bool = Field(default=True, title="Enable birdseye view.")
|
||||||
restream: bool = Field(default=False, title="Restream birdseye via RTSP.")
|
restream: bool = Field(default=False, title="Restream birdseye via RTSP.")
|
||||||
@ -542,6 +549,9 @@ class BirdseyeConfig(FrigateBaseModel):
|
|||||||
mode: BirdseyeModeEnum = Field(
|
mode: BirdseyeModeEnum = Field(
|
||||||
default=BirdseyeModeEnum.objects, title="Tracking mode."
|
default=BirdseyeModeEnum.objects, title="Tracking mode."
|
||||||
)
|
)
|
||||||
|
layout: BirdseyeLayoutConfig = Field(
|
||||||
|
default_factory=BirdseyeLayoutConfig, title="Birdseye Layout Config"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# uses BaseModel because some global attributes are not available at the camera level
|
# uses BaseModel because some global attributes are not available at the camera level
|
||||||
|
|||||||
@ -76,7 +76,13 @@ def get_canvas_shape(width: int, height: int) -> tuple[int, int]:
|
|||||||
|
|
||||||
|
|
||||||
class Canvas:
|
class Canvas:
|
||||||
def __init__(self, canvas_width: int, canvas_height: int) -> None:
|
def __init__(
|
||||||
|
self,
|
||||||
|
canvas_width: int,
|
||||||
|
canvas_height: int,
|
||||||
|
scaling_factor: int,
|
||||||
|
) -> None:
|
||||||
|
self.scaling_factor = scaling_factor
|
||||||
gcd = math.gcd(canvas_width, canvas_height)
|
gcd = math.gcd(canvas_width, canvas_height)
|
||||||
self.aspect = get_standard_aspect_ratio(
|
self.aspect = get_standard_aspect_ratio(
|
||||||
(canvas_width / gcd), (canvas_height / gcd)
|
(canvas_width / gcd), (canvas_height / gcd)
|
||||||
@ -90,7 +96,7 @@ class Canvas:
|
|||||||
return (self.aspect[0] * coefficient, self.aspect[1] * coefficient)
|
return (self.aspect[0] * coefficient, self.aspect[1] * coefficient)
|
||||||
|
|
||||||
def get_coefficient(self, camera_count: int) -> int:
|
def get_coefficient(self, camera_count: int) -> int:
|
||||||
return self.coefficient_cache.get(camera_count, 2)
|
return self.coefficient_cache.get(camera_count, self.scaling_factor)
|
||||||
|
|
||||||
def set_coefficient(self, camera_count: int, coefficient: int) -> None:
|
def set_coefficient(self, camera_count: int, coefficient: int) -> None:
|
||||||
self.coefficient_cache[camera_count] = coefficient
|
self.coefficient_cache[camera_count] = coefficient
|
||||||
@ -278,7 +284,7 @@ class BirdsEyeFrameManager:
|
|||||||
self.frame_shape = (height, width)
|
self.frame_shape = (height, width)
|
||||||
self.yuv_shape = (height * 3 // 2, width)
|
self.yuv_shape = (height * 3 // 2, width)
|
||||||
self.frame = np.ndarray(self.yuv_shape, dtype=np.uint8)
|
self.frame = np.ndarray(self.yuv_shape, dtype=np.uint8)
|
||||||
self.canvas = Canvas(width, height)
|
self.canvas = Canvas(width, height, config.birdseye.layout.scaling_factor)
|
||||||
self.stop_event = stop_event
|
self.stop_event = stop_event
|
||||||
self.camera_metrics = camera_metrics
|
self.camera_metrics = camera_metrics
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user