Skip to content

Multiple API

Class Cameras

A class for manage multiple threaded cameras.

Parameters:

Name Type Description Default
devices dict

a dict with names and sources of the camera devices.

{}
reconnectDelay

wait time for try reopen camera device

required
fps

frames per second

required
verbose

display info messages?

required
size

tuple or list with a dimension of the image

required
emitterIsEnabled

disable on/emit events (callbacks execution)

required
backgroundIsEnabled

if some error is produced with the camera it will display a black frame with a message.

required

Examples:

cameras = Cameras(devices={'camera1': {'src': 0}, 'cameras2': {'src': 1}})

Source code in remio/camio.py
class Cameras:
    """A class for manage multiple threaded cameras.
    Args:
        devices: a dict with names and sources of the camera devices.
        reconnectDelay: wait time for try reopen camera device
        fps: frames per second
        verbose: display info messages?
        size: tuple or list with a dimension of the image
        emitterIsEnabled: disable on/emit events (callbacks execution)
        backgroundIsEnabled: if some error is produced with the camera it will display
                                a black frame with a message.

    Example:
        cameras = Cameras(devices={'camera1': {'src': 0}, 'cameras2': {'src': 1}})
    """

    def __init__(self, devices: dict = {}, *args, **kwargs):
        self.devices = {}
        if len(devices) > 0:
            for name, settings in devices.items():
                if isinstance(settings, dict):
                    self.devices[name] = Camera(name=name, **settings)

    def __getitem__(self, name):
        return self.devices[name]

    def __len__(self):
        return len(self.devices)

    def startAll(self):
        """Starts all camera devices on the devices dict."""
        for device in self.devices.values():
            device.start()

    def startOnly(self, deviceName: str = "default"):
        """Starts only a specific device.
        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            device = self.devices[deviceName]
            device.start()

    def stopAll(self):
        """Stops all camera devices."""
        for device in self.devices.values():
            device.stop()

    def stopOnly(self, deviceName: str = "default"):
        """Stops an specific camera device.

        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            device = self.devices[deviceName]
            device.stop()

    def getDevice(self, deviceName: str = "default"):
        """Returns a specific camera device.

        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            return self.devices[deviceName]

    def pauseOnly(self, deviceName: str = "default"):
        """Pauses a specific camera device.

        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            device = self.devices[deviceName]
            device.pause()

    def pauseAll(self):
        """Pauses all camera devices."""
        for device in self.devices.values():
            device.pause()

    def resumeAll(self):
        """Resumes all camera devices."""
        for device in self.devices.values():
            device.resume()

    def resumeOnly(self, deviceName: str = "default"):
        """Resumes a specific camera device.

        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            device = self.devices[deviceName]
            device.resume()

    def setSpeedOnly(self, deviceName: str = "default", fps: int = 10):
        """Updates the FPS captured by a specific devices.

        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            self.devices[deviceName].setSpeed(fps)

    def clearAllFrames(self):
        """Clears All frames."""
        for device in self.devices.values():
            device.clearFrame()

    def getAllFrames(self, asDict: bool = True):
        """Returns a list with all cameras current frames.

        Args:
            asDict: return frames as dict or as list?
        """
        if asDict:
            frames = {
                device.getName(): device.getFrame() for device in self.devices.values()
            }
        else:
            frames = [device.getFrame() for device in self.devices.values()]
        return frames

    def getAllFrames64(self, asDict: bool = True):
        """Returns a list with all cameras current frames on base64 format.

        Args:
            asDict: return frames as dict or as list?
        """
        if asDict:
            frames = {
                device.getName(): device.getFrame64()
                for device in self.devices.values()
            }
        else:
            frames = [device.getFrame() for device in self.devices.values()]
        return frames

    def getFrameOf(self, deviceName: str = "default"):
        """Returns a specific frame of a camera device.

        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            return self.devices[deviceName].getFrame()

    def getFrame64Of(self, deviceName: str = "default"):
        """Returns a specific frame on base 64 of a camera device.

        Args:
            deviceName: camera device name.
        """
        if deviceName in self.devices:
            return self.devices[deviceName].getFrame64()

    def read(self, timeout: Union[int, float] = 0, asDict: bool = True):
        """Returns a list or a dict of frames/backgrounds.

        Args:
            timeout: max wait time in seconds.
            asDict: return as a dict?
        """
        if len(self.devices) < 2:
            return list(self.devices.values())[0].read(timeout=timeout)

        if asDict:
            return {
                device.getName(): device.read(timeout=timeout)
                for device in self.devices.values()
            }
        else:
            return [device.read(timeout=timeout) for device in self.devices.values()]

    def on(self, *args, **kwargs):
        for device in self.devices.values():
            device.on(*args, **kwargs)

clearAllFrames(self)

Clears All frames.

Source code in remio/camio.py
def clearAllFrames(self):
    """Clears All frames."""
    for device in self.devices.values():
        device.clearFrame()

getAllFrames(self, asDict=True)

Returns a list with all cameras current frames.

Parameters:

Name Type Description Default
asDict bool

return frames as dict or as list?

True
Source code in remio/camio.py
def getAllFrames(self, asDict: bool = True):
    """Returns a list with all cameras current frames.

    Args:
        asDict: return frames as dict or as list?
    """
    if asDict:
        frames = {
            device.getName(): device.getFrame() for device in self.devices.values()
        }
    else:
        frames = [device.getFrame() for device in self.devices.values()]
    return frames

getAllFrames64(self, asDict=True)

Returns a list with all cameras current frames on base64 format.

Parameters:

Name Type Description Default
asDict bool

return frames as dict or as list?

True
Source code in remio/camio.py
def getAllFrames64(self, asDict: bool = True):
    """Returns a list with all cameras current frames on base64 format.

    Args:
        asDict: return frames as dict or as list?
    """
    if asDict:
        frames = {
            device.getName(): device.getFrame64()
            for device in self.devices.values()
        }
    else:
        frames = [device.getFrame() for device in self.devices.values()]
    return frames

getDevice(self, deviceName='default')

Returns a specific camera device.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def getDevice(self, deviceName: str = "default"):
    """Returns a specific camera device.

    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        return self.devices[deviceName]

getFrame64Of(self, deviceName='default')

Returns a specific frame on base 64 of a camera device.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def getFrame64Of(self, deviceName: str = "default"):
    """Returns a specific frame on base 64 of a camera device.

    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        return self.devices[deviceName].getFrame64()

getFrameOf(self, deviceName='default')

Returns a specific frame of a camera device.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def getFrameOf(self, deviceName: str = "default"):
    """Returns a specific frame of a camera device.

    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        return self.devices[deviceName].getFrame()

pauseAll(self)

Pauses all camera devices.

Source code in remio/camio.py
def pauseAll(self):
    """Pauses all camera devices."""
    for device in self.devices.values():
        device.pause()

pauseOnly(self, deviceName='default')

Pauses a specific camera device.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def pauseOnly(self, deviceName: str = "default"):
    """Pauses a specific camera device.

    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        device = self.devices[deviceName]
        device.pause()

read(self, timeout=0, asDict=True)

Returns a list or a dict of frames/backgrounds.

Parameters:

Name Type Description Default
timeout Union[int, float]

max wait time in seconds.

0
asDict bool

return as a dict?

True
Source code in remio/camio.py
def read(self, timeout: Union[int, float] = 0, asDict: bool = True):
    """Returns a list or a dict of frames/backgrounds.

    Args:
        timeout: max wait time in seconds.
        asDict: return as a dict?
    """
    if len(self.devices) < 2:
        return list(self.devices.values())[0].read(timeout=timeout)

    if asDict:
        return {
            device.getName(): device.read(timeout=timeout)
            for device in self.devices.values()
        }
    else:
        return [device.read(timeout=timeout) for device in self.devices.values()]

resumeAll(self)

Resumes all camera devices.

Source code in remio/camio.py
def resumeAll(self):
    """Resumes all camera devices."""
    for device in self.devices.values():
        device.resume()

resumeOnly(self, deviceName='default')

Resumes a specific camera device.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def resumeOnly(self, deviceName: str = "default"):
    """Resumes a specific camera device.

    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        device = self.devices[deviceName]
        device.resume()

setSpeedOnly(self, deviceName='default', fps=10)

Updates the FPS captured by a specific devices.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def setSpeedOnly(self, deviceName: str = "default", fps: int = 10):
    """Updates the FPS captured by a specific devices.

    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        self.devices[deviceName].setSpeed(fps)

startAll(self)

Starts all camera devices on the devices dict.

Source code in remio/camio.py
def startAll(self):
    """Starts all camera devices on the devices dict."""
    for device in self.devices.values():
        device.start()

startOnly(self, deviceName='default')

Starts only a specific device.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def startOnly(self, deviceName: str = "default"):
    """Starts only a specific device.
    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        device = self.devices[deviceName]
        device.start()

stopAll(self)

Stops all camera devices.

Source code in remio/camio.py
def stopAll(self):
    """Stops all camera devices."""
    for device in self.devices.values():
        device.stop()

stopOnly(self, deviceName='default')

Stops an specific camera device.

Parameters:

Name Type Description Default
deviceName str

camera device name.

'default'
Source code in remio/camio.py
def stopOnly(self, deviceName: str = "default"):
    """Stops an specific camera device.

    Args:
        deviceName: camera device name.
    """
    if deviceName in self.devices:
        device = self.devices[deviceName]
        device.stop()