анимация mattplotlib в jupyter с большими видеофайлами

#python #matplotlib #jupyter-notebook #ipywidgets

#python #matplotlib #jupyter-ноутбук #ipywidgets

Вопрос:

Я пытаюсь показать видео в записной книжке jupyter. Теперь сервер jupyter работает на удаленной машине AWS EC2, на которой также размещаются данные. Я использую ssh и перенаправление портов для создания ноутбука со своего локального компьютера.

Моя проблема в том, что мне нужно иметь возможность воспроизводить большие видеофайлы (> 100000 кадров), и для этого я использовал animation framework of matplotlib . Я пробовал opencv и raw matplotlib , но я никогда не мог заставить его работать должным образом. Я также попробовал виджет видео, и это также не позволяет загрузить большой видеофайл.

Моя проблема в том, что я никогда не могу заставить его отображать все видео. Либо он будет воспроизводить видео всего на несколько секунд, либо загрузка займет целую вечность. Я подозреваю, что он предварительно загружает все видео, что просто приведет к сбою. Мое использование заключается в следующем:

 %matplotlib inline
from IPython.display import clear_output, display
from IPython.display import HTML
import cv2
from matplotlib import pyplot as plt
from matplotlib import animation
from matplotlib import rc
import time
import numpy as np
  

Используется opencv для загрузки видео.

 cap = cv2.VideoCapture('test.avi')
  

Теперь мы пытаемся загрузить видео как анимацию

 total = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print(total)  # 

ret, frame = cap.read() 
fig = plt.figure() 
ax = fig.add_subplot(111) 

im = ax.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB), animated=True) 
plt.close()  # clear the initial image

def updatefig(*args): 
    ret, frame = cap.read() 
    im.set_array(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) 
    return im 

ani = animation.FuncAnimation(fig, updatefig, interval=33, repeat=False, cache_frame_data=False) 
HTML(ani.to_html5_video())
  

Дело в том, что это загружает видео всего на 3 секунды. Я могу добавить frames=total в качестве параметра, но тогда он никогда не загружается. Я предполагаю, что он загружает все видео за один раз, что не сработает.

Комментарии:

1. Вы пробовали собственный видео-виджет IPython в качестве альтернативы? ipython.readthedocs.io/en/stable/api/generated /…

2. @ac24 Проблема в больших видеофайлах, она просто разбилась. Возможно, это также предварительно загружает все.