📷

ラズパイ(Raspberry Pi)のPicamera2でカメラを使う方法

2022/03/17に公開約6,800字

ラズパイでPythonからラズパイカメラ使うのに一苦労

Raspberry Pi用高解像度オートフォーカスカメラモジュール買ったので、久しぶりにラズパイでカメラ使ってみようと思ったら色々大変だったのでメモです。

普通のラズパイカメラモジュールのケースも記載していきます。

前提条件

カメラの最短の動かし方

最新のRaspberry Pi OS(Debian Bullseye)が、カメラ周り色々変わっていたのが原因でした。

通常のRaspberry Piカメラモジュールv2であれば、デフォルトの状態で、以下コマンドだけで動作確認できました。

$ libcamera-hello

Raspberry Pi用高解像度オートフォーカスカメラモジュールの動かし方

通常のRaspberry Piカメラモジュールv2を使う場合はここは飛ばしてください(実行すると動かなくなります)。

Raspberry Pi用高解像度オートフォーカスカメラモジュールは、以下のサイトを参考にセットアップが必要です。

https://www.arducam.com/docs/cameras-for-raspberry-pi/raspberry-pi-libcamera-guide/

具体的には以下コマンド実行して、再起動します。

$ 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セットアップ

Pythonでの制御はちょっと大変です。従来のPicameraからPicamera2にアップデートしているのでPicamera2をセットアップする必要があります。

以下公式サイトのREADMEは、上級者向けで手順が色々省略されています。

https://github.com/raspberrypi/picamera2

以下サイトが丁寧にセットアップ方法を解説してくださっていました。

https://note.com/arcana_tech/n/nfb2ea4e7ba8a

自分が試した感じ、最短セットアップコマンドは以下になると思います。ビルドが必要なので、結構待ち時間があります。

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で動画表示をしたいときのサンプルソフトは以下となります。公式のサンプルなどを参考に自作しました。

import cv2

from picamera2.picamera2 import *

camera = Picamera2()
camera.start_preview()
camera.configure(camera.preview_configuration(main={"format": 'XRGB8888', "size": (640, 480)}))
camera.start()

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 

フォーカスを合わせる方法

以下はRaspberry Pi用高解像度オートフォーカスカメラモジュールのための調整です。普通のラズパイカメラモジュールのピントは手作業で調整します(こちらの記事などが参考になります)。

フォーカス調整に関しては、以下の記事を参考にしました。

https://www.arducam.com/docs/cameras-for-raspberry-pi/raspberry-pi-libcamera-guide/

ただし、ArduCAM/Arducam-Pivariety-V4L2-Driver.gitがそのままでは動かないのでFocus.pydefaultdefault_valueに書き換える必要があります。ここに関しては、以下記事が大変参考になりました。

https://note.com/arcana_tech/n/nc271e3c70e02

今回は、あらかじめ私の方で書き換えておいたリポジトリを以下コマンドで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でカメラをコントロールしているようなので、他に色々調整したい場合は、以下記事が参考になりそうです。

https://qiita.com/airpocket/items/74f87cb22505d70d424a

まとめ

ラズパイでカメラ使いたいだけなのに、めっちゃ大変でした。先人の知恵にめっちゃ助けられました(参考リンクとして載せています)。

まだ開発途中の過渡期なだけで、いずれpipでPicamera2は簡単にインストールできるようになると思います。そのときまでの参考情報としてよろしければ利用ください。

参考リンク

https://note.com/arcana_tech/n/nfb2ea4e7ba8a

https://github.com/raspberrypi/picamera2

https://www.raspberrypi.com/documentation/accessories/camera.html

https://www.arducam.com/docs/cameras-for-raspberry-pi/raspberry-pi-libcamera-guide/

https://twitter.com/norifumi5001/status/1493582863467704320

https://akkiesoft.hatenablog.jp/entry/20220216/1644987070

https://www.raspberrypi.com/news/a-preview-release-of-the-picamera2-library/

https://zenn.dev/ijiwarunahello/articles/1fd6755ad53b0d

https://hellobreak.net/raspberry-pi-bullseye-libcamera/#Raspberry_Pi_OS「Bullseye」をお使いの方

https://kitto-yakudatsu.com/page-8384

https://blog.goo.ne.jp/pearlwing/e/a4c5a4e22bca874f06b6066923a28dbc

フォーカス調整

https://note.com/arcana_tech/n/nc271e3c70e02

https://qiita.com/airpocket/items/74f87cb22505d70d424a

関連記事

https://zenn.dev/karaage0703/articles/3d3d443244da2c

https://karaage.hatenadiary.jp/entry/2016/07/18/073000

変更履歴

  • 2022/04/03 動画の再生に関して追記
  • 2022/03/30 文章を少修正
  • 2022/03/22 フォーカスの調整に関して追記

Discussion

ログインするとコメントできます