新しいRaspberry Pi 5は、フラッグシップモデルRaspberry Piとして初めてデュアルカメラコネクタを搭載しています。つまり、Raspberry Pi 5に2台のカメラ(またはカメラとスクリーン、あるいはスクリーン2台)を接続できるということです。では、カメラはどのように操作するのでしょうか?
以前のRaspberry Pi OSリリースで導入されたlibcameraとPicamera2は、カメラを制御するための2つの異なる方法です。libcameraはターミナル経由でカメラを操作することに重点を置いているのに対し、Picamera2はPythonに重点を置いています。
このハウツーでは、両方を使用してデュアルカメラで写真を撮る方法を学びます。
このプロジェクトに必要なもの
- ラズベリーパイ5
- Raspberry Piカメラ2台
- 最新のRaspberry Pi OS「Bookworm」
カメラの接続
Raspberry Pi 5では、Raspberry Piフォームファクターにマルチカメラ(CSI)コネクタが導入されました。Raspberry Pi Compute ModuleのIOボードは以前からマルチカメラをサポートしていましたが、Raspberry Pi 5は「Model B」ボードとしては初めてマルチカメラをサポートします。
デュアルコネクタを容易にするために、Raspberry Pi 5では通常の22ピンケーブルではなく、高密度の22ピンフラットフレックスケーブルを採用しています。これらの小型コネクタはRaspberry Pi Zeroで導入され、カメラを接続するためのアダプタも簡単に入手できます。公式のRaspberry Piカメラはすべて幅広の22ピンコネクタを使用しているため、アダプタまたは適合ケーブルを使用する必要があります。
アダプターケーブルは、基本的に22ピン接続をより高密度の22ピンに凝縮します。安価で、長さも豊富に揃っています。Amazonで10ドル未満でいくつか購入しました。
Pimoroni製のこのアダプタは、22ピンのフラットフレックスケーブルを高密度22ピンケーブルに接続します。22ピンケーブルを多数お持ちの場合は、このアダプタと短くて高密度の22ピンケーブルを組み合わせることで、カメラを柔軟に接続できます。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
Raspberry Pi 5にカメラを接続する
1. Raspberry Pi 5の電源を切り、電源ケーブルを取り外します。カメラの接続/取り外しは、Raspberry Pi 5の電源が切れている状態で行ってください。そうしないと、Raspberry Piとカメラが損傷する恐れがあります。
2.爪またはプラスチック製の工具を使って、固定クリップをゆっくりと持ち上げます。クリップは壊れやすいので、ご注意ください。クリップは上方に動いて止まり、片側に傾きます。
3.カメラの15ピンフラットフレックスケーブルをコネクタに挿入します。ケーブルの金色のピンがイーサネットポート側を向いていることを確認してください。
4. Raspberry Pi 5の電源を入れ、デスクトップ画面を表示します。カメラがRaspberry Pi 5、特にGPIOに触れていないことを確認してください。
Libcameraでカメラをテストする
Raspberry Pi 5にカメラが2台接続されました。1台はCAM0、もう1台はCAM1です。まずはカメラが正常に動作していることを確認しましょう。そのために、libcameraターミナルコマンドを使って、カメラが使用可能であること、そして出力を確認できることを確認します。
1.ターミナルを開き、CAM 0に接続されたカメラを使用するには、このコマンドを入力します。このコマンドには2つの引数があります。1つ目は使用するカメラ、2つ目は遅延タイマーです。デフォルトでは、コマンドは5秒間プレビューを表示します。-t 0 を使用すると、プレビューウィンドウは自動的に閉じなくなります。終了するには、プレビューウィンドウを閉じる必要があります。
libcamera-hello –camera 0 -t 0
2. 2つ目のターミナルを開き、CAM 0に接続されたカメラを使用するには、このコマンドを入力します。このコマンドには2つの引数があります。1つ目は使用するカメラ、2つ目は遅延タイマーです。デフォルトでは、コマンドは5秒間プレビューを表示します。-t 0 を使用すると、プレビューウィンドウは自動的に閉じなくなります。終了するには、プレビューウィンドウを閉じる必要があります。
libcamera-hello –camera 1 -t 0
3.両方のカメラが正常に動作していることを確認してください。デスクトップに2つのプレビューウィンドウが表示されます。カメラを動かして、必要なショットを撮影してください。
4.プレビュー ウィンドウを閉じます。
Libcameraで写真を撮る
画像
1
の
2

libcamera アプリケーションには、画像やビデオをキャプチャするためのいくつかの異なる手段があります。
- libcamera-hello:カメラを起動し、カメラが捉えた映像のプレビューウィンドウを表示して閉じます。カメラプロジェクトにおける「Hello World」のような存在です。そのため、カメラの動作確認にはこれを使用しました。
- libcamera-jpeg:画像を jpeg ファイルにキャプチャします。
- libcamera-still: libcamera-jpeg に似ていますが、従来の「raspistill」コマンドにある機能の多くをサポートしています。
- libcamera-vid:ビデオを h264 コンテナにキャプチャします。
- libcamera-raw:カメラから直接 RAW Bayer フレームを記録します。プレビュー ウィンドウはありません。
libcamera-jpeg を使って各カメラの画像をキャプチャします。これらのコマンドは、Bash スクリプトで使用してプロセスを自動化することもできます。
1.ターミナルを開き、CAM 0に接続されたカメラで画像を撮影するには、このコマンドを入力します。このコマンドには3つの引数があります。1つ目は出力ファイル名、2つ目はカメラ、3つ目はショットをフレーミングするための5秒(5000ミリ秒)の遅延時間です。
libcamera-jpeg -o cam0.jpg –camera 0 -t 5000
2.ターミナルを開き、このコマンドを入力して、CAM 1に接続されたカメラで画像を撮影します。このコマンドには3つの引数があります。1つ目は出力ファイル名、2つ目はカメラ、3つ目はショットをフレーミングするための5秒(5000ミリ秒)の遅延時間を設定します。
libcamera-jpeg -o cam1.jpg –camera 1 -t 5000
3.ファイルマネージャーを使って画像を開きます。画像はコマンドを実行したディレクトリに保存されています。
Picamera2 を使って一度に 2 枚の写真を撮る
Raspberry Pi 5のデュアルカメラコネクタのおかげで、Picamera2 Pythonモジュールを使えば2枚の画像を同時に撮影できます。基本的には、Pythonコード内で各カメラを制御するためのオブジェクトを2つ作成します。次に、各カメラに起動指示を出し、プレビューウィンドウを読み込み、撮影のための時間を与え、その後画像をJPEGでキャプチャします。最後にカメラとの接続を切断し、プレビューウィンドウを閉じます。
1.メイン メニューから、[プログラミング] >> [Thonny] を選択します。
2.空白のドキュメントに、Pythonコードのモジュールを2つインポートします。1つ目はPicamera2、Pythonとカメラ間のインターフェースです。また、画像を撮影する前にプレビューするためのPreview関数もインポートします。2つ目はtimeモジュール、具体的にはコードを一時停止するためのsleep関数です。
from picamera2 import Picamera2, Preview
from time import sleep
3. 2台のカメラを表すオブジェクトを2つ作成します。1つ目はpicam0です。Picamera2関数を引数0で呼び出すことで、CAM0に接続されたカメラコネクタを使用することを示します。2つ目のオブジェクトはpicam1で、CAM1に接続されたカメラを使用します。
picam0 = Picamera2(0)
picam1 = Picamera2(1)
4.オブジェクトを使用して、各カメラのプレビュー ウィンドウを開始します。
picam0.start_preview(Preview.QTGL)
picam1.start_preview(Preview.QTGL)
5.カメラを起動します。これにより、プレビューウィンドウにカメラからのライブ映像が表示されます。
picam0.start()
picam1.start()
6.コードを10秒間停止します。これにより、カメラショットをフレーミングする時間が確保されます。もう少し時間が必要な場合は、この値を大きくしてください。
sleep(10)
7.各カメラからの画像を JPEG 画像にキャプチャします。
picam0.capture_file("cam0.jpg")
picam1.capture_file("cam1.jpg")
8. カメラを止めてください。
picam0.stop()
picam1.stop()
9.プレビュー ウィンドウを閉じます。
picam0.stop_preview()
picam1.stop_preview()
完全なコードリスト: Python によるデュアルカメラ
from picamera2 import Picamera2, Preview
from time import sleep
picam0 = Picamera2(0)
picam1 = Picamera2(1)
picam0.start_preview(Preview.QTGL)
picam1.start_preview(Preview.QTGL)
picam0.start()
picam1.start()
sleep(10)
picam0.capture_file("cam0.jpg")
picam1.capture_file("cam1.jpg")
picam0.stop()
picam1.stop()
picam0.stop_preview()
picam1.stop_preview()