やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ラズパイ+ウェブカメラC200で静止画を撮影してみる

 デジカメだと取込みが面倒。WebCamで撮影できないか試してみた。

必要なもの

接続確認

 WebCamが認識されていることを確認する。

$ lsusb
...
Bus 001 Device 012: ID 046d:0802 Logitech, Inc. Webcam C200
...

撮影

fswebcam

インストール

$ sudo apt-get install fswebcam
この操作後に追加で 105 kB のディスク容量が消費されます。

バージョン確認

$ fswebcam --version
fswebcam 20140113

ヘルプ確認

$ fswebcam --help
Usage: fswebcam [<options>] <filename> [[<options>] <filename> ... ]

 Options:

 -?, --help                   Display this help page and exit.
 -c, --config <filename>      Load configuration from file.
 -q, --quiet                  Hides all messages except for errors.
 -v, --verbose                Displays extra messages while capturing
     --version                Displays the version and exits.
 -l, --loop <seconds>         Run in loop mode.
 -b, --background             Run in the background.
 -o, --output <filename>      Output the log to a file.
 -d, --device <name>          Sets the source to use.
 -i, --input <number/name>    Selects the input to use.
 -t, --tuner <number>         Selects the tuner to use.
 -f, --frequency <number>     Selects the frequency use.
 -p, --palette <name>         Selects the palette format to use.
 -D, --delay <number>         Sets the pre-capture delay time. (seconds)
 -r, --resolution <size>      Sets the capture resolution.
     --fps <framerate>        Sets the capture frame rate.
 -F, --frames <number>        Sets the number of frames to capture.
 -S, --skip <number>          Sets the number of frames to skip.
     --dumpframe <filename>   Dump a raw frame to file.
 -s, --set <name>=<value>     Sets a control value.
     --revert                 Restores original captured image.
     --flip <direction>       Flips the image. (h, v)
     --crop <size>[,<offset>] Crop a part of the image.
     --scale <size>           Scales the image.
     --rotate <angle>         Rotates the image in right angles.
     --deinterlace            Reduces interlace artifacts.
     --invert                 Inverts the images colours.
     --greyscale              Removes colour from the image.
     --swapchannels <c1c2>    Swap channels c1 and c2.
     --no-banner              Hides the banner.
     --top-banner             Puts the banner at the top.
     --bottom-banner          Puts the banner at the bottom. (Default)
     --banner-colour <colour> Sets the banner colour. (#AARRGGBB)
     --line-colour <colour>   Sets the banner line colour.
     --text-colour <colour>   Sets the text colour.
     --font <[name][:size]>   Sets the font and/or size.
     --no-shadow              Disables the text shadow.
     --shadow                 Enables the text shadow.
     --title <text>           Sets the main title. (top left)
     --no-title               Clears the main title.
     --subtitle <text>        Sets the sub-title. (bottom left)
     --no-subtitle            Clears the sub-title.
     --timestamp <format>     Sets the timestamp format. (top right)
     --no-timestamp           Clears the timestamp.
     --gmt                    Use GMT instead of local timezone.
     --info <text>            Sets the info text. (bottom right)
     --no-info                Clears the info text.
     --underlay <PNG image>   Sets the underlay image.
     --no-underlay            Clears the underlay.
     --overlay <PNG image>    Sets the overlay image.
     --no-overlay             Clears the overlay.
     --jpeg <factor>          Outputs a JPEG image. (-1, 0 - 95)
     --png <factor>           Outputs a PNG image. (-1, 0 - 10)
     --save <filename>        Save image to file.
     --exec <command>         Execute a command and wait for it to complete.

C200用パラメータ

 カメラによって性能が違う。パラメータも大きく変わる。

$ fswebcam --no-banner -F 50 -r 640x480 image.jpg
引数 意味
--no-banner バナー非表示
-F 50 明るさ(フレーム数 1〜255。露光時間の増加)
-r 640x480 サイズ

 ファイル名を撮影時間yyyyMMddHHmmss.jpgにする。

$ fswebcam /tmp/`date "+%Y%m%d%H%M%S"`.jpg
$ mkdir -p /tmp/work/img/
$ fswebcam --no-banner -F 50 -r 640x480 /tmp/work/img/`date "+%Y%m%d%H%M%S"`.jpg

 PNG形式で撮影。

$ fswebcam --no-banner -F 50 -r 640x480 --png 0 image.png
カメラ固有ステータス確認
$ fswebcam --list-controls 
明るさと撮影時間

 -F引数値で明るくせねば真っ暗な画像になる。かわりに撮影までの時間が長くなる。

-F 撮影までの時間 画像
0 0s 真っ暗
25 0.86s 暗すぎ
50 3.73s なんとか見える
75 7.03s 普通の明るさ
100 10.39s やや明るい
200 23.72s 結構明るい
255 31.02s 最大値
-F
0 0
7 0.26
15 0.56
23 0.83
31 1.16
47 3.33
63 5.43
95 9.73
127 13.96
159 18.26
191 22.49
223 26.79
255 31.06

 ファイルサイズは約120KB。撮影した画像そのまま。無圧縮でこの残念な画質。

-F 画像
0 0 f:id:ytyaru:20180912083349j:plain
7 0.26 f:id:ytyaru:20180912083359j:plain
15 0.56 f:id:ytyaru:20180912083408j:plain
23 0.83 f:id:ytyaru:20180912083509j:plain
31 1.16 f:id:ytyaru:20180912083519j:plain
47 3.33 f:id:ytyaru:20180912083528j:plain
63 5.43 f:id:ytyaru:20180912083534j:plain
95 9.73 f:id:ytyaru:20180912083541j:plain
127 13.96 f:id:ytyaru:20180912083546j:plain
159 18.26 f:id:ytyaru:20180912083553j:plain
191 22.49 f:id:ytyaru:20180912083600j:plain
223 26.79 f:id:ytyaru:20180912083606j:plain
255 31.06 f:id:ytyaru:20180912083612j:plain
サイズ確認

 WebCam C200で撮影できるサイズを確認する。

  • 160x120
  • 176x144
  • 320x240
  • 352x288
  • 640x360
  • 640x400
  • 640x480
$ lsusb -v |grep -1 Width
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
          Still image unsupported
        wWidth                            640
        wHeight                           480
--
          Still image unsupported
        wWidth                            160
        wHeight                           120
--
          Still image unsupported
        wWidth                            176
        wHeight                           144
--
          Still image unsupported
        wWidth                            320
        wHeight                           240
--
          Still image unsupported
        wWidth                            352
        wHeight                           288
--
          Still image unsupported
        wWidth                            640
        wHeight                           360
--
          Still image unsupported
        wWidth                            640
        wHeight                           400
--
        bNumImageSizePatterns               7
        wWidth( 0)                        640
        wHeight( 0)                       480
        wWidth( 1)                        160
        wHeight( 1)                       120
        wWidth( 2)                        176
        wHeight( 2)                       144
        wWidth( 3)                        320
        wHeight( 3)                       240
        wWidth( 4)                        352
        wHeight( 4)                       288
        wWidth( 5)                        640
        wHeight( 5)                       360
        wWidth( 6)                        640
        wHeight( 6)                       400
--
          Still image unsupported
        wWidth                            640
        wHeight                           480
--
          Still image unsupported
        wWidth                            160
        wHeight                           120
--
          Still image unsupported
        wWidth                            176
        wHeight                           144
--
          Still image unsupported
        wWidth                            320
        wHeight                           240
--
          Still image unsupported
        wWidth                            352
        wHeight                           288
--
          Still image unsupported
        wWidth                            640
        wHeight                           360
--
          Still image unsupported
        wWidth                            640
        wHeight                           400
--
        bNumImageSizePatterns               7
        wWidth( 0)                        640
        wHeight( 0)                       480
        wWidth( 1)                        160
        wHeight( 1)                       120
        wWidth( 2)                        176
        wHeight( 2)                       144
        wWidth( 3)                        320
        wHeight( 3)                       240
        wWidth( 4)                        352
        wHeight( 4)                       288
        wWidth( 5)                        640
        wHeight( 5)                       360
        wWidth( 6)                        640
        wHeight( 6)                       400
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
ジー状態で撮影できない

 fswebcamで1回撮影すると、その後15秒間ほどビジー状態になり撮影できない。

$ fswebcam --no-banner -F 200 -r 640x480 image.jpg
--- Opening /dev/video0...
Trying source module v4l2...
Error opening device: /dev/video0
open: Device or resource busy
Trying source module v4l1...
Error opening device: /dev/video0
open: Device or resource busy
Unable to find a source module that can read /dev/video0.

参考