|
import os |
|
import random |
|
import numpy as np |
|
|
|
def dense_sampling_from_extracted_frames(folder_path, num_clips=6, frames_per_clip=5): |
|
frame_files = sorted([os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.npy')]) |
|
num_frames = len(frame_files) |
|
|
|
print(f"Found {num_frames} frames in {folder_path}") |
|
if num_frames < num_clips * frames_per_clip: |
|
raise ValueError("Not enough frames to sample the required clips.") |
|
|
|
frames_per_segment = num_frames // num_clips |
|
|
|
clips = [] |
|
|
|
for i in range(num_clips): |
|
segment_start = i * frames_per_segment |
|
segment_end = segment_start + frames_per_segment - 1 |
|
max_start_frame = segment_end - frames_per_clip + 1 |
|
start_frame = random.randint(segment_start, max_start_frame) |
|
|
|
clip = [np.load(frame_files[start_frame + j]) for j in range(frames_per_clip)] |
|
clips.append(clip) |
|
|
|
return clips |
|
|