4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Raspberry Pi 5】PiCamera2をDockerコンテナで動かす方法

Last updated at Posted at 2024-03-07

はじめに

Bullseye以降からRaspberryPiOSのカメラ制御の仕様が変わり、従来のraspistillからlibcameraに置き換えられました。
またこれに伴いPythonのライブラリも変更されOpenCVでは制御できなくなりlibcameraベースのpicamera2が必須になりました。

RaspberryPiOS(Bullseye以降)にはPiCamera2とlibcameraがプリインストールされているためホスト側では難無くカメラを使用できますが、仮想環境においてはそもそも前提となるlibcameraの構築手順の情報が乏しく、Pythonライブラリの依存性の問題でほとんどの方が苦労していると思います。

ここではDockerコンテナ内でカメラを制御する方法を確立しまとめています。
具体的なユースケースやプロジェクトの要件に合わせてDockerfileをカスタマイズしてください。

ソースコードはこちらに載せています。

実行環境例

こちらでは以下の環境で動作できました。
始める前にはRaspberry Piにカメラモジュールが接続され、有効化されていることを確認してください。

  • Raspberry Pi 5(8GB)
  • Raspberry Pi OS 64bit Bookworm(Release 2023-12-05)
  • Docker及びDocker Compose
  • Camera Module v3

image.png

全体構成

app
|-- code
|   `-- camera.py
|-- docker-compose.yml
`-- Dockerfile

Dockerイメージ

RaspberryPiOSをベースイメージ化した以下のイメージを使用しています。
https://github.com/dtcooper/raspberrypi-os-docker

FROM dtcooper/raspberrypi-os:python3.11-bookworm

RUN apt update -y && apt upgrade -y && apt install git vim -y

#libcamera
RUN apt install libcamera-tools libcamera-apps-lite -y
RUN apt install libcap-dev libcamera-dev -y
RUN apt install libatlas-base-dev libopenjp2-7 libkms++-dev libfmt-dev libdrm-dev -y
RUN pip install rpi-libcamera rpi-kms

#picamera2
RUN apt install -y python3-picamera2 --no-install-recommends
RUN pip install picamera2

WORKDIR /code

Dockerコンテナはカメラハードウェアとのやり取りに特権アクセスが必要です。
privilegedフラグは、コンテナがホストシステムのデバイスにアクセスするために使用されます。
また、カメラのデバイスファイルにアクセスできるように/dev/video0run/udev:roディレクトリをマウントしています。

docker-compose.yml
version: '3.3'
services:
    picamera2:
        build: .
        stdin_open: true
        tty: true
        container_name: picamera2
        volumes:
            - ./code:/code
            - /run/udev/:/run/udev:ro
        devices:
            - /dev/video0:/dev/video0
        command: bash
        privileged: true

カメラスクリプト

camera.py
from picamera2 import Picamera2

picam2 = Picamera2()
picam2.start_and_capture_file("test.jpg", show_preview=False)

起動方法

$ docker-compose up -d

カメラスクリプトの実行

Dockerコンテナ起動後は/codeディレクトリに配置されたcamera.pyという名前のPythonスクリプトを実行します。
これでtest.jpgという名称の静止画が出力されます。

$ docker-compose exec picamera2 bash
$ python3.11 camera.py

または

$ docker-compose exec picamera2 python3.11 camera.py

最後に

PiCamera2は自動設定を使用しない限り、接続するカメラに応じて設定を変える必要があります。
個別に設定する場合は/boot/firmware/config.txtをコンテナにマウントする必要があるかもしれません。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?