Spaces:
Sleeping
Sleeping
| import tensorflow as tf | |
| import numpy as np | |
| from einops import rearrange | |
| from decord import VideoReader | |
| num_frames = 8 | |
| 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 |