Webcam

From Leo's Notes
Last edited on 8 October 2020, at 16:06.

Linux

To get a webcam working for Linux, ensure that it's supported. Newer webcams tend to have support though cheaper non-HD webcams from China might not. You should see a /dev/video0 device when the webcam is plugged into the computer. If not, check dmesg and see if the USB device is being detected. lsusb should also list it.

The default permissions set to /dev/video0 is set by udev. If you need to change the device permissions (say making it world read/writable), you will need to create a udev rule by creating a new file in /etc/udev/rules.d/ with the following contents:

SUBSYSTEM=="video4linux", BUS=="usb", SYSFS{idVendor}=="045e", SYSFS{idProduct}=="0761", NAME="video0", MODE="0666"

The Vendor ID and product ID must match the values from lsusb. For the example above (a Microsoft LifeCam VX-2000):

# lsusb
Bus 001 Device 005: ID 045e:0761 Microsoft Corp.


Capturing Utilities/Daemons

To capture images, use any one of the following utilities:

My Raspberry Pis use motion to automatically capture snapshots periodically to a NFS share.

Configuration

You may configure the webcam settings using v4l-utils.

See Also:

Tasks

Disable Auto Focus

v4l2-ctl shows all the settings that are currently set:

# v4l2-ctl -l
                     brightness 0x00980900 (int)    : min=30 max=255 step=1 default=133 value=133
                       contrast 0x00980901 (int)    : min=0 max=10 step=1 default=5 value=5
                     saturation 0x00980902 (int)    : min=0 max=200 step=1 default=103 value=103
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=2 value=2
      white_balance_temperature 0x0098091a (int)    : min=2500 max=10000 step=1 default=4500 value=4500 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=50 step=1 default=25 value=25
         backlight_compensation 0x0098091c (int)    : min=0 max=10 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
              exposure_absolute 0x009a0902 (int)    : min=1 max=10000 step=1 default=156 value=156 flags=inactive
                   pan_absolute 0x009a0908 (int)    : min=-529200 max=529200 step=3600 default=0 value=0
                  tilt_absolute 0x009a0909 (int)    : min=-432000 max=432000 step=3600 default=0 value=0
                 focus_absolute 0x009a090a (int)    : min=0 max=15 step=1 default=2 value=5 flags=inactive
                     focus_auto 0x009a090c (bool)   : default=1 value=1
                  zoom_absolute 0x009a090d (int)    : min=0 max=317 step=1 default=0 value=0

To disable auto focus, set the focus_auto setting to 0.

# v4l2-ctl -l|grep focus_auto
                 focus_absolute 0x009a090a (int)    : min=0 max=15 step=1 default=2 value=5 flags=inactive
                     focus_auto 0x009a090c (bool)   : default=1 value=1
# v4l2-ctl -c focus_auto=0