Raspberry Pi Camera を有効化する

Raspberry Pi OSのバージョンに依存していたり、カメラ ソフトウェア スタックのlegacyとlibcameraとを混同している説明が多い。バージョン毎に、所望のカメラ ソフトウェア スタックを選択する方法を整理する。

  • カメラ:Raspbery Pi Camera Ver2.1
  • Raspberry Pi 3B+

下記コマンドによりコードネームを表示させbusterかbullseyeかを識別する。

$ lsb_release -c
Codename:  bullseye

buster

違いは /boot/config.txt の dtoverlay の記述だけ。

Legacyモード

  • raspi-config で camera interface をenable
  • /boot/config.txt の dtoverlay= をコメントアウト
    vc4-fkms-v3d も imx219 も両方とも
  • camera_auto_detect をコメントアウト(busterのインストール時には存在しない)
$ vcgencmd get_camera
supported=1 detected=1, libcamera interfaces=0

libcameraモード

  • rpi-updateでファームウェアをアップデート
  • raspi-config で camera interface をenable
  • /boot/config.txt に dtoverlay=imx219を追加
  • camera_auto_detect をコメントアウト(インストール時に存在しない)
$ vcgencmd get_camera
supported=1 detected=0, libcamera interfaces=1

bullseye

start_x=1の記述によりlegacyモードに切り替わる。
raspi-configが/boot/config.txtを書き換えることに注意。

legacyモード

  • raspi-configでlegacy supportをenable
    /boot/config.txt の camera_auto_detect が削除される。
    /boot/config.txt の start_x=1が追記される。

$ vcgencmd get_camera
supported=1 detected=1, libcamera interfaces=0

libcameraモード

vcgencmdに対しては libcamera interfaces=0であるが、 libramera-vid –list-cameras に対しては検出される。

  • raspi-configでLegacy Cameraをdisableに設定
    raspi-configが /boot/config.txt の camera_auto_detect =1 を追記する。
    値は0でも1でも動きに変わりは無さそう。
  • raspi-configでAdvanced Options → Glamorをenableに設定
    設定しないとプレビューウィンドウを表示できない。
  • /boot/config.txt に dtoverlay=im219 を追記する
    vcgencmd get_cameraに対し libcamera interfaces=0
    libcamera-hello –list-cameras に対し im219 を検出
    v4l2-ctl –list-devices に対し /dev/video0 を検出
  • /boot/config.txt に dtoverlay=im219 を追記しない
    vcgencmd get_cameraに対し libcamera interfaces=0
    libcamera-hello –list-cameras に対し No cameras available!
    v4l2-ctl –list-devices に対し /dev/video0 が検出されない

Glamorがdisableになっている場合は下記のエラーが表示される。
-nオプションを付けプレビューウィンドウを非表示にすれば実行は可能。

libEGL warning: DRI2: failed to authenticate
Made X/EGL preview window
…

busterとbullseyeとの違い

  • 情報源はこちら
  • ハードウェアアクセラレータが使えなくなった
    Raspberry Pi Camera V2本体内のH.264エンコードを用いる。
    又は、libcameraによりソフトウェアエミュレーションさせる。