Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import cv2 | |
| from PIL import Image | |
| from typing import List | |
| from skimage.metrics import structural_similarity as ssim | |
| from skimage import io, color | |
| ROUND_DIGIT=3 | |
| DYN_SAMPLE_STEP=4 | |
| NUM_ASPECT=5 | |
| MSE_POINT_HIGH=3000 | |
| MSE_POINT_MID=1000 | |
| MSE_POINT_LOW=100 | |
| class MetricMSE_dyn(): | |
| def __init__(self) -> None: | |
| """ | |
| Initialize a class MetricMSE_dyn for testing dynamic degree of a given video. | |
| """ | |
| None | |
| def evaluate(self, frame_list:List[Image.Image]): | |
| """ | |
| Calculate the MSE (Mean Squared Error) between frames sampled at regular intervals of a given video to test dynamic_degree, | |
| then quantize the orginal output based on some predefined thresholds. | |
| Args: | |
| frame_list:List[Image.Image], frames of the video used in calculation. | |
| Returns: | |
| mse_avg: float, the computed MSE between frames sampled at regular intervals and then averaged among all the pairs. | |
| quantized_ans: int, the quantized value of the above avg MSE scores based on pre-defined thresholds. | |
| """ | |
| mse_list=[] | |
| sampled_list = frame_list[::DYN_SAMPLE_STEP] | |
| for f_idx in range(len(sampled_list)-1): | |
| imageA = cv2.cvtColor(np.array(sampled_list[f_idx]), cv2.COLOR_RGB2BGR) | |
| imageB = cv2.cvtColor(np.array(sampled_list[f_idx+1]), cv2.COLOR_RGB2BGR) | |
| err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2) | |
| err /= float(imageA.shape[0] * imageA.shape[1]) | |
| mse_value = err | |
| mse_list.append(mse_value) | |
| mse_avg=np.mean(mse_list) | |
| quantized_ans=0 | |
| if mse_avg >= MSE_POINT_HIGH: | |
| quantized_ans=4 | |
| elif mse_avg < MSE_POINT_HIGH and mse_avg >= MSE_POINT_MID: | |
| quantized_ans=3 | |
| elif mse_avg < MSE_POINT_MID and mse_avg >= MSE_POINT_LOW: | |
| quantized_ans=2 | |
| else: | |
| quantized_ans=1 | |
| return mse_avg, quantized_ans | |