2

ウェブカメラから返された各フレームでオブジェクトを追跡できます。オブジェクトが初めて検出された時期と、その後継続的に検出されるまでの期間に注意したい。ウェブカメラは、ユーザー入力によって閉じられるまで無期限にオンになります。

オブジェクトを検出するためのコードのセットは、cv2.VideoCapture() から次のフレームを読み取るために必要な while ループ内にあるため、私が望むことを行うための効率的で Pythonic な方法を思い付くことができません。

(timestamp,flag)現在、各フレームのタプルを含むリストを追加しています。timestamppython の値でtime.time()flagオブジェクトが検出されたかどうかを示すブール値です。次に、フラグが「はい」のタイムスタンプのすべての値を合計します。しかし、これは私が望むものを私に与えてくれません。より適切な方法を提案できますか?

* cv2.detectionDuration() のような一般的な関数が opencv にあればいいのに:P

- 編集 -

正面の顔を追跡するためのコードは次のとおりです。

import cv2
import time

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
capture = cv2.VideoCapture(0)
keyPressed = -1
faceFound = []

print 'press esc to quit'

while(keyPressed != 27):
    ret, camImage = capture.read()
    cv2.imshow('camImage', camImage)

    try:
        faceRegion = faceCascade.detectMultiScale(camImage)
        timestamp = time.time()
        flag = 1
        faceFound.append((timestamp,flag)) 
    except TypeError:
        timestamp = time.time()
        flag = 0
        faceFound.append((timestamp,flag))
        print 'check if front face is visible to camera'
        pass

    keyPressed = cv2.waitKey(1)
cv2.destroyAllWindows()

timeDelta = 0
for tup in faceFound:
    if tup[1] == 1:
        timeDelta += tup[0]
print timeDelta

また、timeDelta を として表示できるように、より良い形式を取得するのを手伝ってもらえますかday:hour:min:sec:microsec。現在の要件に対して time.time() のより良い代替手段はありますか?

4

2 に答える 2