Spaces:
Runtime error
Runtime error
import numpy as np | |
from tqdm import tqdm | |
import cv2 | |
from vbench.utils import load_dimension_info | |
def get_frames(video_path): | |
frames = [] | |
video = cv2.VideoCapture(video_path) | |
while video.isOpened(): | |
success, frame = video.read() | |
if success: | |
frames.append(frame) | |
else: | |
break | |
video.release() | |
assert frames != [] | |
return frames | |
def mae_seq(frames): | |
ssds = [] | |
for i in range(len(frames)-1): | |
ssds.append(calculate_mae(frames[i], frames[i+1])) | |
return np.array(ssds) | |
def calculate_mae(img1, img2): | |
"""Computing the mean absolute error (MAE) between two images.""" | |
if img1.shape != img2.shape: | |
print("Images don't have the same shape.") | |
return | |
return np.mean(cv2.absdiff(np.array(img1, dtype=np.float32), np.array(img2, dtype=np.float32))) | |
def cal_score(video_path): | |
"""please ensure the video is static""" | |
frames = get_frames(video_path) | |
score_seq = mae_seq(frames) | |
return (255.0 - np.mean(score_seq).item())/255.0 | |
def temporal_flickering(video_list): | |
sim = [] | |
video_results = [] | |
for video_path in tqdm(video_list): | |
try: | |
score_per_video = cal_score(video_path) | |
except AssertionError: | |
continue | |
video_results.append({'video_path': video_path, 'video_results': score_per_video}) | |
sim.append(score_per_video) | |
avg_score = np.mean(sim) | |
return avg_score, video_results | |
def compute_temporal_flickering(json_dir, device, submodules_list): | |
video_list, _ = load_dimension_info(json_dir, dimension='temporal_flickering', lang='en') | |
all_results, video_results = temporal_flickering(video_list) | |
return all_results, video_results | |