我能够在我的网络摄像头返回的每一帧中跟踪一个对象。我想注意第一次检测到对象的时间以及此后持续检测到它的持续时间。网络摄像头无限期开启,即直到它被用户输入关闭。
由于用于检测对象的代码集位于从 cv2.VideoCapture() 读取下一帧所需的 while 循环内,因此我无法想出一种高效的 Pythonic 方式来做我想做的事情。
现在我正在(timestamp,flag)
为每个帧附加一个包含元组的列表。timestamp
是来自 python 的值time.time()
,flag
是一个布尔值,表示是否检测到对象。然后我总结了标志为“是”的所有时间戳值。但这并不能完全满足我的需求。你能建议一个更合适的方法吗?
*我希望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
. 对于我当前的要求,是否有更好的 time.time() 替代方法?