Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

2023年1月に新しく発売されたRaspberry Pi用のカメラモジュールV3を試しました。前作V2も当時は綺麗な画質と思いましたが、V3はオートフォーカスが搭載されたことも手伝いV2とは段違いです。何もオプション(引数)を指定しなくても満足できます。

V2はどうしてもピントが合わないこともあり、被写体が分かれば良いという割り切りも必要でした。V3はガラケーに搭載されていたカメラに近い印象ですね。

コマンド解説を含め、ファーストインプレッションを情報を交えてザッとお伝えします。

はじめはコマンドで実行

ラズパイ4に繋いだcamera_module_v3

手持ちのパーツを台にしたカメラモジュールV3(付属していません)

ラズパイに接続することもあり、コマンド1行で撮影させることができます。そういう意味では静止画や動画を簡単に取得できます。

libcamera-jpeg -o test.jpg

-oオプションは出力先の意味で、ファイル名を指定しています。

次にPythonコードで記述して、.pyファイルを実行して利用することが一般的な使い方になります。

#!/usr/bin/python3

from picamera2 import Picamera2, Preview
import time

picam2 = Picamera2()
camera_config = picam2.create_preview_configuration()
picam2.configure(camera_config)
picam2.start_preview(Preview.QTGL)
picam2.start()
time.sleep(2)
picam2.capture_file("test.jpg")

コードの基本は次のようになります。

!/usr/bin/python3を除いて)

  1. 最初の2行でimport宣言(利用するライブラリなど)
  2. カメラの起動
  3. プレビュー用の設定を生成
  4. カメラ設定(Configure)に先の設定を適用
  5. プレビューウィンドウを実行
  6. カメラの実行
  7. プレビューのまま2秒間待つ
  8. JPEGファイルとして画像を取得する

面倒でしょうか?

Picamera2はとても便利で、単に撮影するだけなら、もう少し端折ることもできます。

#!/usr/bin/python3

from picamera2 import Picamera2
picam2 = Picamera2()
picam2.start_and_capture_file("test.jpg")

いきなり3行でOKです。(!/usr/bin/python3を除く)

先程の基本形からすると、1行目と3行目、start_andを付けた10行目だけになりました。

プレビューをさせたくない場合、picam2.start_preview(Preview.NULL)を追加します。

動画の場合は3行目を次のようにVideo用の記述にします。durationは5秒間の撮影という意味です。

picam2.start_and_record_video("test.mp4", duration=5)

Pythonコードなので、拡張子.pyで保存して、ターミナルなどで実行して使用するのが基本となります。(ホームフォルダに置いたpyファイルの場合)

python ~/ファイル名.py

Picamera2というツールソフトは、オプションで様々な設定が可能です。これは以前のPicamera1もそうでしたが、より使いやすくなっています。

記述が長ったらしい反面、言葉として理解できるのは簡単な印象です。

ラズパイとの接続と確認

ラズパイとの接続は、付属している専用のフラットケーブルでおこないます。このとき、フラットケーブルの差し込みは、向きを間違えないようにします。仮に向きが逆だったとしても刺さってしまいます。青色の帯側が3.5mmアナログジャック側になり、反対は色がありません。

ラズパイ専用カメラの接続図(CSI)

接続は青い部分が3.5mmアナログポート側になる

以前のように、raspi-configといったいくつかの手順は必要無く、コマンド1行で直ぐに確認できます。Picamera2自体も最初からRaspberry Pi OSに組み込まれています。

Picamera2からは、接続の確認がより簡単です。次のコマンドでエラーが無ければプレビューウィンドウが立ち上がって画像表示を確認できます。

libcamera-hello

エラーの場合(接続がされていない or 壊れている)

libcamera-helloのエラー画面

接続がされていれば、プレビューと同じようにウィンドウが立ち上がりますが撮影はしません。

プレビューの画面でずっと表示させたい場合、オプション-tを0とすることで無限で表示させられます。

libcamera-hello -t 0

終了させるには、Ctrl + C です。

環境は、Raspberry Pi 4(4GB)Raspberry Pi 0S Bullseye(64bit)microSDカードで作業しました。

様々なオプションとフィルター

Picamera2には、コマンドベースでもPythonコードとしてもオプションの項目が沢山あります。

ここでいうオプションは、設定できるパラメーターのことです。数も多く細かいのですべてはご紹介できませんが、一部をサラッと触れておくと・・・、

例えば、画像の取得サイズなどを指定するにはパラメーター"size"に対して、(width.height)で指定します。CameraConfigurationクラスに設定していく形で説明されています。

静止画ならstill_configuration、動画ならvideo_configurationなどです。

from picamera2 import Picamera2
picam2 = Picamera2()
picam2.still_configuration.size = (800, 600)
picam2.configure("still")

コマンドラインでなら次です。

libcamera-jpeg -o test.jpg --width 800 --height 600

現在のカメラで使える解像度などは次のコマンドで知ることができます。

 libcamera- hello --list-cameras

他にもPythonのサンプルコードをそのまま実行してみるのはオススメです。

例:オーバーレイのフィルターを充てる

#!/usr/bin/python3

import time

import numpy as np

from picamera2 import Picamera2, Preview

picam2 = Picamera2()
picam2.configure(picam2.create_preview_configuration())
picam2.start_preview(Preview.QTGL)
picam2.start()
time.sleep(1)

overlay = np.zeros((300, 400, 4), dtype=np.uint8)
overlay[:150, 200:] = (255, 0, 0, 64)
overlay[150:, :200] = (0, 255, 0, 64)
overlay[150:, 200:] = (0, 0, 255, 64)

picam2.set_overlay(overlay)
time.sleep(2)

例:3枚を0.5秒ずつ撮影する場合

#!/usr/bin/python3

from picamera2 import Picamera2

picam2 = Picamera2()

picam2.start_and_capture_file("test.jpg")

picam2.start_and_capture_files("test{:d}.jpg", num_files=3, delay=0.5)

最後の行のように、num_files=3deley=0.5といったオプション項目が沢山あります。

参考となるサンプルコードは、githubに公開されています。exsample内やtest内を実行してみると動きが分かるでしょう。

picamera2/examples at main · raspberrypi/picamera2

libcamera2のマニュアルとして、「picamera2-manual.pdf」もあります。以下のページ真ん中ら辺りにあるPicamera2 Python libraryのリンクから閲覧&ダウンロード可能です。

コマンドライン

少しややこしいのですが、コマンドラインで実行する記述はまた別です。

これまでのrpistillコマンドとは若干が変わっていて少し混乱しますね。(例えば-vf--vflipだったり)

次のコマンドオプションは、-o 出力ファイル名 でできる画像ファイル名を指定し、--rotation 180は上下反対、--hdrがHDRの有効です。

libcamera-jpeg -o test.jpg --rotation 180 --hdr

カメラの設置位置(ケーブルが上部側)だと上下が反対に映りますから、取得する際に反対にしています。

動画ならlibcamera-vidコマンドです。-tはタイムアウトで単位はミリ秒なので、10,000なら10秒。

libcamera-vid -t 10000 -o test.h264

コマンドラインで利用するオプションはドキュメントページで確認できます。

https://www.raspberrypi.com/documentation/computers/camera_software.html#common-command-line-options

これまでのPicamera1のオプションは参考までに。以前のraspistillコマンドに似たlibcamera-stillコマンドなら同じオプションが使えたりして、なんだか余計に混乱しています。できることは大体同じです。

Picamera1のコマンド例

画像認識で使う

Picamera2に加え、追加のソフトウェアを導入すれば、画像認識などの学習に使えます。

Raspberry Pi OSで使うなら、aptとpip3でインストールしてください。それぞれの利用はあくまでもarm環境です。本家とは若干異なることもあります。

OpenCV

sudo apt install -y python3-opencv
sudo apt install -y opencv-data

TensorFlow Lite

pip3 install tflite-runtime

FFmpeg

FFmpegはRaspberry Pi OSには既にインストールされています。通常は必要ないコマンドです。

sudo apt install -y ffmpeg

■Pi 5は8GBモデルがオススメ

ネットワークストリーム

プログラミングとしてのハードルは上がりますが、ライブストリーミングとして配信することも可能です。FFmpegで撮影した動画をエンコーディングさる処理を追加して配信したり、決まったルールで保存させるのも良いでしょう。Zero系では処理が少し遅いです。

家庭内の見守りカメラなどに現実的なプロジェクトです。

ネットワーク系だとプログラミングや環境構築が少し難しいかも知れません。mjpg-streamerなどのパッケージソフトを使っても良いでしょう。

GitHub

GitHub - jacksonliam/mjpg-streamer: Fork of http://sourceforge.net/projects/mjpg-streamer/ Fork of http://sourceforge.net/projects/mjpg-streamer/ - jacksonliam/mjpg-streamer

HDRも装備

カメラモジュールV3の箱

下がHDRオプション有

HDRは聞いたことがあると思います。iPhoneのカメラでもありますよね。High Dynamic Range(ハイダイナミックレンジ)の略です。

暗い部分も明るく、全体的に色鮮やかになるアレです。

今回のカメラモジュールV3は、動画の撮影中もHDRを適用できます。動画に適していると記述もありました。

消費電力

今回のカメラモジュールV3は、2Wの消費電力とありました。前作のv2は1.4Wだった模様です。

複合的に何か追加で実装する場合は、消費電力も考慮しないとなりませんが、カメラモジュールV3単独でテストしたRaspberry Pi 4 に5V3Aのアダプターでは特に問題ありません。

結果がすぐに分かるのがイイ

日本円価格も上がってしまったカメラモジュールV3ですが、これまでのV2同様にソニー製で、全ての機能に渡りバージョンアップしています。特にオートフォーカスはサードパーティ製しか搭載していなかったので、公式から発売されたのは嬉しい。

画質は申し分ないと思います。位置づけとしては、HighQualityカメラより下の性能となっています。とはいえV3の利点も多く万能の印象でした。

プログラミングもPythonですし、どのように画像や動画を取得したいのか、結果がすぐに分かるのでトライアル&エラーにはもってこいのデバイスです。

V1やV2の頃に試したことを、またV3でトライしてみたいと思いました。

まだ専用のケースがまだ販売されていないことが残念です。

カメラユニットがモロに出ていますから、簡単に破損させてしまう自信が出てしまいますよ!! 今回は以前のV2で使ったアダプタを無理矢理に取り付けて試しました。簡易的でもマズマズでした。

動画はご紹介していませんが、カメラの激しい動きや明るさの急変化が無ければ非常に綺麗でした。やはり定点観測には良さそうです。

以上、カメラモジュールV3のファーストインプレッションでした。