【解説】M5stickVのPythonプログラミング ~カメラ編~

M5stickV camera

こんにちは、メタエレ実験室管理人のけいです。
M5stickVの解説Part3です。
前回は、画像を表示するモジュールとクラスについての解説をしました。
まだ画像の使い方が分からない方は、ぜひ読んでみて下さい。

今回は、カメラから直に画像を取得して、表示させる方法をご紹介していきます。

カメラからの画像を表示させる

サンプルコード

今回使用するサンプルコードです。SiPEEDの公式ドキュメントのものです。

import sensor
import lcd
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
while 1:
    img = sensor.snapshot()
    lcd.display(img)

解説

一行目から解説していきます。

import sensor
import lcd

この2行はPythonのお決まりの文です。Pythonでは使いたいモジュールをインポートします。
今回はカメラを使いたいのでsensorモジュール、液晶に表示したいのでlcdモジュールをインポートします。

lcd.init()
sensor.reset()

lcd.init関数で液晶を初期化し、前の映っているものをリセットします。
sensor.reset関数は、カメラをリセットして初期化する関数です。

sensor.set_pixformat(sensor.RGB565)

この文は、カメラの出力のフレーム形式の設定です。
RGB565というのは、Rから順に5bit, 6bit, 5bitで表現される画像ということを示しています。
公式ドキュメントにRGB565がMaixPy開発ボードの推奨とされているので、これで行います。

sensor.set_framesize(sensor.QVGA)

この文は、カメラの出力のフレームサイズを設定する関数です。
つまり、解像度の設定を行います。
公式ドキュメントにQVGAが MaixPy開発ボードの推奨とされているので、これで行います。
QVGA = 320 * 240 解像度

sensor.run(1)

この文で画像の取り込みを開始します。
引数は1となっていますが、Trueなら開始、Falseなら停止サインを送ります。

while 1:
    img = sensor.snapshot()
    lcd.display(img)

Pythonのループ関数であるwhile文を用いて無限ループを作ります。
ループの中で、sensor.snapshot関数を使い画像オブジェクトを生成し、imgに代入します。
そして、lcd.display関数を使い、引数に画像オブジェクトを渡して液晶画面に表示します。
これがループで繰り返されるので、動画が液晶に表示されます。
ループを終了するためには、Ctrl + C キーを押してください。

結果

動かしてみると分かると思いますが、液晶に表示されている画像が左右上下反転されたものになっていると思います。
デフォルトでこのように表示されてしまいますので、追加のコードが必要になります。

反転させる

反転させる関数

画像を反転させるには、左右と上下の二種類があります。
左右を反転させるためには下のコードが必要です。

sensor.set_hmirror(1)

引数に 1 がありますが、Trueなら反転、Falseなら何もしないという関数なので、反転させるときTrue = 1とします。

上下を反転させるためには下のコードが必要です。

sensor.set_vflip(1)

これも先ほどと同じような引数の設定です。

コード

サンプルコードに反転させる関数を追加してみましょう。

import sensor
import lcd
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(1)
sensor.set_vflip(1)
sensor.run(1)
while 1:
    img = sensor.snapshot()
    lcd.display(img)

結果

画像が反転されて、自然な表示にすることができました。

参考にさせて頂いたサイト

まだ、情報が少なく、自分自身も勉強中のため間違っていたら、ご指摘よろしくお願い致します。

他のモジュールの使い方の解説も行っているので、ぜひ読んでみて下さい。