gpt4 book ai didi

python ,opencv : duration of time an object is detected on webcam

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:28 26 4
gpt4 key购买 nike

我能够在我的网络摄像头返回的每一帧中跟踪一个对象。我想记下第一次检测到该物体的时间以及此后连续检测到该物体的持续时间。网络摄像头无限期开启,即直到它被用户输入关闭。

由于用于检测对象的代码集位于从 cv2.VideoCapture() 读取下一帧所需的 while 循环中,因此我无法想出一种高效的 p​​ythonic 方式来做我想做的事情。

现在我正在为每个帧附加一个包含元组 (timestamp,flag) 的列表。 timestamp 是来自 python 的 time.time() 的值,flag 是一个 bool 值,指示是否检测到对象。然后我总结了标志为"is"的时间戳的所有值。但这并不能完全满足我的需求。你能推荐一个更合适的方法吗?

*我希望 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() 更好的替代方法?

最佳答案

[time_first, time_last, got_first] 

如果 got_first 为假并且检测到人脸,您将 time_first 分配给 now() 并将 got_first 分配给是的。

当未检测到人脸时,您将 time_last 分配给 now() 并将 got_first 分配给 false。

import cv2
import time

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

print 'press esc to quit'

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

try:
faceRegion = faceCascade.detectMultiScale(camImage)
if ts[2] == False:
ts[0] = time.time()
ts[2] = True
except TypeError:
if ts[2] == True:
ts[1] = time.time()
ts[2] = False
faceFound.append([ts[0], ts[1]])
print 'check if front face is visible to camera'
pass

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

for list in faceFound:
print list[1] - list[0]

尽管我认为您的代码存在问题,但未检测到人脸。你可以打印 faceRegion 并看到,它是一个空元组。

关于 python ,opencv : duration of time an object is detected on webcam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19562378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com