覚え書きブログ

読者です 読者をやめる 読者になる 読者になる

Raspberry Piの覚え書き(fswebcam編)

ロボット

前回v4l1を用いたプログラムが動作しなかったので、今回はv4l2に対応しているfswebcamをインストールしてみた。
hirotaka-hachiya.hatenablog.com

まず、WebカメラELECOM UCAM-DLA200HSVをUSBポートに挿して、認識されたかどうかを以下のように確認する。

> lsusb
Bus 001 Device 009: ID 056e:700a Elecom Co., Ltd 
Bus 001 Device 006: ID 046d:c534 Logitech, Inc. Unifying Receiver

> ls /dev/video*
/dev/video0

> lsmod | grep v4l
v4l2_common             3777  2 pwc,videobuf2_core
videodev              121307  3 pwc,v4l2_common,videobuf2_core

問題なく認識されているようなので、fswebcamをインストールして実行する。

> sudo apt-get install fswebcam 
> fswebcam --no-banner image.jpg 
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to 'image.jpg'.

ここでは、fswebcamを実行してキャプチャした画像を、image.jpgに出力している。このファイルを表示してみると以下のようになった。色合いが変だが一応キャプチャできている。

> display image.jpg

f:id:hirotaka_hachiya:20160517134326j:plain

ところで、fswebcamのソースコードは、Githubにて公開されているが、v4l1とv4l2ではだいぶコードの中身が違うようだ。前回エラーが出ていた以下のVIDIOCGCAPはv4l2では使われていないのがわかる。
https://github.com/fsphil/fswebcam

v4l1:
https://github.com/fsphil/fswebcam/blob/master/src_v4l1.c

if(ioctl(fd, VIDIOCGCAP, vd) < 0) 
{ 
   ERROR("%s: Not a V4L device?", src->source); 
   ERROR("VIDIOCGCAP: %s", strerror(errno)); 
   return(-1); 
}


v4l2:
https://github.com/fsphil/fswebcam/blob/master/src_v4l2.c

if(ioctl(s->fd, VIDIOC_QUERYCAP, &s->cap) < 0) 
{ 
   ERROR("%s: Not a V4L2 device?", src->source); 
   return(-1); 
}