03 June 2013

(Ubuntu) USB カメラで静止画jpegキャプチャ

■ 検証環境
・ Ubuntu 12.04LTS
・ USB カメラ (UVC互換) 1871:0306 Aveo Technology

20130603-usbcamera.jpg
eBayで4ドル(400円)で購入したカメラ

動作確認

USBデバイスの認識状態を確認する。

$ sudo lsusb
 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 04f2:0841 Chicony Electronics Co., Ltd 
Bus 002 Device 003: ID 046d:c52f Logitech, Inc. Wireless Mouse M305
Bus 001 Device 009: ID 1871:0306 Aveo Technology Corp. 

VLCでカメラの動作を確認

VLCメディアプレーヤーの「メディア」メニュー → 「キャプチャーデバイスを開く」を実行し、
・キャプチャモード : Video for Linux 2
・ビデオデバイス : “空欄”のまま放置か、“/dev/video0”を指定

20130603-vlc-live.jpg

ffmpegコマンドでjpegファイルに保存する

カメラが安定するまで5秒待ってから(-ss 5)キャプチャを行う。

$ ffmpeg -ss 5 -f video4linux2 -s 640x480 -i /dev/video0 -vframes 1 ./test.jpg

20130603-capture-ffmpeg.jpg

結構薄暗い夕闇でも、カメラ起動から5秒程度の時間を置けば、このレベルで撮影できます。

fswebcamコマンドでjpegファイルに保存する

$ fswebcam -D 3 -S 100 -v -r 640x480 test.jpg

-D スイッチは、撮影開始までのディレイ秒数。 -S は撮影時にスキップするフレーム数。 50〜100フレーム程度をスキップして、このカメラ(Aveo Technology)の露光が成功する。

fswebcamコマンドで設定できるパラメータ

$ fswebcam --list-controls
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Available Controls        Current Value   Range
------------------        -------------   -----
Brightness                28 (28%)        0 - 100
Contrast                  63 (63%)        0 - 100
Saturation                3               0 - 4
Gamma                     3               1 - 8
Power Line Frequency      50 Hz           Disabled | 50 Hz | 60 Hz
Sharpness                 10 (10%)        0 - 100
Backlight Compensation    0               0 - 1
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
There are unsaved changes to the image.

または

$ v4l2-ctl -L
                     brightness (int)    : min=0 max=100 step=1 default=28 value=28
                       contrast (int)    : min=0 max=100 step=1 default=63 value=63
                     saturation (int)    : min=0 max=4 step=1 default=3 value=3
                          gamma (int)    : min=1 max=8 step=1 default=3 value=3
           power_line_frequency (menu)   : min=0 max=2 default=1 value=1
				0: Disabled
				1: 50 Hz
				2: 60 Hz
                      sharpness (int)    : min=0 max=100 step=1 default=10 value=10
         backlight_compensation (int)    : min=0 max=1 step=1 default=0 value=0

これらのコマンドで出力された、カメラごとに違う設定項目をfswebcam実行時に指定することができる。ただし、Aveo Technologyのカメラでは設定を行うとエラーとなった。

$ fswebcam -D 3 -S 50 --set Brightness=125 --set Contrast=50 -v -r 640x480 test.jpg

キャプチャ最大解像度を知るには

$ lsusb -d 1871:0306 -v | less

wWidth, wHeight に解像度が表示されいてる。