diff --git a/.gitignore b/.gitignore index 4b36b2533d64e6e2c0a197ee37eedcd1c81127f5..e0562287bd0e251f039f98173d35d6ad1db21e99 100644 --- a/.gitignore +++ b/.gitignore @@ -108,4 +108,5 @@ temp/ *.dat nohup.out *.webp +*.webm .DS_Store \ No newline at end of file diff --git a/Makefile b/Makefile index 0ec4dc7a6930c94627c97c8bfd284a45868a5a48..5cecf2f230dcc3d5557384d405cca443efc3dec3 100644 --- a/Makefile +++ b/Makefile @@ -7,4 +7,4 @@ test: PYTHONPATH=. pytest tests/test_file_utils.py PYTHONPATH=. pytest tests/test_facenet.py PYTHONPATH=. pytest tests/test_anti_spoofing_two_stream_vit.py - #PYTHONPATH=. pytest tests/test_deepfake_detection_sifdnet.py + PYTHONPATH=. pytest tests/test_deepfake_detection_sifdnet.py diff --git a/app/recognition/anti_spoofing_two_stream_vit.py b/app/recognition/anti_spoofing_two_stream_vit.py index de812b568261fb84f6f0d2187554b64040bfcf4c..32ba58a5fb298fdd51b638f7ca2ae8b64b477b2f 100644 --- a/app/recognition/anti_spoofing_two_stream_vit.py +++ b/app/recognition/anti_spoofing_two_stream_vit.py @@ -20,9 +20,8 @@ class AntiSpoofingTwoStreamVit(FaceModel): def __init__(self): super().__init__() self.model = vit_base_resnet50_224_in21k(pretrained=False, in_chans=3, num_classes=2) + self.model_loaded = False self.transform = create_anti_spoofing_test_transform(model_cfg=self.model.default_cfg) - if config.get_config('ANTI_SPOOFING') == 'true': - self.create_model() def init_app(self, app): pass @@ -39,11 +38,14 @@ class AntiSpoofingTwoStreamVit(FaceModel): if gpu_memory >= 4 * 1024 * 1024 * 1024: self.model.cuda() self.model.eval() + self.model_loaded = True def get_embeddings(self, x: numpy.ndarray) -> numpy.ndarray: pass def get_prediction(self, x: numpy.ndarray, **kwargs) -> numpy.ndarray: + if not self.model_loaded and config.get_config('ANTI_SPOOFING') == 'true': + self.create_model() msr = kwargs.pop('msr') transformed = self.transform(image=x, mask=msr) x = transformed["image"] diff --git a/app/recognition/deepfake_detection_sifdnet.py b/app/recognition/deepfake_detection_sifdnet.py index a038eab854c3fdcf61a8f81e1591ccd5db84e3c4..bf021755d74b12fec36e1742d5728a1dcc233789 100644 --- a/app/recognition/deepfake_detection_sifdnet.py +++ b/app/recognition/deepfake_detection_sifdnet.py @@ -20,9 +20,8 @@ class DeepfakeDetectionSIFDNet(FaceModel): def __init__(self): super().__init__() self.model = sifdnet() + self.model_loaded = False self.transform = create_deepfake_detection_test_transform(model_cfg=self.model.default_cfg) - if config.get_config('DEEPFAKE_DETECTION') == 'true': - self.create_model() def init_app(self, app): pass @@ -38,6 +37,7 @@ class DeepfakeDetectionSIFDNet(FaceModel): if gpu_memory >= 1 * 1024 * 1024 * 1024: self.model.cuda() self.model.eval() + self.model_loaded = True def get_embeddings(self, x: numpy.ndarray) -> numpy.ndarray: pass @@ -46,6 +46,8 @@ class DeepfakeDetectionSIFDNet(FaceModel): pass def get_predictions(self, x: numpy.ndarray, **kwargs) -> (float, numpy.ndarray): + if not self.model_loaded and config.get_config('DEEPFAKE_DETECTION') == 'true': + self.create_model() transformed = self.transform(image=x) x = transformed["image"] x = x.unsqueeze(0) diff --git a/data/video/video_tracked.webm b/data/video/video_tracked.webm deleted file mode 100644 index 578fcdd0316a0f465768a00f86a55729a1384fa7..0000000000000000000000000000000000000000 Binary files a/data/video/video_tracked.webm and /dev/null differ diff --git a/tests/test_deepfake_detection_sifdnet.py b/tests/test_deepfake_detection_sifdnet.py index a5a452498b6b2747c60519eb9a578cc45d2ab179..0fe90153aa6c212ccaf6516617b9da1db93177d9 100644 --- a/tests/test_deepfake_detection_sifdnet.py +++ b/tests/test_deepfake_detection_sifdnet.py @@ -1,3 +1,5 @@ +import collections +import itertools import unittest import cv2 @@ -17,11 +19,13 @@ class DeepfakeDetectionSIFDNetTestCase(unittest.TestCase): deepfake_detection_sifdnet = DeepfakeDetectionSIFDNet.instance() deepfake_detection_sifdnet.create_model() - frames, _ = file_utils.get_video_frames_and_fps(video_path) + frames, fps = file_utils.get_video_frames_and_fps(video_path) detector = FacenetDetector(landmarks=False) mask_frames = [] fake_probs = [] - for index, frame in frames.items(): + sliced = itertools.islice(frames.items(), int(fps)) + # sliced_o = collections.OrderedDict(sliced) + for index, frame in sliced: # h, w = frame.shape[:2] # if index > 50: # break