mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-05 10:45:21 +03:00
Force birdseye cameras into standard aspect ratios
This commit is contained in:
parent
83edf9574e
commit
6d192e4274
@ -383,6 +383,13 @@ class BirdsEyeFrameManager:
|
|||||||
) -> tuple[any]:
|
) -> tuple[any]:
|
||||||
"""Calculate the optimal layout for 2+ cameras."""
|
"""Calculate the optimal layout for 2+ cameras."""
|
||||||
|
|
||||||
|
def get_standard_aspect_ratio(camera_width, camera_height) -> tuple[int, int]:
|
||||||
|
"""Ensure that only standard aspect ratios are used."""
|
||||||
|
known_aspects = [(16, 9), (9, 16), (32, 9), (12, 9), (9, 12)] # aspects are scaled to be same ratio
|
||||||
|
known_aspects_ratios = list(map(lambda aspect: aspect[0] / aspect[1], known_aspects))
|
||||||
|
closest = min(known_aspects_ratios, key=lambda x:abs(x-(camera_width / camera_height)))
|
||||||
|
return known_aspects[known_aspects_ratios.index(closest)]
|
||||||
|
|
||||||
def map_layout(row_height: int):
|
def map_layout(row_height: int):
|
||||||
"""Map the calculated layout."""
|
"""Map the calculated layout."""
|
||||||
candidate_layout = []
|
candidate_layout = []
|
||||||
@ -440,17 +447,7 @@ class BirdsEyeFrameManager:
|
|||||||
for camera in cameras_to_add:
|
for camera in cameras_to_add:
|
||||||
camera_dims = self.cameras[camera]["dimensions"].copy()
|
camera_dims = self.cameras[camera]["dimensions"].copy()
|
||||||
camera_gcd = math.gcd(camera_dims[0], camera_dims[1])
|
camera_gcd = math.gcd(camera_dims[0], camera_dims[1])
|
||||||
camera_aspect_x = camera_dims[0] / camera_gcd
|
camera_aspect_x, camera_aspect_y = get_standard_aspect_ratio(camera_dims[0] / camera_gcd, camera_dims[1] / camera_gcd)
|
||||||
camera_aspect_y = camera_dims[1] / camera_gcd
|
|
||||||
|
|
||||||
if round(camera_aspect_x / camera_aspect_y, 1) == 1.8:
|
|
||||||
# account for slightly off 16:9 cameras
|
|
||||||
camera_aspect_x = 16
|
|
||||||
camera_aspect_y = 9
|
|
||||||
elif round(camera_aspect_x / camera_aspect_y, 1) == 1.3:
|
|
||||||
# make 4:3 cameras the same relative size as 16:9
|
|
||||||
camera_aspect_x = 12
|
|
||||||
camera_aspect_y = 9
|
|
||||||
|
|
||||||
if camera_dims[1] > camera_dims[0]:
|
if camera_dims[1] > camera_dims[0]:
|
||||||
portrait = True
|
portrait = True
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user