Python:如果检测到 X 超过 T 秒:

Posted

技术标签:

【中文标题】Python:如果检测到 X 超过 T 秒:【英文标题】:Python: if X is detected more than T seconds: 【发布时间】:2021-04-23 07:47:02 【问题描述】:

我正在寻找知识。

我是 python 新手,需要用相机 Gravity: HuskyLens 做一个项目。 它允许您在检测到面部时显示块(在面部周围,它正在总结跟踪) 而且我想,当我检测到一个块时,知道它是否被检测到超过 7 秒。

import time
import json
from huskylib import HuskyLensLibrary

# Initialize
#hl = HuskyLensLibrary("I2C", "", address = 0x32)
hl = HuskyLensLibrary("SERIAL", "/dev/ttyUSB0", 3000000)

# Change to face recognition algorithms
hl.algorithms("ALGORITHM_FACE_RECOGNITION")

timer = time.time()

while True:
    blocks = hl.requestAll()

    for block in blocks:
        if block.type == "BLOCK": # If a block is detected
            print("Face !")
            if BLOCK DETECTED MORE THAN 7 SECONDS: # If a block is detected more than 7 seconds
                print("SCREAMER ! BOO !")
                time.sleep(0.5)
        else:
            print("No Face !")
            time.sleep(0.5)

我不知道它是否足够清楚,我对任何能让我进步的信息感兴趣

ps:我已经去时间图书馆逛了一圈,但我没能理解一切,因此找到了我的快乐。

【问题讨论】:

【参考方案1】:

我可能错了,但是你可以尝试追踪最新的区块是什么,然后只要最新区块的类型是"BLOCK",你就可以增加计时器。

我的意思:

face_apparition_time = 0  # We haven't seen a face yet, so apparition time is 0
# Gives a time in seconds since a fixed point we don't control, we'll use it as a checkpoint
timer = time.time()
last_block_seen = None  # Begin with None, we haven't seen any block yet

while True:
    blocks = hl.requestAll()

    for block in blocks:
        if block.type == "BLOCK":  # If a block is detected
            print("Face !")

            # Then we check if the last block was also a "BLOCK". If yes, we increase our timer.
            if last_block_seen == "BLOCK":
                # We count the number of seconds between the last checkpoint and now.
                face_apparition_time = time.time() - timer

            # Then we chack if a face has appeared for more than 7 seconds:
            if face_apparition_time > 7:  # If a block is detected more than 7 seconds.
                print("SCREAMER ! BOO !")

        else:
            print("No Face !")

            # As we don't see no face, we have to reset our checkpoint to "now"
            timer = time.time()
            face_apparition_time = 0

        # Do not forget that we are going to look at the next block, so this block must be stored :)
        last_block_seen = block.type
        time.sleep(0.5)

我不确定time.sleep() 应该去哪里,你可以自己试试哪个更适合:) 希望这会有所帮助,请不要犹豫进一步的问题!

【讨论】:

您好,谢谢您的回答,它几乎可以正常工作,问题是时间在流逝,例如,如果我在 5 秒时检测到人脸,则只需 2 秒显示“SCREAMER BOO”而不是 7 。还有一点我不太明白,部分:face_apparition_time = time.time() - timer 既然“timer = time.time()”(上),那为什么加起来不等于0呢?这当然是一个愚蠢的问题,但我宁愿问也不愿阻止它因为肯定在这部分我不明白必须找到解决方案,所以我很难解除它。 实际上(您可以自己尝试),time.time() 返回从固定时刻(例如,从 1900 年 1 月 1 日开始)到现在的实际秒数。所以它每秒都会改变。所以你会得到,一次t,比方说125.003秒。如果你在t + 3 秒再次调用它,你将得到 125.006 秒。然后你必须在两者之间做出区分才能知道tt + 3之间已经有3秒了。

以上是关于Python:如果检测到 X 超过 T 秒:的主要内容,如果未能解决你的问题,请参考以下文章

如果运行超过 x 秒,SQL 查询返回一个值?

如何使用 GetAsyncKeyState 查看按键被按下了 x 秒

确定 95% 的请求所用时间不超过 1 秒,如果超过则自动停止测试

swig/python 检测到“uint32_t *”类型的内存泄漏,没有找到析构函数

python 3.x 在线程里使用input多出一个input

如果解决时间超过 5 秒,是不是可以拒绝 Promise.allSettled 中的每个 Promise?