picamera2でカメラの映像をプレビューする(Raspberry Pi、Python)

 以前Raspberry Pi 4にカメラモジュールを取り付けて、ターミナルからテスト表示する所をやってみました。詳しくはこちら:

初期設定済みのカメラに対してターミナルから、

libcamera-hello

と打ち込むだけでプレビューウィンドウが出ます。これはlibcamera-appsというアプリケーションパッケージをインストールした時に作成される「libcamera-hello」というアプリケーションを使っているだけです。

 今回はこのカメラ操作をPythonで行ってみます。ありがたい事にラズパイOSにはデフォルトでPythonが入っているので、OSを入れただけですぐにPythonコードを書く事が出来ます。

前提

カメラモジュール

ターミナルでlibcamera-helloを打ち込んでプレビューが出ていればOKです。

テキストエディタ

 テキストエディタでもGeany(ラズパイOS付属のコードエディタ)でもVisual Studio CodeでもOKなので、Pythonのコードを作成する環境をご用意ください。

picamera2ライブラリ

 Raspberry Pi OSは2022.9.6に更新があり、カメラモジュールをPythonから扱えるpicamera2ライブラリを含むようになりました。この日付以降のラズパイOSを使っている方はすぐにコードを描き始められます。それ以前のラズパイの方は以下のコマンドでOSを更新すると使えるようになるはずです:

sudo apt update && sudo apt full-upgrade

picamera2が組み込まれているかは以下のコマンドでチェックできます:

pip list

pipというのはPythonのライブラリを管理するアプリケーションです。Pythonに何か新しいライブラリを組み込みたい場合に使います。listコマンドは現在組み込まれているPythonのライブラリを一覧表示してくれます。ずら~っと出て来るのでそこに「picamera2」があればOK。

picamera2でプレビュー表示

 では早速始めましょう。試しに10秒間プレビューを表示するコードを書いてみます:

 #Picamere2で映像を表示 
 #picamera2というライブラ入りにPicamera2とPreviewというクラスがある 
from picamera2 import Picamera2, Preview
import time
 #Picamera2のオブジェクトを作成 
pc2 = Picamera2()
 #プレビュー表示モードをQTGLに指定して  #プレビューウィンドウを起動 
pc2.start_preview( Preview.QTGL )

# カメラを起動(プレビュー表示)
pc2.start()

# 10秒間表示
time.sleep( 10 )  

最初なので詳細に説明しますね。

from ~ import ~

from picamera2 import Picamera2, Preview

Pythonのコードには大抵こんな感じの「import」構文が記載されています。これは使いたいライブラリを選択しているんですね。fromの後ろに具体的なライブラリ名(pip listで出て来る名前)を記載します。実際pip listをターミナルで叩くと、

ほら、ちゃんと「picamera2」がありますよね。これです(^-^)。ちなみに、Pythonは大文字小文字を区別する言語なので注意して下さい。

 続くimportはpicamera2ライブラリに含まれるモジュールを指定します。モジュールは「機能の一塊」というイメージですね。色々なモジュールが細かい機能別に整理されていて、それらを駆使してカメラの映像を出すんですね。今回は「Picamera2(文頭大文字注意!)」と「Preview」というモジュールを使うため、2つを併記して宣言しています。

 その下に、

import time

というのがあります。timeは時間を扱いたい時に使うモジュールです。これはPythonのデフォルトライブラリに含まれているためfromを書かずに直importで使えます。

Picamera2オブジェクト

pc2 = Picamera2()

 Picamera2モジュールは上のようにPicamera2()とする事でその複製品を一つ生み出す事が出来ます。それを「オブジェクト」と呼びます。モジュールを直接叩くのではなくて、複製品を作って扱うんですね。その複製品をpc2という変数に格納しています。

 Picamera2オブジェクトはカメラを扱う管理者で、ラズパイに搭載しているカメラにアクセスしてくれる人です。

プレビューウィンドウを表示

pc2.start_preview( Preview.QTGL )

 Picamera2.start_preview()というメソッドを呼び出すと、プレビューウィンドウを起動してくれます。ただし、これはウィンドウを表示するだけで、映像は映し出してくれません。フレームだけ見えるようにするっていうイメージですね。

 引数のPreview.QTGLについては色々濃ゆいので後述します。

映像表示開始

pc2.start()

 Picamera2.start()でカメラの映像をプレビューウィンドウに表示します。このメソッドを呼ばないと真っ黒なウィンドウが出るだけです。

10秒待つ

time.sleep( 10 )  

 timeモジュールのsleepメソッドを呼び出すと、プログラムがそこで指定じかんだけ待ち状態になります。引数には秒数を指定します。小数を用いれば細かい時間も指定できます。

 ちなみに今の内に認識しておいて欲しいのですが、Pythonに限らず、プログラムの世界のsleep関数はあまり正確ではありません。これはどのOSもタイマー精度が高くないからです。上の10秒も10.0000秒とは全然なりません。10.1秒かもしれないですし、9.9秒かもしれません。その位揺れます。

Pythonコードの実行

 さて上記のコードを適当なファイル名で保存します。ここでは「hello_picamera2.py」としておきましょう。.pyはパイソンコードの標準的な拡張子です。

 作成したパイソンコードはターミナルから以下のようなコマンドで実行する事ができます:

python hello_picamera2.py

 実行すると下のようなプレビューウィンドウが起動し、そこにカメラの映像が表示されます!

被写体が適当でスミマセン…(T-T)

Hello picamera2!

続きは次章で…

 という事でpicamera2ライブラリを通してPythonからカメラのプレビュー画面を出す事が出来ました。プレビューについては幾つかパラメータがあるのですが、ちょっと長くなってきたので一端ここで切ります。それらについては次章で見ていく事にしましょう。

次章はこちら:

ではまた(^-^)/

この記事が気に入ったらサポートをしてみませんか?