Raspberry Pi: カメラの接続
概要
Raspberry Pi は通常の Linux OS 環境と同様に USB 接続のカメラが使用できるほか、専用のカメラモジュールを使用して動画や静止画を撮影することができる。また Pico 以外の全てのモデルに H.264 ハードウェアエンコーダーを搭載していることから、リアルタイムでの映像の加工やフォーマット変換、ストリーミングといった用途も可能である。
この記事では映像の記録方法の説明に集中するために必要最小限のオプションのみを指定するにとどめている。多機能な FFmpeg は特に数多くのオプションが存在する。目的にあった解像度や FPS で記録するためにはそれぞれのコマンドのドキュメントを参照すること。
Table of Contents
USB Web カメラ
この記事で使用しているカメラは Logitech C270n HD WEBCAM (720p =1280x720, 30fps) である。
USB Web カメラを Raspberry Pi 本体に接続し lsusb
コマンドを実行すれば USB デバイスとして認識されているかを確認することができる。以下の例では USB Bus 001, Device 005 に接続したことが分かる。
pi@pirite:~ $ lsusb
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 004: ID 0424:7800 Microchip Technology, Inc. (formerly SMSC)
Bus 001 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
カメラモジュール
Raspberry Pi 用のカメラモジュールは 1000~3000 円程度で購入することができる。Amazon の 780 円のカメラモジュールでも 2000 円程度の Web カメラと同じくらいの画質だし、広角や夜間撮影向けといった選択肢もある。デバイスとして認識さえすれば、基本的に記録方法は USB Web カメラと同じである。
カメラモジュールは Raspberry Pi 本体のカメラポートに接続する。Raspberry Pi 3, 4 ではカメラポートは HDMI 出力と LAN 出力の間に配置されている (同じ MIPI CSI のディスプレイポートと間違わないように注意)。まずカメラポートのタブ (ストッパーのようなもの) を引っ張り上げ、カメラモジュールのリボンケーブルを差し込み、タブを押し込んで固定する。このタブの爪が折れやすいので力づくで引っ張らないように注意。言葉では説明が難しいので YouTube に上がっている取り付け動画などを参照すると良い。
次に OS を起動し raspi-config
から Interface Options → Legacy Camera を Enable にする。これでカメラポートが有効になり Raspberry Pi OS がカメラモジュールを認識するようになる。
pi@pirite:~ $ sudo raspi-config
OS を再起動したら vcgencmd
を実行してカメラモジュールが正しく認識されていることを確認しよう。
pi@pirite:~ $ vcgencmd get_camera
supported=1 detected=1
ここで supported=1 detected=1 と表示されればカメラモジュールは正しく認識されている。supported=0 の場合は raspi-config
でカメラポートが有効化されていない。また supported=1 detected=0 の場合はカメラモジュールが認識できていないので正しく差し込まれているかを確認する。正しく差し込まれているにもかかわらず detected=0 となる場合は sudo apt update && sudo apt upgrade
でライブラリを更新したり sudo rpi-update
でファームウェアを更新することで改善するかもしれない。
使用デバイスの確認
v4l2-ctl
コマンドを使用すると Raspberry Pi に接続した USB カメラやカメラモジュールがどのデバイスに割り当てられているかを知ることができる。
pi@pirite:~$ v4l2-ctl --list-device
bcm2835-codec-decode (platform:bcm2835-codec): ← ハードウェアエンコーダー
/dev/video10
/dev/video11
...
bcm2835-isp (platform:bcm2835-isp): ← ハードウェアアクセラレータ (ベイヤーフィルターなど)
/dev/video13
/dev/video14
...
mmal service 16.1 (platform:bcm2835-v4l2-0): ← カメラモジュール
/dev/video2
C270 HD WEBCAM (usb-3f980000.usb-1.1.2): ← USB Web カメラ
/dev/video0
/dev/video1
/dev/media0
上の例では USB 接続した C270n が /dev/video0
に、カメラモジュールが /dev/video2
に割り当てられていることがわかる。
次に行うこと
Raspberry Pi: 静止画の撮影
カメラの接続が完了したら Raspberry Pi で静止画を撮影してみよう。Raspberry Pi は通常の Linux OS 環境と同様に USB 接続のカメラが使用できるほか、専用のカメラモジュールを使用して動画や静止画を撮影することができる。…
Raspberry Pi: 動画の撮影
カメラの接続が完了したら Raspberry Pi で動画を撮影してみよう。Raspberry Pi は Pico 以外の全てのモデルに H.264 ハードウェアエンコーダーを搭載していることから、リアルタイムでの映像の加工やフォーマット変換、ストリーミングといった用途も可能である。…
この記事は Raspberry Pi 3 B+ 上の以下の環境で作業を行っている。またすべての操作はコマンドライン (CUI) 上で行うことを想定している。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
$ uname -a
Linux pirite 5.10.89-v7+ #1508 SMP Tue Jan 4 19:51:16 GMT 2022 armv7l GNU/Linux