Source code for zoloto.cameras.marker

from pathlib import Path
from typing import Optional, Tuple

import cv2
from numpy import ndarray

from zoloto.calibration import CalibrationParameters, get_fake_calibration_parameters

from .base import BaseCamera


[docs]class MarkerCamera(BaseCamera): """ A camera which always returns a single, full-screen marker """ BORDER_SIZE = 40
[docs] def __init__( self, marker_id: int, marker_size: int, *, calibration_file: Optional[Path] = None ) -> None: super().__init__(calibration_file=calibration_file) self.marker_id = marker_id self.marker_size = marker_size
[docs] def get_marker_size(self, marker_id: int) -> int: return self.marker_size
[docs] def get_calibrations(self) -> Optional[CalibrationParameters]: return get_fake_calibration_parameters(self.marker_size)
[docs] def get_resolution(self) -> Tuple[int, int]: size = int(self.get_marker_size(self.marker_id) + self.BORDER_SIZE * 2) return size, size
[docs] def capture_frame(self) -> ndarray: image = cv2.aruco.drawMarker( self.marker_dictionary, self.marker_id, self.marker_size ) return cv2.copyMakeBorder( image, self.BORDER_SIZE, self.BORDER_SIZE, self.BORDER_SIZE, self.BORDER_SIZE, cv2.BORDER_CONSTANT, value=[255, 0, 0], )