RaspberryPiでカメラを使う(raspivid, raspistill, fsbcam)

June 13, 2020

RaspberryPi上でカメラの画像や映像を扱うにはraspividコマンドやraspistillコマンドやfsbcamコマンドを使う。これらを試してみた。

RaspberryPiのOSのバージョン

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

使うWebカメラ

こちらの全天球カメラをRaspberryPiに接続して使う。

Insta360 Air | Insta360 360度ビデオカメラ | 株式会社アスク

カメラモジュールを扱うraspistill, raspividコマンドを使ってみる

raspistillは画像を保存するAPI。

raspistill - Raspberry Pi Documentation

raspividは動画を保存するAPI。

raspivid - Raspberry Pi Documentation

下記コマンドで動画保存してみる。

raspivid -o vid.h264

下記エラーが出た。

mmal: Cannot read camera info, keeping the defaults for OV5647
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Camera is not enabled in this build. Try running "sudo raspi-config" and ensure that "camera" has been enabled

カメラデバイスが認識されているか確認するが、認識されていない模様。

vcgencmd get_camera
> supported=0 detected=0

エラーをよく読んでみるとこう書いてあるのでsudo raspi-configでカメラを有効化してみればよさそう。

Try running "sudo raspi-config" and ensure that "camera" has been enabled

  1. sudo raspi-configを実行
  2. 5 Interfacing Optionsを選択
  3. P1 Cameraを選択
  4. はいを選択

有効化して再起動して確認してみる。supported1になった!

vcgencmd get_camera
> supported=1 detected=0

カーネルのアップデートをしてみた。

sudo rpi-update
sudo reboot 

もう一度動画保存をトライ。

raspivid -o vid.h264

下記エラーが出た。色々調べてみたが、ちょっとお手上げ。

mmal: Cannot read camera info, keeping the defaults for OV5647
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Camera is not detected. Please check carefully the camera module is installed correctly

Webカメラを扱うfsbcamコマンドを使ってみる

よくドキュメントを探してみるとWebカメラを扱うためのfsbcamコマンドを見つけた。どうやらraspistill, raspividはWebカメラではなくカメラ"モジュール"のためのコマンドらしい。

Using a standard USB webcam - Raspberry Pi Documentation

インストールしてみる。

sudo apt install fswebcam

画像保存してみる。

fswebcam image.jpg

下記エラーが出たが、これはWebカメラが他のプロセスで使用されているためだった。Webカメラを使用しているアプリケーションを落として再トライ。

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Error selecting input 0
VIDIOC_S_INPUT: Device or resource busy

保存できた!

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 1472x736.
--- Capturing frame...
GD Warning: gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: starts with 0x95 0x5cCaptured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'image.jpg'.

出来上がった画像を開いてみると、真っ暗になってしまった…。

          2020 06 14 6 53 28

これは調べてみたら露光時間が極端に短いのが原因でした。露光時間を設定して再チャレンジ。

fswebcam -F 100 ./tmp.jpg

ちゃんと撮れた!

          2020 06 14 6 59 41

次回はnode.jsでWebカメラを扱ってみる。