🎥

Raspberry Pi Zero2 Wでカメラ・OpenCV環境を整える

2024/01/16に公開
1

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