#python #if-statement #time #tracking #seconds
Вопрос:
Я ищу Знания.
Я новичок в python, и мне нужно сделать проект с гравитацией камеры: 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()
следует идти, вы можете попробовать сами, что подходит лучше 🙂
Надеюсь, это поможет, не стесняйтесь задавать дальнейшие вопросы!
Комментарии:
1. Здравствуйте, спасибо за ваш ответ, он работает почти так, как должен, проблема в том, что время идет, и если я, например, нахожусь в 5 секундах и обнаруживаю лицо, для отображения «КРИКУН БУ» требуется всего 2 секунды, а не 7 . Есть также момент, который я не совсем понимаю, часть: face_apparition_time = time.time () — таймер, поскольку «таймер = время.время()» (выше), почему это не равно 0? Это, конечно, глупый вопрос, но я бы предпочел задать его, чем блокировать, Так как, безусловно, в этой части я не понимаю, что решение должно быть найдено, мне трудно его разблокировать.
2. На самом деле (вы можете попробовать сами)
time.time()
возвращает фактическое количество секунд, отсчитанных с фиксированного момента (например, с 1 января 1900 года, например) до настоящего времени. Так что это будет меняться каждую секунду. Такимt
образом, вы получите, скажем, 125,003 секунды за один раз. И если вы вызовете его снова вt 3
секундах, вы получите 125,006 секунды. Затем вы должны сделать различие между обоими, чтобы знать, что между и было 3 секундыt
t 3
.