snapshot_on_face_detection.py

# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 顔検出時のスナップショットの例
#
# 注意: この例を実行するにはSDカードが必要です。
#
# この例では、OpenMV Camの顔追跡機能を使って
# 写真を撮影します。

import csi
import image
import random
import machine

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()
    print("Face detected! Saving image...")
    csi0.snapshot().save("snapshot-%d.jpg" % random.getrandbits(32))  # 写真を保存します。
    led.off()

results matching ""

    No results matching ""