У меня есть некоторые данные об участниках, которые смотрели несколько коротких (12-14 с) видео. Теперь, чтобы получить представление о данных, я хотел бы нанести фиксацию на видео.
Я нашел matplotlib
s FuncAnimation
, который может создавать анимацию и может создавать анимацию, показывающую фиксации на презентации видео.
fig = plp.figure()
plp.xlim(0, 1920)
plp.ylim(0, 1080)
interval = 1000/sample_rate
frames = len (sub1[0][0])
graph, = plp.plot([],[],'o')
def animate(i):
graph.set_data(sub1[0][0][:i+1], sub1[1][0][:i+1])
return (graph,)
ani = FuncAnimation(fig, func=animate, frames=frames, interval=interval, blit=True)
#HTML(ani.to_html5_video())
Я также могу открыть и воспроизвести видео, используя cv2.VideoCapture
и нанести на экран свою фиксацию по кадру, а также перезаписать кадры.
fig, ax = plp.subplots(figsize=(10,10)) # create figure
cap = cv2.VideoCapture('Video.mp4') # open video file
fps = cap.get(cv2.CAP_PROP_FPS) # get video framerate
frame_time = 1.0/fps
counter = 0
while counter <75:
ret, frame = cap.read() # get frame
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #convert in correct colourspace
ax.imshow(frame) # plot frame
ax.plot(data.X_Coord[(data.TimeStamp>counter*frame_time)&(data.TimeStamp<frame_time*(counter+1))],
data.Y_Coord[(data.TimeStamp>counter*frame_time)&(data.TimeStamp<frame_time*(counter+1))],'.') #plot eyetracking data
counter+=1
time.sleep(1.0/fps) # let python wait till it is time for the next frame
cap.release()
Но Я не могу создать анимацию, используя FuncAnimation
. Я попробовал это:
fig, ax = plp.subplots(figsize=(10,10))
cap = cv2.VideoCapture('Video.mp4')
def animate(i):
ret, frame = cap.read()
ax.imshow(frame)
ax.plot(data.X_Coord[(data.TimeStamp>counter*frame_time)&(data.TimeStamp<frame_time*(counter+1))],
data.Y_Coord[(data.TimeStamp>counter*frame_time)&(data.TimeStamp<frame_time*(counter+1))],'o')
time.sleep(1.0/fps)
counter += 1
return (ax,)
cap.release()
ani = FuncAnimation(fig, func=animate)
и некоторые варианты, но ни один не работает. Я не уверен, правильно ли я использую эту функцию анимации. В большинстве примеров он возвращает график (как в моем примере), но это не работает с моим фреймом (по крайней мере, я так думаю).
Я работаю в Jupyter Notebook.