def test_remove_video_info_missing_or_incomplete_videos(self):
        video_infos_a = MOCK_VIDEO_INFOS.copy()
        video_frames_a = get_flat_video_frames("testdirectory2", "jpg")
        video_frames_a_copy = video_frames_a.copy()

        # No-Op
        VideoDataset._remove_video_info_missing_or_incomplete_videos(
            video_frames_a, video_infos_a
        )

        self.assertEqual(len(video_infos_a), len(MOCK_VIDEO_INFOS))
        for video_id in video_infos_a:
            self.assertEqual(video_infos_a[video_id], MOCK_VIDEO_INFOS[video_id])

        self.assertEqual(len(video_frames_a), len(video_frames_a_copy))
        for video_id in video_frames_a:
            self.assertEqual(video_frames_a[video_id], video_frames_a_copy[video_id])

        video_infos_b = MOCK_VIDEO_INFOS.copy()
        video_frames_b = video_frames_a_copy.copy()

        # Unmatched video info, should be removed
        video_infos_b["P07_001"] = VideoInfo(
            video_id="P07_001", resolution="720x1280", duration=17.001, fps=30
        )

        # Unmatched video frame entry, should be removed
        video_frames_b["P07_002"]: VideoFrameInfo(
            min_frame_number=1, max_frame_number=1530, frame_string_length=8
        )

        # Video info that defines approximately 6000 frames with 600 present from frame manifest
        # Should be dropped
        video_frames_b["P08_001"]: VideoFrameInfo(
            min_frame_number=1, max_frame_number=600, frame_string_length=8
        )

        video_infos_b["P08_001"] = VideoInfo(
            video_id="P08_001", resolution="720x1280", duration=100, fps=60
        )

        VideoDataset._remove_video_info_missing_or_incomplete_videos(
            video_frames_b, video_infos_b
        )

        # All newly added fields should be removed
        self.assertEqual(len(video_infos_b), len(MOCK_VIDEO_INFOS))
        for video_id in video_infos_b:
            self.assertEqual(video_infos_b[video_id], MOCK_VIDEO_INFOS[video_id])

        self.assertEqual(len(video_frames_b), len(video_frames_a_copy))
        for video_id in video_frames_b:
            self.assertEqual(video_frames_b[video_id], video_frames_a_copy[video_id])
예제 #2
0
 def add_participant_video_frames(participant_id: str,
                                  participant_path: str) -> None:
     participant_frames = sorted(g_pathmgr.ls(str(participant_path)))
     for frame_file_name in participant_frames:
         file_extension = frame_file_name.split(".")[-1]
         frame_name = frame_file_name[:-(len(file_extension) + 1)]
         [path_participant_id, path_video_id,
          path_frame_id] = frame_name.split("_")
         assert path_participant_id == participant_id
         video_id = f"{path_participant_id}_{path_video_id}"
         if (
                 video_id not in video_frames
         ):  # This is the first frame we have seen from video w/ video_id
             video_frames[video_id] = VideoFrameInfo(
                 video_id=video_id,
                 location=participant_path,
                 frame_file_stem=f"{video_id}_",
                 frame_string_length=len(frame_name),
                 min_frame_number=int(path_frame_id),
                 max_frame_number=int(path_frame_id),
                 file_extension=file_extension,
             )
         else:
             video_frame_info = video_frames[video_id]
             # Check that this new frame is of the same format as other frames for this video
             # and that it is the next frame in order, if so update the frame info for this
             # video to reflect there is an additional frame.
             # We don't need to check video_id or frame_file_stem as they are function of
             # video_id which is aligned within the dictionary
             assert video_frame_info.frame_string_length == len(frame_name)
             assert video_frame_info.location == participant_path, (
                 f"Frames for {video_id} found in two paths: "
                 f"{video_frame_info.location} and {participant_path}")
             assert video_frame_info.max_frame_number + 1 == int(
                 path_frame_id)
             assert (
                 video_frame_info.file_extension == file_extension
             ), f"Frames with two different file extensions found for video {video_id}"
             video_frames[video_id] = VideoFrameInfo(
                 video_id=video_frame_info.video_id,
                 location=video_frame_info.location,
                 frame_file_stem=video_frame_info.frame_file_stem,
                 frame_string_length=video_frame_info.frame_string_length,
                 min_frame_number=video_frame_info.min_frame_number,
                 max_frame_number=int(path_frame_id),  # Update
                 file_extension=video_frame_info.file_extension,
             )
예제 #3
0
def get_flat_video_frames(directory, file_extension):
    frame_file_stem = "frame_"
    return {
        MOCK_VIDEO_IDS[0]:
        VideoFrameInfo(
            video_id=MOCK_VIDEO_IDS[0],
            location=f"{directory}/{MOCK_VIDEO_IDS[0]}",
            frame_file_stem=frame_file_stem,
            frame_string_length=16,
            min_frame_number=1,
            max_frame_number=3000,
            file_extension=file_extension,
        ),
        MOCK_VIDEO_IDS[1]:
        VideoFrameInfo(
            video_id=MOCK_VIDEO_IDS[1],
            location=f"{directory}/{MOCK_VIDEO_IDS[1]}",
            frame_file_stem=frame_file_stem,
            frame_string_length=16,
            min_frame_number=2,
            max_frame_number=3001,
            file_extension=file_extension,
        ),
        MOCK_VIDEO_IDS[2]:
        VideoFrameInfo(
            video_id=MOCK_VIDEO_IDS[2],
            location=f"{directory}/{MOCK_VIDEO_IDS[2]}",
            frame_file_stem=frame_file_stem,
            frame_string_length=16,
            min_frame_number=1,
            max_frame_number=30003,
            file_extension=file_extension,
        ),
        MOCK_VIDEO_IDS[3]:
        VideoFrameInfo(
            video_id=MOCK_VIDEO_IDS[3],
            location=f"{directory}/{MOCK_VIDEO_IDS[3]}",
            frame_file_stem=frame_file_stem,
            frame_string_length=16,
            min_frame_number=1,
            max_frame_number=1530,
            file_extension=file_extension,
        ),
    }
def get_nested_video_frames(directory, file_extension):
    return {
        "P02_001":
        VideoFrameInfo(
            video_id="P02_001",
            location=f"{directory}/P02",
            frame_file_stem="P02_001_",
            frame_string_length=16,
            min_frame_number=1,
            max_frame_number=3000,
            file_extension=file_extension,
        ),
        "P02_002":
        VideoFrameInfo(
            video_id="P02_002",
            location=f"{directory}/P02",
            frame_file_stem="P02_002_",
            frame_string_length=16,
            min_frame_number=2,
            max_frame_number=3001,
            file_extension=file_extension,
        ),
        "P02_005":
        VideoFrameInfo(
            video_id="P02_005",
            location=f"{directory}/P02",
            frame_file_stem="P02_005_",
            frame_string_length=16,
            min_frame_number=1,
            max_frame_number=30003,
            file_extension=file_extension,
        ),
        "P07_002":
        VideoFrameInfo(
            video_id="P07_002",
            location=f"{directory}/P07",
            frame_file_stem="P07_002_",
            frame_string_length=16,
            min_frame_number=2,
            max_frame_number=1530,
            file_extension=file_extension,
        ),
    }
 def test_VideoFrameInfo(self):
     video_frame_info = VideoFrameInfo(
         # This is a key-mapping as the underlying
         # annotation files are of these string columns
         **{
             "video_id": "P01_012",
             "location": "c:/",
             "frame_file_stem": "P01_012_",
             "frame_string_length": "20",
             "min_frame_number": "0",
             "max_frame_number": "22",
             "file_extension": "png",
         }
     )
     self.assertEqual(video_frame_info.video_id, "P01_012")
     self.assertEqual(video_frame_info.location, "c:/")
     self.assertEqual(video_frame_info.frame_file_stem, "P01_012_")
     self.assertEqual(video_frame_info.frame_string_length, 20)
     self.assertEqual(video_frame_info.min_frame_number, 0)
     self.assertEqual(video_frame_info.max_frame_number, 22)
     self.assertEqual(video_frame_info.file_extension, "png")