📸

【Bullseye】ラズパイ新OSでカメラモジュールを使う【libcamera】

2022/01/05に公開

はじめに

ラズパイ4でカメラモジュールを使ってみようとAmazonでポチってサクッとテストしようとしたところ、ラズパイのOSは新しくなってるわカメラも挿しただけじゃ使えないわなにやらlibcameraという新しいコマンドがあるわで自分なりに調べて対処法を見つけたので、ここにメモする。

環境

結論

/boot/config.txtファイルの 末尾(これ重要!) に以下を追記(ov5647カメラの場合)

dtoverlay=ov5647

書き換えたら再起動して設定を反映する

他のカメラの場合は公式ドキュメント参照(カメラの一覧表がある)

Raspberry Pi Documentation - Camera

libcamera-helloで動作確認

libcamera-hello

5秒間プレビューが表示される

トラブルの経緯

まず、以下ドキュメントを参考にカメラをテストしようと試みた

Pythonコードでカメラモジュールをコントロールする方法

リンク先ではPythonのPiCameraライブラリを使ってカメラ画像を取得しようとしていたが、スクリプトを実行したらエラーが出てしまった

$ python picamera_test.py
mmal: mmal_component_create_core: could not find component 'vc.camera_info'
Traceback (most recent call last):
  File "/home/tpfan/work_space/scripts/picamera_test.py", line 4, in <module>
    camera = PiCamera()
  File "/usr/lib/python3/dist-packages/picamera/camera.py", line 367, in __init__
    with mo.MMALCameraInfo() as camera_info:
  File "/usr/lib/python3/dist-packages/picamera/mmalobj.py", line 2346, in __init__
    super(MMALCameraInfo, self).__init__()
  File "/usr/lib/python3/dist-packages/picamera/mmalobj.py", line 631, in __init__
    mmal_check(
  File "/usr/lib/python3/dist-packages/picamera/exc.py", line 184, in mmal_check
    raise PiCameraMMALError(status, prefix)
picamera.exc.PiCameraMMALError: Failed to create MMAL component b'vc.camera_info': Function not implemented

エラー文でググってヒットしたPiCameraリポジトリのIssueでのログを読んでよくわかんないな〜と思いながら、Bullseye、libcamera等の単語が出てきてこれ怪しそうだと思いさらにググる
(ここで初めてBullseyeになったんだと気づく)

ラズパイ公式のブログによると、Bullseyeからはlibcameraに置き換えられたとの記述が
Bullseye camera system - Raspberry Pi

先週、Debian Bullseyeに基づいて最初のRaspberry Pi OSイメージをリリースしたとき、Raspberry Piでカメラを使用するコードを書いた人にとって非常に重要な変更点を指摘しました。Raspberry Piがカメラモジュールにアクセスするために使用するドライバーはlibcameraに置き換えられました。
これらの非常に重要な変更は、クローズドソースコードが少ないことを意味し、Raspberry Pi以外の人々が新しいカメラハードウェアとソフトウェアを簡単に開発できるようにします。しかし、新しいRaspberry Pi OSリリースは、おなじみのraspicamアプリとPicam Pythonライブラリをサポートしなくなることを意味します。

(Safariの翻訳を使用)

さらに、先駆者様のドキュメントを参考にやってみた

ラズパイ新OS「Bullseye」でのカメラモジュールの使い方 | メタエレ実験室

結論にも書いたように、/boot/config.txtを編集した時、77行目付近に既にdtoverlayの記述があったので、それを書き換えてみた

[pi4]
#dtoverlay=vc4-fkms-v3d
dtoverlay=ov5647

だが、エラーが出てしまった

$ libcamera-hello
...(略)
terminate called after throwing an instance of 'std::runtime_error'
what(): failed to import fd 21
Aborted

原因がわからず焦ってしまったが、dtoverlayの設定を書き換えじゃなく、元に戻して末尾に追記したことで解消できた。おしまい。

Discussion