import tensorflow as tf import numpy as np from einops import rearrange from decord import VideoReader num_frames = 16 input_size = 224 patch_size = (16, 16) IMAGENET_MEAN = np.array([0.45, 0.45, 0.45]) IMAGENET_STD = np.array([0.225, 0.225, 0.225]) def format_frames(frame, output_size): frame = tf.image.convert_image_dtype(frame, tf.uint8) frame = tf.image.resize(frame, size=output_size) frame = frame / 255. frame = frame - IMAGENET_MEAN frame = frame / IMAGENET_STD return frame def read_video(file_path): container = VideoReader(file_path) return container def frame_sampling(container, num_frames): interval = len(container) // num_frames bids = np.arange(num_frames) * interval offset = np.random.randint(interval, size=bids.shape) frame_index = bids + offset frames = container.get_batch(frame_index).asnumpy() frames = np.stack(frames) frames = format_frames(frames, [input_size] * 2) return frames def denormalize(image): image = image.numpy() if not isinstance(image, np.ndarray) else image image = image * IMAGENET_STD + IMAGENET_MEAN image = (image * 255).clip(0, 255).astype('uint8') return image