Raspberry Pi Zero2 Wでカメラ・OpenCV環境を整える
Raspberry Pi OSのベースがBullseyeベースになっていろいろカメラ関連が変わったのでまとめておきます。
カメラの設定
パッケージの追加
必要なパッケージを追加します。
sudo apt install libcamera-apps
デバイスツリーの設定
次に、/boot/config.txtにカメラ用のdevice treeの設定を追記します。
公式カメラV1の場合は以下の通りになります。
dtoverlay=ov5647
指定するパラメータは以下の通り(出展元はこちら:https://www.raspberrypi.com/documentation/computers/camera_software.html#introducing-the-raspberry-pi-cameras)
Camera Module | In /boot/firmware/config.txt |
---|---|
V1 camera (OV5647) | dtoverlay=ov5647 |
V2 camera (IMX219) | dtoverlay=imx219 |
HQ camera (IMX477) | dtoverlay=imx477 |
GS camera (IMX296) | dtoverlay=imx296 |
Camera Module 3 (IMX708) | dtoverlay=imx708 |
IMX290 and IMX327 | dtoverlay=imx290,clock-frequency=74250000 or dtoverlay=imx290,clock-frequency=37125000 (both modules share the imx290 kernel driver; please refer to instructions from the module vendor for the correct frequency) |
IMX378 | dtoverlay=imx378 |
OV9281 | dtoverlay=ov9281 |
動作確認
デバイスツリーの修正が終わったら再起動して確認します。
以下のコマンドで確認できます。
vcgen_cmd get_camera
実行すると以下のような結果が出力されます。libcamera interface=1になっていれば使用可能です。以下の出力の中でdetected=0となっていますが、これはraspi-configでlegacy camera supportを有効にすると1になりますが、公式のV3以降では使えません。
supported=1 detected=0, libcamera interfaces=1
次に撮影した画像を確認します。
以下のコマンドを実行し、画像を撮影します。
libcamera-still -o test.jpg
実行すると何秒間かプレビューが表示され、その後test.jpgというファイルが保存されます。(sshなどで実行した場合はプレビューではなくキャプチャーの状況が表示される)保存された画像が正常であることを確認します。
Pythonのライブラリを追加
Pythonでカメラを制御するためのライブラリを追加します。
pip3 install picamera2
ライブラリ追加後、動作を確認します。
以下のスクリプトを実行し、test.jpgという画像ファイルが正常に保存されていれば正常に動作できています。
import time
from picamera2 import Picamera2
cm = Picamera2()
config_cap = cm.create_still_configuration()
camera.configure(config_capture)
camera.start()
camera.capture_file("test.jpg")
OpenCVのインストール
以下の通り必要なパッケージなどを追加します。
sudo apt install libavutil56 libcairo-gobject2 libgtk-3-0 libqtgui4 libpango-1.0-0 libqtcore4 libavcodec58 libcairo2 libswscale5 libtiff5 libqt4-test libatk1.0-0 libavformat58 libgdk-pixbuf2.0-0 libilmbase23 libjasper1 libopenexr23 libpangocairo-1.0-0 libwebp6
sudo pip3 install opencv-python==4.5.5.64
以下のスクリプトを実行し、opencvが正常にインストールできたことを確認します。
import cv2
print(cv2.__version__)
実行後、指定したOpenCVのバージョンが表示されます。
まとめ
- Raspberry Pi Zero 2WとBullseyeベースのOSでカメラを使えるようにする手順をまとめました。
- OPenCVとカメラを使ってPythonで画像処理を行うための環境を作る手順をまとめました。
以上でカメラを使ってOpenCVで画像処理を行う環境が整えられます。
これをベースに機械学習などを行っていきます。
2024/1/25追記
Raspberry Pi Zero2 Wで公式カメラV3を使うと
[2:49:37.119223758] [7031] ERROR V4L2 v4l2_videodevice.cpp:1241 /dev/video0[13:cap]: Unable to request 1 buffers: Cannot allocate memory
こんなエラーが出る場合がある。その場合、cmdline.txtの最後にcm=100M(100Mの数値はメモリ容量に応じて適宜設定)すると良さそうです。
Discussion
もしかしたらimport忘れてるかもです、、、
from libcamera import controls