【问题标题】:How to check if eyes are not detected for x amount of time如何检查是否在 x 时间内未检测到眼睛
【发布时间】:2021-05-03 19:37:18
【问题描述】:

我目前正在编写一个程序,该程序使用带有 haar 级联的 openCV 眼睛。如果几秒钟内没有检测到眼睛,我需要它来运行一些代码,而且我不知道如何使用时间库来检查时间。这是我尝试过的一个例子。

if len(eyes) == 0:
    if noEyeTime - startTime > 2:
        print("closed for more than 2 seconds")
        time.sleep(2)
        startTime = time.time()
    noEyeTime = time.time()
# The variables are declared outside of the while loop

这是我写的检查(它在一个 while True 循环内),我尝试移动变量更新,但我不知道如何检查是否没有检测到眼睛 x 量时间。

我也读过这篇文章: Python if condition true for x amount of time

但该解决方案对我不起作用,因为程序仍需要运行,因此 time.sleep() 不是一个选项。

提前致谢。

【问题讨论】:

  • 你需要在检测指令之前设置定时器startTime = time.time(),并在循环过程中累计该时间,直到满足条件(应该在while循环中)noEyeTime - startTime > 2,然后你可以返回TrueFalse 或任何你想要的结果。

标签: python opencv if-statement


【解决方案1】:

感谢 Ritesh 的想法,我将 startTime 移动到检测到眼睛的位置,然后将其与当前未检测到眼睛的时间进行比较。代码如下所示:

# Writes to log file when eyes are detected
if anterior != len(eyes):
    anterior = len(eyes) 
    log.info("faces: "+str(len(eyes))+" at "+str(dt.datetime.now()))
    startTime = time.time()

if len(eyes) == 0:
    elapsedTime = endingTime - startTime
    if elapsedTime > 2:
        print("eyes closed for 2 seconds")
    endingTime = time.time()

【讨论】:

    【解决方案2】:

    您可以通过在开始眼睛无眼睛检测之前创建一个starting_noEye=time.time() 并在代码的无眼睛检测部分结束时创建一个ending_noEye=time.time() 来获得时间轨迹。 noEyeTime 可以分配给这些差异:- noEyeTime=ending_noEye-starting_noEye。这将为您提供未检测到眼睛的时间量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 2012-03-20
      • 2012-08-27
      • 1970-01-01
      • 2011-09-01
      • 2015-04-23
      • 2015-06-17
      相关资源
      最近更新 更多