herosdevices.hardware.allied_vision.vimba_camera ================================================ .. py:module:: herosdevices.hardware.allied_vision.vimba_camera .. autoapi-nested-parse:: Driver for cameras based on the Allied Vision VimbaX library. Module Contents --------------- .. py:data:: DEFAULT_FEATURE_VISIBLIY .. py:data:: DEFAULT_CONFIG .. py:class:: VimbaCompatibleCamera(cam_id: str, config_dict: dict, default_config: str | None = None, reset_to_continuous: bool = False, lib_path: str | None = None) Bases: :py:obj:`herosdevices.core.templates.camera.CameraTemplate` A class to interface with Allied Vision VimbaX cameras. The class provides functionality to control and capture images from Allied Vision VimbaX cameras. It manages camera configuration, acquisition, and data streaming. .. important:: The vendor underlying library must be obtained from the `official website `_. Download the `Allied Vision VimbaX SDK`, unpack it and install it following the supplied ``README`` file. Note: For use with :ref:`BOSS in docker `, you can adapt the VimbaX install script ``cti/Install_GenTL_Path.sh`` To find the ``cam_id`` of your camera, you can either use the VimbaXViewer (or start the driver with a wrong id, it will print the available ids). The ids look something like ``DEV_000A4717239E``. .. py:attribute:: cam_id .. py:attribute:: default_config_dict .. py:attribute:: reset_to_continuous :value: False .. py:method:: read_feature(feature_name: str) -> Any Read the current value of a VimbaX camera feature. :param feature_name: Name of the feature to read (e.g., "ExposureTime", "Gain") :returns: The current value of the feature, or False if the feature cannot be read. For enum features, returns the string representation of the enum value. .. rubric:: Example Read exposure time:: exposure = camera.read_feature("ExposureTime") print(f"Current exposure: {exposure} µs") .. py:method:: set_feature(feature_name: str, value: Any) -> bool Set the value of a VimbaX camera feature. .. warning:: This method is discouraged for production use. Instead, use the configuration system via :meth:`set_configuration` which provides better configuration management. :param feature_name: Name of the feature to set (e.g., "ExposureTime", "Gain") :param value: Value to set for the feature :returns: True if the feature was set successfully, False otherwise. .. rubric:: Example Set exposure time:: success = camera.set_feature("ExposureTime", 1000) if not success: print("Failed to set exposure time") .. py:method:: run_feature(feature_name: str) -> Any Execute a command-type VimbaX camera feature. Command features are used for actions like triggering software triggers, saving settings, or other one-time operations. :param feature_name: Name of the command feature to execute (e.g., "TriggerSoftware") :returns: True if the feature was ran successfully, False otherwise. .. rubric:: Example Trigger a software trigger:: result = camera.run_feature("TriggerSoftware") if result: print("Trigger executed successfully") .. py:method:: get_config_features(max_visibility_level: vmbpy.FeatureVisibility | int = DEFAULT_FEATURE_VISIBLIY) -> dict Get all features from the camera in form of a dict including information about if they can be set/read. :param max_visibility_level: Maximum visibility level for features to include (1=Beginner, 2=Expert, etc.) .. py:attribute:: get_camera .. py:attribute:: acquisition_running :type: bool :value: False .. py:attribute:: payload_metadata :type: dict .. py:attribute:: keep_device_open :value: True .. py:attribute:: default_config :type: str .. py:method:: get_device() -> collections.abc.Iterator[None] Yield a device handle. .. code-block:: python # use the device in a with statement with self.get_device() as camera: camera.do_something() .. py:method:: open() -> Any Open the device handler and assign it to `self._device`. .. py:method:: teardown() -> None Release the device handler and potentially de-initialize the API. .. py:method:: start() -> bool Fire a software trigger. :returns: True if successful .. py:method:: stop() -> bool Abort the exposure and release queued buffers. :returns: True if successful .. py:method:: reset() -> None Reset the device by aborting any ongoing exposure, closing and re-opening the handler. .. py:method:: get_status() -> dict Get a dict with the current device status. :returns: A dict with the device status .. py:property:: config_dict :type: dict Get a copy of the configuration dict. :returns: Copy of the configuration dict .. py:method:: update_configuration(new_config_dict: dict, merge: bool = True) -> None Update the configuration dict with new configuration. Each dict key corresponds a (new) configuration name. Each value is a dict with config property -> config value. :param new_config_dict: A dict of configurations where the keys are the configuration names :param merge: If ``True``, the new dict is recursively merged with the current set config dict. If ``False`` the old configurations with the provided names (keys) are overwritten. .. py:method:: get_configuration() -> dict Get the currently active configuration. :returns: The currently active configuration. .. py:method:: configure(config: str = '', metadata: dict | None = None) -> bool Configure the device with the known configuration `config`. To add a configuration to the device, use :meth:`update_configuration`. :param config: Key (name) of the configuration :param metadata: Metadata that is merged into the current payload metadata dict which is send with every emitted :code:`acquisition_data` event. .. py:attribute:: set_configuration .. py:method:: update_payload_metadata(metadata: dict, merge: bool = True) -> None Update metadata dict send with every emitted frame by the :code:`acquisition_data` event method. :param metadata: Metadata that is merged into the current payload metadata dict which is send with every emitted :code:`acquisition_data` event. :param merge: If ``True``, the new dict is merged with the current set metadata dict. If ``False`` the old metadata is overwritten by the given dict. .. py:method:: arm(metadata: dict | None = None, kill_running: bool = False) -> bool Arm the device with the currently active configuration. :param metadata: Metadata that is merged into the current payload metadata dict which is send with every emitted :code:`acquisition_data` event. :param kill_running: If ``True`` any running acquisition will be stopped. If ``False`` and an acquisition is :param already running: :param an error will be raised.: :returns: True if arming was successful else False .. py:method:: acquisition_data(frame: numpy.ndarray, metadata: dict | None = None) -> tuple Event to emit new frames. .. note:: The dtype of the frame is not changed here. :param frame: The frame payload data (for example an image or an scope trace) :param metadata: The metadata which is passed along the payload. This argument takes precedence over the :code:`payload_metadata` attribute (for example set by the :code:`update_payload_metadata` method) while merging the two dicts. :returns: A tuple of image and metadata(-dict) .. py:method:: acquisition_started(metadata: dict | None = None) -> dict Event emitted when the acquisition thread starts. :returns: A dict with acquisition metadata .. py:method:: acquisition_stopped(metadata: dict | None = None) -> dict Event emitted when the acquisition thread stops. :returns: A dict with acquisition metadata