Source code for gbvision.utils.cameras.camera

import abc
from typing import Union

import numpy as np

from gbvision.constants.types import Number
from gbvision.utils.readable import Readable
from .camera_data import CameraData


[docs]class Camera(Readable, abc.ABC): """ An abstract class representing a camera """
[docs] @abc.abstractmethod def is_opened(self) -> bool: """ Checks if the camera can be read from :return: True if the camera can be read from, otherwise False """
[docs] @abc.abstractmethod def set_exposure(self, exposure: Union[int, float, bool]) -> bool: """ Sets the camera's exposure :param exposure: the new exposure :return: True on success, False on failure """
[docs] @abc.abstractmethod def set_auto_exposure(self, auto: Union[int, float, bool]) -> bool: """ Sets the camera's auto exposure :param auto: the new auto exposure :return: True on success, False on failure """
[docs] @abc.abstractmethod def get_data(self) -> CameraData: """ :return: this camera's constant descriptor (must be the real descriptor, can't be a copy) \ when the values of this descriptor are changed, the values of the real camera descriptor must also change """
[docs] @abc.abstractmethod def get_width(self) -> int: """ :return: The width of a frame read from this camera """
[docs] @abc.abstractmethod def get_height(self) -> int: """ :return: The height of a frame read from this camera """
@abc.abstractmethod def _set_width(self, width: int) -> None: """ Snsafe set width Only used by rescale, resize and set_frame size methods Never to be used by the programmer, only by the API :param width: new width """ @abc.abstractmethod def _set_height(self, height: int) -> None: """ Unsafe set height Only used by rescale, resize and set_frame size methods Never to be used by the programmer, only by the API :param height: new height """
[docs] @abc.abstractmethod def get_fps(self) -> Number: """ Gets the fps of this camera :return: The fps of the camera """
[docs] @abc.abstractmethod def set_fps(self, fps: Number) -> bool: """ Sets the fps for this camera :return: True on success, False otherwise """
[docs] def rescale(self, factor: float) -> None: """ Rescale the size of the frames read from this camera by a factor :param factor: The rescaling factor """ self._set_width(int(self.get_width() * factor)) self._set_height(int(self.get_height() * factor)) self.get_data().focal_length *= factor
[docs] def resize(self, fx: float, fy: float) -> None: """ Rescale the size of the frames read from this camera by different width and height factors :param fx: The width factor :param fy: The height factor """ self._set_width(int(self.get_width() * fx)) self._set_height(int(self.get_height() * fy)) self.get_data().focal_length *= np.sqrt(fx * fy)
[docs] def set_frame_size(self, width: int, height: int) -> None: """ Reset the width and height of frames read from this camera to given values :param width: The new width :param height: The new height """ old_width, old_height = self.get_width(), self.get_height() self._set_height(height) self._set_width(width) self.get_data().focal_length *= np.sqrt(width * height / (old_width * old_height))