Skip to content

modules.vision.devices.vendors.base_vendor

Classes Diagram

Module Dependencies

Classes

PTZAxisRange

@dataclass(frozen=True)

Constructor

PTZAxisRange(self, logical: Range, hardware: Range)

Members

logical: Range
hardware: Range

BaseVendor

Inherits from: abc.ABC

Abstract base class for all PTZ camera vendors.

Defines the interface and common utilities expected from vendor-specific PTZ implementations.
Concrete vendor classes (e.g., Hikvision) must inherit from this class
and implement the abstract methods.

Members

SPEED_RANGE: Final[Range]
PAN_RANGE: Final[Range]
TILT_RANGE: Final[Range]
ZOOM_RANGE: Final[Range]
ANGLE_TOLERANCE: Final[float]
MIN_TIME_INTERVAL: Final[int]
VALID_AXES
RATE_LIMIT_INTERVAL: Final[int]

Methods

_validate_pan(self, pan: float) → None
_clamp_pan(self, pan: float) → float
_validate_tilt(self, tilt: float) → None
_clamp_tilt(self, tilt: float) → float
_validate_zoom(self, zoom: int) → None
_clamp_zoom(self, zoom: int) → int
_validate_speed(self, speed: int) → None
_clamp_speed(self, speed: int) → int
_validate_axis(self, axis: str) → bool

Validate and normalize axis parameter.

_set_absolute_ptz_position(self, pan: float | None, tilt: float | None, zoom: int | None) → bool

@abc.abstractmethod

_set_relative_ptz_position(self, pan: float | None, tilt: float | None, zoom: int | None) → bool

@abc.abstractmethod

_start_continuous(self, pan_speed: int, tilt_speed: int) → bool

@abc.abstractmethod

is_initialized(self) → bool

@abc.abstractmethod

stop_continuous(self)

@abc.abstractmethod

get_status(self, force_update: bool = False) → dict

@abc.abstractmethod

Return the current PTZ camera status.

get_speed(self) → tuple[int, int]

@abc.abstractmethod

get_video_stream(self)

@abc.abstractmethod

Optional: subclasses can override to provide RTSP or other streams.

set_absolute_ptz_position(self, pan: float | None = None, tilt: float | None = None, zoom: int | None = None, clamp: bool = False) → bool
set_relative_ptz_position(self, pan: float | None = None, tilt: float | None = None, zoom: int | None = None) → bool
start_continuous(self, pan_speed: int = 5, tilt_speed: int = 5, clamp: bool = False)
set_3d_position(self, start_x, start_y, end_x, end_y) → bool