ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Raspberry Pi(ラズパイ)でWebカメラを使う

(2022-05-19 初稿)

はじめに

職場でタイムラプス写真を撮る必要があり、デジカメやアクションカメラを検討したが、使い勝手が良いものが無くて、Raspberry Pi(以下 ラズパイ)に市販のWebカメラを接続して撮ることにした。

筆者の撮影は、例えば「昼間は1時間おきに撮影し、夜は暗いので撮影しない」、「平日は、短い間隔で撮影し、土日は長い間隔で写す」等と気まぐれなのである。筆者には、crontabぐらいしか思いつかなかったので、結局ラズパイを利用することにした。

2〜3日前から使い始めたばかりなので、単なるリンク集の記事になってしまいそうだ。^^;

ラズパイにWebカメラを接続して写真を撮る

筆者が利用したWebカメラは、ロジクールのc270nとエレコムのUCAM-C820ABBKである。

エレコムUCAM-C820ABBK とロジクールc270n

ラズパイにWebカメラを接続し、認識できたかlsusbコマンドで確認する。

lsusb
(関係部分のみ抜粋)
Bus 001 Device 007: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 005: ID 1bcf:28c4 Sunplus Innovation Technology Inc. FHD Camera Microphone

写真を撮るためにはfswebcamをインストールする必要がある。

sudo apt install fswebcam

以下のようにfswebcamで、写真を撮ることができる。

fswebcam image.jpg

fswebcamの使い方は、man fswebcamで見ることができるが、デフォルトの解像度は 384x288ととても小さいので、以下のように解像度を指定して撮る方が良い。

fswebcam -r 800x600 image.jpg

以下のページでは、-F(フレーム)と-S(スキップ) オプションを変化させて撮影し、ブレずにきれいにピントが合うと報告があった。

具体的には、 -F 1 -S 10とのことだが、カメラによって異なるので、各自テストして欲しい。

ラズパイに複数台のカメラをつなぐ

ラズパイには4つのUSBポートがあるので、複数台のWebカメラを接続できる。

ただし、複数のWebカメラを接続すると、どれがどれだかわからなくなる。^^;

そこで、以下のコマンドをインストールする。

sudo apt install v4l-utils

詳細は、以下のサイトを参照のこと。

以下のコマンドで、接続しているカメラのリストを取得できる。

v4l2-ctl --list-devices
(関係部分ののみ)
FHD Camera Microphone: FHD Came (usb-3f980000.usb-1.1.2):
    /dev/video0
    /dev/video1
    /dev/media3
UVC Camera (046d:0825) (usb-3f980000.usb-1.1.3):
    /dev/video2
    /dev/video3
    /dev/media4

筆者の試した範囲では、最初に接続したWebカメラが /dev/video0 になり、次に接続したWebカメラが /dev/video2 になるようである。

Webカメラ(デバイス)と解像度を指定して、写真を撮るのは以下のとおりである。

fswebcam -d /dev/video2 -r 1920x1080 image.jpg

ビデオキャプチャの設定の確認

$ v4l2-ctl -V
Format Video Capture:
    Width/Height      : 1920/1080
    Pixel Format      : 'MJPG' (Motion-JPEG)
    Field             : None
    Bytes per Line    : 0
    Size Image        : 4147200
    Colorspace        : sRGB
    Transfer Function : Rec. 709
    YCbCr/HSV Encoding: ITU-R 601
    Quantization      : Default (maps to Full Range)
    Flags             : 

$ v4l2-ctl -V
Format Video Capture:
    Width/Height      : 640/480
    Pixel Format      : 'YUYV' (YUYV 4:2:2)
    Field             : None
    Bytes per Line    : 1280
    Size Image        : 614400
    Colorspace        : sRGB
    Transfer Function : Rec. 709
    YCbCr/HSV Encoding: ITU-R 601
    Quantization      : Default (maps to Limited Range)
    Flags             : 

例えば、キャプチャーするサイズを指定する場合は以下のようにする。

v4l2-ctl -v width=1280,height=720

その他も機能があるが、詳細は上記サイトを参照のこと。

VLCメディアプレーヤーで表示してみる

VLCメディアプレーヤ等で、キャプチャすることができる。

VLCメディアプレーヤを起動後、メニューの「メディア(M)」、「キャプチャーデバイスを選択(Ctrl+C)」を選択し、「/dev/video0」または「/dev/video2」を選択すれば下図のとおりキャプチャできる。

VLCメディアプレーヤでのキャプチャ

皆さんの参考になれば…