我能够跟踪我的网络摄像头返回的每个帧中的一个对象。我想记下物体第一次被检测到的时间,以及此后持续检测到的持续时间。网络摄像头将无限期打开,即直到用户输入关闭。在
由于用于检测对象的代码集位于while循环中,需要该循环从cv2.VideoCapture()读取下一帧,因此我无法想出一种高效的python方法来执行我想要的操作。在
现在我为每个帧附加一个带有元组(timestamp,flag)的列表。timestamp是python的time.time()中的值,flag是一个布尔值,用于指示是否检测到对象。然后,我汇总时间戳的所有值,其中flag为“Yes”。但这并不能完全满足我的需要。你能建议一个更合适的方法吗?在
*我希望opencv中有一个像cv2.detectionDuration()这样的泛型函数: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。有更好的替代品吗时间。时间()满足我目前的需求?在