-
Hussain Kanafani authoredHussain Kanafani authored
VSUMMVideo.py 1.48 KiB
import os
from moviepy.editor import VideoFileClip
import numpy as np
from src.utils import digits_in_string, has_string
class VSUMMVideo(VideoFileClip):
def __init__(self, video_name, video_path, gt_base_dir):
self.video_clip = VideoFileClip(video_path)
self.fps = int(self.video_clip.fps)
self.duration = int(self.video_clip.duration)
self.gt_path = os.path.join(gt_base_dir, video_name)
self.video_name = video_name
self.nframes = self.video_clip.reader.infos['video_nframes']
def get_gt(self):
vid_scores = []
for i, user in enumerate(os.listdir(self.gt_path)):
user_dir = os.path.join(self.gt_path, user)
frame_idx = []
for idx, summary in enumerate(os.listdir(user_dir)):
if has_string(summary, 'frame'):
frame_idx.append(digits_in_string(summary)) # Frame123--> 123
vid_scores.append(frame_idx)
binary_scores = self.bin_classify_user_score(vid_scores)
return binary_scores
def bin_classify_user_score(self, user_scores_list):
result = []
for frames_idx in list(user_scores_list):
vid_frames = np.zeros(self.nframes)
np.put(vid_frames, frames_idx, [1]) # replace all selected frames with 1
result.append(vid_frames)
return np.asarray(result).T # (n_frames,n_annotator)
def get_frames(self):
return list(self.video_clip.iter_frames(with_times=False))