Python захватить X ограниченное количество изображений, когда последовательные кадры резко меняются, и повторять до следующего изменения (программный триггер) - PullRequest
0 голосов
/ 16 июня 2020

Я использую программный триггер для захвата изображений с помощью веб-камеры. У меня уже есть что-то вроде ниже:

import cv2
import gc
import time
import numpy as np

def capture():

    vidoe_cap = cv2.VideoCapture('http://ip:port/video')
    _, frame1 = vidoe_cap.read()  # first image 

    while (vidoe_cap.isOpened()== True):

        # Capture frames
        _, frame2 = vidoe_cap.read()  # second image 

        # Here Euclidean distance between the two frames are done.
        area = np.absolute(cv2.norm(frame1, frame2, cv2.NORM_L1)/10000000)

        if area > area_threshold:

            cv2.imwrite(/path/to/same/image, frame2)
            time.sleep(2)  # slight delay

        del frame2, frame1 
        gc.collect()

while(True):
    try:
        capture()
    except cv2.error as e:
        print('Reconnecting 1...')
        continue
    except:
        print('Reconnecting 2...')
        continue

Базовый триггер основан на вычислении евклидова расстояния между двумя последовательными кадрами. Если объект попадает в поле зрения камеры, евклидово расстояние между двумя кадрами увеличивается, и это запускает захват изображения (area_threshold - эмпирическое значение) и сохраняет его на диске. Этот простой фрагмент работает.

Однако один крайний случай заключается в том, что объект входит и остается неподвижным в течение 10 минут (как долго это неизвестно!), И я не хочу постоянно захватывать изображения для каждого буфера, НЕ больше чем это в X раз (просто захватите 5 или 10 кадров). В то же время я буду sh, чтобы не нарушить код. Я ищу действие `` ждать '' (но не простой Python time.sleep), а что-то, что снова прослушивает изменение области и возобновляет условие `` если '', если новый или аналогичный объект снова входит в поле вид в камеру! Это сделано для того, чтобы избежать захвата потерянных последовательных (похожих) буферов!

Любые комментарии и предложения приветствуются!

...