Spaces:
Runtime error
Runtime error
| """ | |
| Video Face Manipulation Detection Through Ensemble of CNNs | |
| Image and Sound Processing Lab - Politecnico di Milano | |
| NicolΓ² Bonettini | |
| Edoardo Daniele Cannas | |
| Sara Mandelli | |
| Luca Bondi | |
| Paolo Bestagini | |
| """ | |
| from typing import List | |
| import albumentations as A | |
| import pandas as pd | |
| from albumentations.pytorch import ToTensorV2 | |
| from .data import FrameFaceIterableDataset, get_iterative_real_fake_idxs | |
| class FrameFaceTripletIterableDataset(FrameFaceIterableDataset): | |
| def __init__(self, | |
| roots: List[str], | |
| dfs: List[pd.DataFrame], | |
| size: int, | |
| scale: str, | |
| num_triplets: int = -1, | |
| transformer: A.BasicTransform = ToTensorV2(), | |
| seed: int = None): | |
| """ | |
| :param roots: List of root folders for frames cache | |
| :param dfs: List of DataFrames of cached frames with 'bb' column as array of 4 elements (left,top,right,bottom) | |
| and 'label' column | |
| :param size: face size | |
| :param num_triplets: number of samples for the dataset | |
| :param idxs: sampling indexes triplets (each element is a key for anchor, positive, negative) | |
| :param scale: Rescale the face to the given size, preserving the aspect ratio. | |
| If false crop around center to the given size | |
| :param transformer: | |
| :param seed: | |
| """ | |
| super(FrameFaceTripletIterableDataset, self).__init__( | |
| roots=roots, | |
| dfs=dfs, | |
| size=size, | |
| scale=scale, | |
| num_samples=num_triplets * 3, | |
| transformer=transformer, | |
| seed=seed | |
| ) | |
| self.num_triplet_couples = self.num_samples // 6 | |
| self.num_triplets = self.num_triplet_couples * 2 | |
| self.num_samples = self.num_triplets * 3 | |
| def __len__(self): | |
| return self.num_triplets | |
| def __iter__(self): | |
| random_fake_idxs, random_real_idxs = get_iterative_real_fake_idxs( | |
| df_real=self.df_real, | |
| df_fake=self.df_fake, | |
| num_samples=self.num_samples, | |
| seed0=self.seed0 | |
| ) | |
| while len(random_fake_idxs) >= 3 and len(random_real_idxs) >= 3: | |
| a = self._get_face(random_fake_idxs.pop())[0] | |
| p = self._get_face(random_fake_idxs.pop())[0] | |
| n = self._get_face(random_real_idxs.pop())[0] | |
| yield a, p, n | |
| a = self._get_face(random_real_idxs.pop())[0] | |
| p = self._get_face(random_real_idxs.pop())[0] | |
| n = self._get_face(random_fake_idxs.pop())[0] | |
| yield a, p, n | |