この記事は?
Raspberry Pi には純正のカメラモジュールがありますが、微妙にお値段高いですよね。
USB接続のWebカメラのほうが安価ですし、入手性もいいですし、それにRaspberry Pi以外の機械にも流用が効くので、USBカメラのほうが便利な気がします。
ということで、今回はUSB接続の安価なWebカメラを使用して静止画を撮影しよう、と言うシンプルな内容です。
環境
使用する機器
- Raspberry Pi (機種は問わず)
- OSは最新版(stretch)を使用します
- Webカメラ
- zoomするときに使うようなUSB接続のWebカメラであればなんでも大丈夫だと思いますが、今回は Buffalo BSW200MBK を使用します。実売価格2,000円くらいです。
事前準備
- Raspberry Pi にOSをインストールします。
- とりあえず
sudo apt-get update
sudo apt-get upgrade
しておきます - Raspberry Pi のUSBポートにWebカメラを接続します
追加でパッケージをインストール
今回使用するパッケージを追加でインストールしておきます。
$ sudo apt-get install v4l-utils fswebcam
カメラの接続確認
lsusb
を実行して、カメラ(らしきもの)が認識されていることを確認します
下記例では KYE Systems Corp. (Mouse Systems) Genius WideCam F100
が認識されているカメラです。
$ lsusb
Bus 001 Device 005: ID 0458:708c KYE Systems Corp. (Mouse Systems) Genius WideCam F100
Bus 001 Device 004: ID 8086:0808 Intel Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
v4l2-ctl --list-devices
を実行し、カメラのデバイスが存在することを確認します。
下記例ではUSBカメラが /dev/video0
として認識されています。
$ v4l2-ctl --list-devices
USB_Camera: USB_Camera (usb-3f980000.usb-1.5):
/dev/video0
実際に試してみる
静止画を撮影する
静止画の撮影は fswebcam
コマンドを実行します。コマンド一発でOKです。
$ fswebcam -r 1920x1080 hoge.jpg
撮影した静止画が hoge.jpg
として保存されます。
上記コマンドで撮影できない場合
上記コマンドで撮影したつもりが、真っ黒・真っ白な画像になってしまう場合があります。
カメラにオートフォーカスや絞り自動調整機能が付いているような場合、fswebcam
コマンドを実行してカメラが起動されるタイミングで調整が始まります。この自動調整が終わる前に画像を取得してしまうのが原因のようです。
そのような場合は、-S
-D
パラメータで調整します。
$ man fswebcam
-----(中略)-----
-S, --skip <number>
Set the number of frames to skip. These frames will be captured but won't be
use. Use this option if your camera sends some bad or corrupt frames when it
first starts capturing.
Default is "0".
-D, --delay <delay>
Inserts a delay after the source or device has been opened and initialised,
and before the capture begins. Some devices need this delay to let the image
settle after a setting has changed. The delay time is specified in seconds.
-----(中略)-----
-S
--skip
は、指定の回数だけ空撮影してから本撮影を行う。
-D
--delay
は、カメラをオープンしてから指定の秒数待ってから撮影を行う。
...という意味です。