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
実行すると下のようなプレビューウィンドウが起動し、そこにカメラの映像が表示されます!
Hello picamera2!
続きは次章で…
という事でpicamera2ライブラリを通してPythonからカメラのプレビュー画面を出す事が出来ました。プレビューについては幾つかパラメータがあるのですが、ちょっと長くなってきたので一端ここで切ります。それらについては次章で見ていく事にしましょう。
次章はこちら:
ではまた(^-^)/