def temp_charades_dataset(): frame_names = [f"{str(i)}.png" for i in range(3)] # Create csv containing 2 test frame videos. with tempfile.NamedTemporaryFile(delete=False, suffix=".csv") as f: f.write("original_vido_id video_id frame_id path labels\n".encode()) # Frame video 1 with temp_frame_video(frame_names) as (frame_1_video_dir, data_1): for i, frame_name in enumerate(frame_names): original_video_id = str(frame_1_video_dir) video_id = "1" frame_id = str(i) path = pathlib.Path(frame_1_video_dir) / frame_name label = "0" f.write( f"{original_video_id} {video_id} {frame_id} {path} {label}\n" .encode()) # Frame video 2 with temp_frame_video(frame_names) as (frame_2_video_dir, data_2): for i, frame_name in enumerate(frame_names): original_video_id = str(frame_2_video_dir) video_id = "2" frame_id = str(i) path = pathlib.Path(frame_2_video_dir) / frame_name label = "1" f.write( f"{original_video_id} {video_id} {frame_id} {path} {label}\n" .encode()) f.close() yield f.name, data_1, data_2
def test_multiple_labels_per_frame(self): frame_names = [f"{str(i)}.png" for i in range(3)] # Create csv containing a test frame videos. with tempfile.NamedTemporaryFile(delete=False, suffix=".csv") as f: f.write( "original_vido_id video_id frame_id path labels\n".encode()) with temp_frame_video(frame_names) as (frame_1_video_dir, data_1): for i, frame_name in enumerate(frame_names): original_video_id = str(frame_1_video_dir) video_id = "1" frame_id = str(i) path = pathlib.Path(frame_1_video_dir) / frame_name label = "0,100" f.write( f"{original_video_id} {video_id} {frame_id} {path} {label}\n" .encode()) f.close() clip_sampler = make_clip_sampler( "random", 0.1, # Total duration of 3 frames at 30fps is 0.1 seconds. ) ) dataset = Charades(f.name, clip_sampler=clip_sampler, video_sampler=SequentialSampler) sample = next(dataset) self.assertEqual(sample["label"], [[0, 100], [0, 100], [0, 100]]) self.assertTrue(sample["video"].equal(data_1))
def test_frame_video_works(self): frame_names = [f"{str(i)}.png" for i in range(3)] with temp_frame_video(frame_names) as (f_name, data): frame_paths = [f_name / x for x in frame_names] test_video = FrameVideo.from_frame_paths(frame_paths) expected_duration = ( 0.1 # Total duration of 3 frames at 30fps is 0.1 seconds. ) self.assertEqual(test_video.duration, expected_duration) # All frames (0 - 0.1 seconds) clip = test_video.get_clip(0, 0.1) frames, indices = clip["video"], clip["frame_indices"] self.assertTrue(frames.equal(data)) self.assertEqual(indices, [0, 1, 2]) # All frames (0 - 0.1 seconds), filtred to middle frame clip = test_video.get_clip(0, 0.1, lambda lst: lst[1:2]) frames, indices = clip["video"], clip["frame_indices"] self.assertTrue(frames.equal(data[:, 1:2])) self.assertEqual(indices, [1]) # 2 frames (0 - 0.066 seconds) clip = test_video.get_clip(0, 0.066) frames, indices = clip["video"], clip["frame_indices"] self.assertTrue(frames.equal(data[:, :2])) self.assertEqual(indices, [0, 1]) # No frames (3 - 5 seconds) result = test_video.get_clip(3, 5) self.assertEqual(result, None)
def temp_ava_dataset_2_videos(): frame_names = [f"{str(i)}.png" for i in range(90)] # Create csv containing 2 test frame videos. with tempfile.NamedTemporaryFile(delete=False, suffix=".csv") as frames_file: frames_file.write( "original_vido_id video_id frame_id path labels\n".encode()) # Frame video 1 with temp_frame_video(frame_names) as (frame_1_video_dir, data_1): for i, frame_name in enumerate(frame_names): original_video_id_1 = str(frame_1_video_dir) video_id = "1" frame_id = str(i) path = pathlib.Path(frame_1_video_dir) / frame_name label = "0" frames_file.write( f"{original_video_id_1} {video_id} {frame_id} {path} {label}\n" .encode()) # Frame video 2 with temp_frame_video(frame_names, height=5, width=5) as ( frame_2_video_dir, data_2, ): for i, frame_name in enumerate(frame_names): original_video_id_2 = str(frame_2_video_dir) video_id = "2" frame_id = str(i) path = pathlib.Path(frame_2_video_dir) / frame_name label = "1" frames_file.write( f"{original_video_id_2} {video_id} {frame_id} {path} {label}\n" .encode()) frames_file.close() yield frames_file.name, data_1, data_2, original_video_id_1, original_video_id_2
def temp_ssv2_dataset(): frame_names = [f"{str(i)}.png" for i in range(7)] # Create json file for label names. labels = [ "Approaching something with your camera", "Attaching something to something", ] label_names = {labels[0]: "0", labels[1]: "1"} with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".json") as f: json.dump(label_names, f) label_name_file = f.name # Create csv containing 2 test frame videos. with tempfile.NamedTemporaryFile(delete=False, suffix=".csv") as f: f.write("original_vido_id video_id frame_id path labels\n".encode()) # Frame video 1 with temp_frame_video(frame_names) as (frame_1_video_dir, data_1): for i, frame_name in enumerate(frame_names): original_video_id = str(frame_1_video_dir) video_id = "1" frame_id = str(i) path = pathlib.Path(frame_1_video_dir) / frame_name f.write( f"{original_video_id} {video_id} {frame_id} {path} ''\n". encode()) # Frame video 2 with temp_frame_video(frame_names) as (frame_2_video_dir, data_2): for i, frame_name in enumerate(frame_names): original_video_id = str(frame_2_video_dir) video_id = "2" frame_id = str(i) path = pathlib.Path(frame_2_video_dir) / frame_name f.write( f"{original_video_id} {video_id} {frame_id} {path} ''\n" .encode()) f.close() video_path_file = f.name # Create json file for lable names. with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".json") as f: videos = [ { "id": str(frame_1_video_dir), "template": labels[0] }, { "id": str(frame_2_video_dir), "template": labels[1] }, ] json.dump(videos, f) video_label_file = f.name yield label_name_file, video_label_file, video_path_file, data_1, data_2