mjpeg_on_face_detection.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 顔検出時のMJPEG動画録画の例
#
# 注意: この例を実行するにはSDカードが必要です。
#
# OpenMV Camを使ってmjpegファイルを録画できます。レコーダーオブジェクトに
# JPEGフレームまたはRGB565/グレースケールフレームのいずれかを渡すことができます。録画が終わったら、
# VLCを使ってMjpegファイルを再生できます。Ubuntuを使用している場合は、
# 標準搭載の動画プレーヤーでも再生できます。
#
# この例では、OpenMV Camの顔追跡機能を使って
# mjpegを撮影する方法を示します。
import csi
import image
import time
import mjpeg
import random
import machine
csi0 = csi.CSI()
csi0.reset() # センサーをリセットして初期化します。
csi0.pixformat(csi.GRAYSCALE) # ピクセルフォーマットをRGB565(またはGRAYSCALE)に設定します
csi0.framesize(csi.QQVGA) # フレームサイズをQQVGA(160x120)に設定します
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()
m = mjpeg.Mjpeg("example-%d.mjpeg" % random.getrandbits(32))
clock = time.clock() # FPSを計測します。
for i in range(200):
clock.tick()
m.write(csi0.snapshot())
print(clock.fps())
m.close()
led.off()
print("Restarting...")