gif_on_face_detection.py

# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 顔検出時のGIF動画録画の例
#
# 注意: この例を実行するにはSDカードが必要です。
#
# OpenMV Camを使ってgifファイルを録画できます。レコーダーオブジェクトに
# RGB565フレームまたはグレースケールフレームを渡すことができます。写真編集ソフト
# (GIMPなど)を使って、Webにアップロードする前にGifを圧縮・最適化してください。
#
# この例では、OpenMV Camの顔追跡機能を使って
# gifを撮影します。

import csi
import image
import time
import gif
import machine
import random

csi0 = csi.CSI()
csi0.reset()  # カメラセンサーを初期化します。
csi0.pixformat(csi.GRAYSCALE)  # ピクセルフォーマットをRGB565(またはGRAYSCALE)に設定します
csi0.framesize(csi.QVGA)  # フレームサイズをQVGAに設定します
csi0.snapshot(time=2000)  # 設定が反映されるまで待ちます。

led = machine.LED("LED_RED")

# 顔検出用のHaarCascadeを読み込みます。これはOpenMV Camが
# 以下のfind_features()メソッドで顔を検出するために使用するオブジェクトです。OpenMV
# Camにはfrontalface用のHaarCascadeが内蔵されています。デフォルトでは
# HaarCascadeの全ステージが読み込まれます。ただし、処理速度を上げるために
# 精度を犠牲にしてステージ数を調整することもできます。frontalface用HaarCascadeには25の
# ステージがあります。
face_cascade = image.HaarCascade("/rom/haarcascade_frontalface.cascade", stages=25)

while True:
    print("About to start detecting faces...")
    csi0.snapshot(time=2000)  # ユーザーが準備するための時間を与えます。

    print("Now detecting faces!")

    diff = 10  # 10フレーム連続で検出できたら顔を検出したとみなします。
    while diff:
        img = csi0.snapshot()
        # しきい値は0.0から1.0の間で設定できます。しきい値を高くすると
        # 検出率は上がりますが誤検出も増えます。scale値は
        # マッチングスケールを制御し、より小さな顔を検出できるようにします。
        faces = img.find_features(face_cascade, threshold=0.5, scale=1.5)

        if faces:
            diff -= 1
            for r in faces:
                img.draw_rectangle(r)

    led.on()
    g = gif.Gif("example-%d.gif" % random.getrandbits(32), loop=True)

    clock = time.clock()  # FPSを計測します。
    for i in range(100):
        clock.tick()
        # clock.avg()はフレーム間のミリ秒を返しますが、gifの遅延の単位は
        g.add_frame(csi0.snapshot(), delay=int(clock.avg() / 10))  # センチ秒(1/100秒)です。
        print(clock.fps())

    g.close()
    led.off()
    print("Restarting...")

results matching ""

    No results matching ""