| | |
| |
|
| | import random |
| | from collections.abc import Callable |
| | from enum import Enum |
| | from typing import Callable as TCallable |
| | from typing import List |
| |
|
| | FrameTsList = List[int] |
| | FrameSelector = TCallable[[FrameTsList], FrameTsList] |
| |
|
| |
|
| | class FrameSelectionStrategy(Enum): |
| | """ |
| | Frame selection strategy used with videos: |
| | - "random_k": select k random frames |
| | - "first_k": select k first frames |
| | - "last_k": select k last frames |
| | - "all": select all frames |
| | """ |
| |
|
| | |
| | RANDOM_K = "random_k" |
| | FIRST_K = "first_k" |
| | LAST_K = "last_k" |
| | ALL = "all" |
| | |
| |
|
| |
|
| | class RandomKFramesSelector(Callable): |
| | """ |
| | Selector that retains at most `k` random frames |
| | """ |
| |
|
| | def __init__(self, k: int): |
| | self.k = k |
| |
|
| | def __call__(self, frame_tss: FrameTsList) -> FrameTsList: |
| | """ |
| | Select `k` random frames |
| | |
| | Args: |
| | frames_tss (List[int]): timestamps of input frames |
| | Returns: |
| | List[int]: timestamps of selected frames |
| | """ |
| | return random.sample(frame_tss, min(self.k, len(frame_tss))) |
| |
|
| |
|
| | class FirstKFramesSelector(Callable): |
| | """ |
| | Selector that retains at most `k` first frames |
| | """ |
| |
|
| | def __init__(self, k: int): |
| | self.k = k |
| |
|
| | def __call__(self, frame_tss: FrameTsList) -> FrameTsList: |
| | """ |
| | Select `k` first frames |
| | |
| | Args: |
| | frames_tss (List[int]): timestamps of input frames |
| | Returns: |
| | List[int]: timestamps of selected frames |
| | """ |
| | return frame_tss[: self.k] |
| |
|
| |
|
| | class LastKFramesSelector(Callable): |
| | """ |
| | Selector that retains at most `k` last frames from video data |
| | """ |
| |
|
| | def __init__(self, k: int): |
| | self.k = k |
| |
|
| | def __call__(self, frame_tss: FrameTsList) -> FrameTsList: |
| | """ |
| | Select `k` last frames |
| | |
| | Args: |
| | frames_tss (List[int]): timestamps of input frames |
| | Returns: |
| | List[int]: timestamps of selected frames |
| | """ |
| | return frame_tss[-self.k :] |
| |
|