Разбор видео с определенной частотой кадров - PullRequest
0 голосов
/ 25 января 2019

Я хочу самый быстрый способ анализа видео с определенной частотой кадров. Я использую машинное обучение для анализа кадров из видео, но мне не нужно анализировать каждый кадр.

Вот функция для проверки времени анализа видео с переменной частотой кадров.

def extract_img_from_vid(path_in, desired_fps):
    cap = cv2.VideoCapture(path_in)
    count = 0
    frame_count = 0


    length = int(cap.get(cv2.cv2.CAP_PROP_FRAME_COUNT))
    width  = int(cap.get(cv2.cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.cv2.CAP_PROP_FRAME_HEIGHT))
    fps    = cap.get(cv2.cv2.CAP_PROP_FPS)
    print ('Length: {:.2f} | Width: {:.2f} | Height: {:.2f} | Fps: {:.2f}'.format(length, width, height, fps))

    skip = round(int(fps)/desired_fps) #determine how ofter to skip a frame

    start = time.time()

    while cap.isOpened():
        success, frame = cap.read()

        if success:
            count += 1

            if count % skip != 0:
                continue

            #do some analysis on the frame

            frame_count += 1
        else:
            break

    end = time.time()
    print("Time to analyze individual frame: {:.4f}sec | Total Time: {:.3f} ".format(((end-start)/count), end-start))
    print('Total Frames: {} | Frames Analyzed {}'. format(count, frame_count))

Это вывод при FPS, равном 1. Как вы можете сделать вывод с помощью этого метода, частота кадров не влияет на скорость синтаксического анализа.

Length: 10887.00 | Width: 1920.00 | Height: 1080.00 | Fps: 60.00
Time to analyze individual frame: 0.0082sec | Total Time: 88.798 
Total Frames: 10886 | Frames Analyzed 181

У кого-нибудь есть более эффективный способ сделать это?

...