More info: Webcams

The package o80_webcam offers o80 wrappers of usb cameras.

How-to

Start the executable:

# to see possible arguments
o80_webcams -h

# start standalone for all webcams
o80_webcams

# same, but does not display the webcam images
o80_webcams -no-display

# starts standalone only for webcam 0 and 1
o80_webcams 0 1

# start standalone for all webcams
# and set the o80 frequency at 100Hz
# (default is 50Hz)
# note: this does not change the frame rate
#       of the webcam itself !
o80_webcams --frequency 100

# start standalone for all webcams,
# and switch the displayed image every
# 5 seconds (default is 4)
o80_webcams --turnover 5

This will start o80 standalones for all connected usb webcams, and print in the terminal the related segment ids, for example:

-- started standalones with segment_ids --
o80_webcam_0
o80_webcam_1

In another program, you may then access the webcam images, for example:

import o80_webcam
import numpy as np
frontend = o80_webcam.FrontEnd("o80_webcam_0")
obs = frontend.latest()
frame = obs.get_frame()
dimensions = obs.get_dimensions()
img = np.array(frame, dtype=np.uint8).reshape(dimensions)

Changing the resolution

Currently, the resolution can only be determined at compile time. Edit the file o80_webcam/include/o80_webcam/webcam.hpp, update O80_WEBCAM_WIDTH and O80_WEBCAM_HEIGHT; and recompile.

This assumes opencv will be able to set the configuration of the webcam accordingly. At runtime, this will be called under the hood:

// camera is an instance of cv::VideoCapture
camera.set(cv::CAP_PROP_FRAME_WIDTH, O80_WEBCAM_WIDTH);
camera.set(cv::CAP_PROP_FRAME_HEIGHT, O80_WEBCAM_HEIGHT);

If the requested resolution is not supported, this may fail and the program will crash at startup.

Also, RGB images require a relatively large memory, and the program may fail at startup to create a shared memory segment of the required size. You may need to either lower the resolution, or reduce the size of the o80 shared memory history, i.e. edit the file o80_webcam/include/o80_webcam/webcam.hpp (change the value of STANDALONE_QUEUE_SIZE).