ラズパイ(Raspberry Pi)のPicamera2でカメラを使う方法
ラズパイでPythonからラズパイカメラ使うのに一苦労
Raspberry Pi用高解像度オートフォーカスカメラモジュール買ったので、久しぶりにラズパイでカメラ使ってみようと思ったら色々大変だったのでメモです。
普通のラズパイカメラモジュールのケースも記載していきます。
前提条件
- Raspberry Pi 4
- Raspberry Pi OS(64-bit) with Desktop 2022-01-28(Bullseye)
- Raspberry Piカメラモジュールv2
- Raspberry Pi用高解像度オートフォーカスカメラモジュール
カメラの最短の動かし方
最新のRaspberry Pi OS(Debian Bullseye)が、カメラ周り色々変わっていたのが原因でした。
通常のRaspberry Piカメラモジュールv2であれば、デフォルトの状態で、以下コマンドだけで動作確認できました。
$ libcamera-hello
Raspberry Pi用高解像度オートフォーカスカメラモジュールの動かし方
通常のRaspberry Piカメラモジュールv2を使う場合はここは飛ばしてください(実行すると動かなくなります)。
Raspberry Pi用高解像度オートフォーカスカメラモジュールは、以下のサイトを参考にセットアップが必要です。
具体的には以下コマンド実行して、再起動します。
$ wget -O install_pivariety_pkgs.sh https://github.com/ArduCAM/Arducam-Pivariety-V4L2-Driver/releases/download/install_script/install_pivariety_pkgs.sh
$ chmod +x install_pivariety_pkgs.sh
$ ./install_pivariety_pkgs.sh -p libcamera_dev
$ ./install_pivariety_pkgs.sh -p libcamera_apps
$ ./install_pivariety_pkgs.sh -p imx519_kernel_driver
libcamera-hello
コマンドでカメラが映ればOKです。
Picamera2での動かし方
Picamera2セットアップ
以下のaptコマンド一発でインストールできます。
$ sudo apt install -y python3-picamera2
Picamera2セットアップ(旧)
注:以下は古い情報ですが、参考までに残しておきます。今は上記の通りコマンド一発でインストール可能です。
Pythonでの制御はちょっと大変です。従来のPicameraからPicamera2にアップデートしているのでPicamera2をセットアップする必要があります。
以下公式サイトのREADMEは、上級者向けで手順が色々省略されています。
以下サイトが丁寧にセットアップ方法を解説してくださっていました。
自分が試した感じ、最短セットアップコマンドは以下になると思います。ビルドが必要なので、結構待ち時間があります。
sudo apt install -y libboost-dev
sudo apt install -y libgnutls28-dev openssl libtiff5-dev
sudo apt install -y libfmt-dev libdrm-dev
sudo apt install -y python3-pyqt5
sudo apt install -y meson
sudo pip3 install opencv
sudo pip3 install pyyaml ply
sudo pip3 install pyopengl
cd
git clone --branch picamera2 https://github.com/raspberrypi/libcamera.git
cd libcamera
meson build -Dpycamera=enabled
ninja -C build -j 2
sudo ninja -C build install
cd
git clone https://github.com/tomba/kmsxx.git
cd kmsxx
git submodule update --init
meson build
ninja -C build -j 2
cd
git clone https://github.com/RaspberryPiFoundation/python-v4l2.git
cd
git clone https://github.com/raspberrypi/picamera2.git
コマンドを打ち終わったら ~/.bashrc
に以下の行をエディタで追記します。
export PYTHONPATH=/home/pi/picamera2:/home/pi/libcamera/build/src/py:/home/pi/kmsxx/build/py:/home/pi/python-v4l2
エディタの代わりに以下のようなコマンドでも追記できると思います。
$ sh -c "echo \"export PYTHONPATH=/home/pi/picamera2:/home/pi/libcamera/build/src/py:/home/pi/kmsxx/build/py:/home/pi/python-v4l2\" >> ~/.bashrc"
Picmaera2自動セットアップコマンド
Picamera2のセットアップ作業をまとめたスクリプトを準備しました。
以下コマンドでセットアップができます。
$ curl -s https://raw.githubusercontent.com/karaage0703/raspberry-pi-setup/master/setup-picamera2.sh | /bin/bash
再起動すればPicamera2が使えるようになります。
Picamera2動作確認(静止画)
セットアップ終わったら、以下のようなスクリプトを作成して実行しましょう。
from picamera2.picamera2 import *
import time
picam2 = Picamera2()
picam2.start_preview(Preview.QTGL)
preview_config = picam2.preview_configuration()
capture_config = picam2.still_configuration()
picam2.configure(preview_config)
picam2.start()
time.sleep(5)
picam2.switch_mode_and_capture_file(capture_config, 'test.jpg')
実行したらtest.jpg
というファイルが生成されます。
~~ただ、ピンぼけ…フォーカス合わせる方法はまた分かったら追記します。~~追記しました。
Picamera2動作確認(動画)
OpenCVで動画表示をしたいときのサンプルソフトは以下となります。公式のサンプルなどを参考に自作しました。
coding: utf-8
# raspi cam2 demo
import cv2
from picamera2 import Picamera2
from libcamera import controls
camera = Picamera2()
camera.configure(camera.create_preview_configuration(main={"format": 'XRGB8888', "size": (640, 480)}))
camera.start()
camera.set_controls({'AfMode': controls.AfModeEnum.Continuous})
count_max = 0
if __name__ == '__main__':
count = 0
while True:
img = camera.capture_array()
key = cv2.waitKey(1)
if key == 27: # when ESC key is pressed break
break
count += 1
if count > count_max:
cv2.imshow('View', img)
count = 0
camera.close()
cv2.destroyAllWindows()
手軽に試したい場合は、以下コマンド実行すれば、上記スクリプトをダウンロードして実行することができます。
$ wget https://raw.githubusercontent.com/karaage0703/raspberry-pi-example/master/raspi_cam2_opencv.py
$ python3 raspi_cam2_opencv.py
画角設定
解像度によって画角が変わるので、画角が狭いなと感じたら解像度を調整しましょう。以下の表のfullと書いてある設定が広い画角設定です。
例えば上記のサンプルプログラムの解像度設定を以下のように変えると画角が広くなります。
camera.configure(camera.create_preview_configuration(main={"format": 'XRGB8888', "size": (1640, 1232)}))
フォーカスを合わせる方法
以下はRaspberry Pi用高解像度オートフォーカスカメラモジュールのための調整です。普通のラズパイカメラモジュールのピントは手作業で調整します(こちらの記事などが参考になります)。
追記:Raspberry Pi Camera Module 3であれば、オートフォーカス機能があります。上記のスクリプトのcamera.set_controls({'AfMode': controls.AfModeEnum.Continuous})
でオートフォーカスの設定をしています。
フォーカス調整に関しては、以下の記事を参考にしました。
ただし、ArduCAM/Arducam-Pivariety-V4L2-Driver.gitがそのままでは動かないのでFocus.py
のdefault
をdefault_value
に書き換える必要があります。ここに関しては、以下記事が大変参考になりました。
今回は、あらかじめ私の方で書き換えておいたリポジトリを以下コマンドでcloneします。
$ cd && git clone https://github.com/karaage0703/Arducam-Pivariety-V4L2-Driver
あとはマニュアルどおりです。まずはカメラを表示し続けます。
$ ibcamera-still -t 0
続いて、フォーカスの調整ツールでフォーカスを調整します。
$ cd Arducam-Pivariety-V4L2-Driver/focus
$ python3 FocuserExample.py -d /dev/v4l-subdev1
調整は以下のような画面で、矢印のUp/Downで見ながら調整します。
0だと以下のようにボケているので調整します。
900にするとくっきりしました。
セーブするときはctrl + c
を押しましょう。リセットするときはr
です。
スクリプトを見た感じ、v4l2でカメラをコントロールしているようなので、他に色々調整したい場合は、以下記事が参考になりそうです。
まとめ
ラズパイでカメラ使いたいだけなのに、めっちゃ大変でした。先人の知恵にめっちゃ助けられました(参考リンクとして載せています)。
まだ開発途中の過渡期なだけで、いずれpipでPicamera2は簡単にインストールできるようになると思います。そのときまでの参考情報としてよろしければ利用ください。
aptで手軽にインストールできるようになりましたので記事修正しました。
参考リンク
フォーカス調整
関連記事
変更履歴
- 2023/03/29 picamera2のアップデートにともない修正
- 2022/11/07 画角設定に関して追記
- 2022/04/03 動画の再生に関して追記
- 2022/03/30 文章を少修正
- 2022/03/22 フォーカスの調整に関して追記
Discussion