считать 5 секунд, когда объект обнаружен в веб-камере. - PullRequest
0 голосов
/ 26 мая 2018

У меня есть код, который обнаруживает белый объект, используя моменты открытого cv.я хочу, чтобы этот объект находился в верхней части веб-камеры в течение 5 секунд.Я хочу что-то сделать .. Тогда, если этот объект виден в нижней части веб-камеры, я хочу сделать что-то тоже (но другое) Моя веб-камера 640x480 между прочим.

if moments['m00'] > 0:
            x = int(moments['m10'] / moments['m00'])
            y = int(moments['m01'] / moments['m00'])

            if x > 0 and x <=640 and y > 0 and y <=240: #if it detects the object in the upper part
                #count til 5 seconds then do something

            else:
                #if the object is in the lower part of webcam. Do something after 5 seconds    
        else:
            #cancel the timer so it wont do the something

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Что вам нужно сделать, это продолжать обнаруживать и считать одновременно.Вы можете сделать что-то вроде этого:

found_top = False
found_bottom = False
while True:
    # do detection
    if moments['m00'] > 0:
        x = int(moments['m10'] / moments['m00'])
        y = int(moments['m01'] / moments['m00'])

        if x > 0 and x <=640 and y > 0 and y <=240: #if it detects the object in the upper part
              if not found_top:
                  found_top = True
                  t0 = time.time()   
        # Do proper check if object appears at the bottom
    else:
        found_top = False
        found_bottom = False
    t1 = time.time()
    if found_top and (t1-t0) >= 5sec: # need to check proper way to do it
        # Do your action

Еще одна вещь, которую следует учитывать, состоит в том, что на изображениях OpenCV положительная ось y идет вниз, а не вверх.(0,0) - верхний левый угол изображения

0/0---X--->
|
|
Y
|
|
v
0 голосов
/ 26 мая 2018

См. здесь.

def block_for(seconds):
    """Wait at least seconds, this function should not be affected by the computer sleeping."""
    end_time = datetime.datetime.now() + datetime.timedelta(seconds)

    while datetime.datetime.now() < end_time:
        pass
...