【Bullseye】ラズパイ新OSでカメラモジュールを使う【libcamera】
はじめに
ラズパイ4でカメラモジュールを使ってみようとAmazonでポチってサクッとテストしようとしたところ、ラズパイのOSは新しくなってるわカメラも挿しただけじゃ使えないわなにやらlibcamera
という新しいコマンドがあるわで自分なりに調べて対処法を見つけたので、ここにメモする。
環境
- Raspberry Pi 4
- OS:Bullseye(2021-10-30リリース)
- カメラ
結論
/boot/config.txt
ファイルの 末尾(これ重要!) に以下を追記(ov5647カメラの場合)
dtoverlay=ov5647
書き換えたら再起動して設定を反映する
他のカメラの場合は公式ドキュメント参照(カメラの一覧表がある)
Raspberry Pi Documentation - Camera
libcamera-hello
で動作確認
libcamera-hello
5秒間プレビューが表示される
トラブルの経緯
まず、以下ドキュメントを参考にカメラをテストしようと試みた
リンク先では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