ウェブカメラから返された各フレームでオブジェクトを追跡できます。オブジェクトが初めて検出された時期と、その後継続的に検出されるまでの期間に注意したい。ウェブカメラは、ユーザー入力によって閉じられるまで無期限にオンになります。
オブジェクトを検出するためのコードのセットは、cv2.VideoCapture() から次のフレームを読み取るために必要な while ループ内にあるため、私が望むことを行うための効率的で Pythonic な方法を思い付くことができません。
(timestamp,flag)
現在、各フレームのタプルを含むリストを追加しています。timestamp
python の値で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() のより良い代替手段はありますか?