Я хочу самый быстрый способ анализа видео с определенной частотой кадров. Я использую машинное обучение для анализа кадров из видео, но мне не нужно анализировать каждый кадр.
Вот функция для проверки времени анализа видео с переменной частотой кадров.
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
У кого-нибудь есть более эффективный способ сделать это?