This commit is contained in:
vnyash
2024-06-13 07:56:13 +05:30
commit 47d3520c19
184 changed files with 10075 additions and 0 deletions
View File
+26
View File
@@ -0,0 +1,26 @@
import subprocess
import pytest
from deepfuze.audio import get_audio_frame, read_static_audio
from deepfuze.download import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.mp3'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/source.mp3', '../../models/facefusion/examples/source.wav' ])
def test_get_audio_frame() -> None:
assert get_audio_frame('../../models/facefusion/examples/source.mp3', 25) is not None
assert get_audio_frame('../../models/facefusion/examples/source.wav', 25) is not None
assert get_audio_frame('invalid', 25) is None
def test_read_static_audio() -> None:
assert len(read_static_audio('../../models/facefusion/examples/source.mp3', 25)) == 280
assert len(read_static_audio('../../models/facefusion/examples/source.wav', 25)) == 280
assert read_static_audio('invalid', 25) is None
+31
View File
@@ -0,0 +1,31 @@
import subprocess
import sys
import pytest
from deepfuze.download import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '../../models/facefusion/examples/target-240p.jpg' ])
def test_debug_face_to_image() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'face_debugger', '-t', '../../models/facefusion/examples/target-240p.jpg', '-o', '../../models/facefusion/examples/test_debug_face_to_image.jpg', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'image succeed' in run.stdout.decode()
def test_debug_face_to_video() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'face_debugger', '-t', '../../models/facefusion/examples/target-240p.mp4', '-o', '../../models/facefusion/examples/test_debug_face_to_video.mp4', '--trim-frame-end', '10', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'video succeed' in run.stdout.decode()
+32
View File
@@ -0,0 +1,32 @@
import subprocess
import sys
import pytest
from deepfuze.download import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '../../models/facefusion/examples/target-240p.jpg' ])
def test_enhance_face_to_image() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'face_enhancer', '-t', '../../models/facefusion/examples/target-240p.jpg', '-o', '../../models/facefusion/examples/test_enhance_face_to_image.jpg', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'image succeed' in run.stdout.decode()
def test_enhance_face_to_video() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'face_enhancer', '-t', '../../models/facefusion/examples/target-240p.mp4', '-o', '../../models/facefusion/examples/test_enhance_face_to_video.mp4', '--trim-frame-end', '10', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'video succeed' in run.stdout.decode()
+31
View File
@@ -0,0 +1,31 @@
import subprocess
import sys
import pytest
from deepfuze.download import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '../../models/facefusion/examples/target-240p.jpg' ])
def test_swap_face_to_image() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'face_swapper', '-s', '../../models/facefusion/examples/source.jpg', '-t', '../../models/facefusion/examples/target-240p.jpg', '-o', '../../models/facefusion/examples/test_swap_face_to_image.jpg', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'image succeed' in run.stdout.decode()
def test_swap_face_to_video() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'face_swapper', '-s', '../../models/facefusion/examples/source.jpg', '-t', '../../models/facefusion/examples/target-240p.mp4', '-o', '../../models/facefusion/examples/test_swap_face_to_video.mp4', '--trim-frame-end', '10', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'video succeed' in run.stdout.decode()
+32
View File
@@ -0,0 +1,32 @@
import subprocess
import sys
import pytest
from deepfuze.download import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '-vf', 'hue=s=0', '../../models/facefusion/examples/target-240p-0sat.jpg' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'hue=s=0', '../../models/facefusion/examples/target-240p-0sat.mp4' ])
def test_colorize_frame_to_image() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'frame_colorizer', '-t', '../../models/facefusion/examples/target-240p-0sat.jpg', '-o', '../../models/facefusion/examples/test_colorize_frame_to_image.jpg', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'image succeed' in run.stdout.decode()
def test_colorize_frame_to_video() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'frame_colorizer', '-t', '../../models/facefusion/examples/target-240p-0sat.mp4', '-o', '../../models/facefusion/examples/test_colorize_frame_to_video.mp4', '--trim-frame-end', '10', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'video succeed' in run.stdout.decode()
+31
View File
@@ -0,0 +1,31 @@
import subprocess
import sys
import pytest
from deepfuze.download import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '../../models/facefusion/examples/target-240p.jpg' ])
def test_enhance_frame_to_image() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'frame_enhancer', '-t', '../../models/facefusion/examples/target-240p.jpg', '-o', '../../models/facefusion/examples/test_enhance_frame_to_image.jpg', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'image succeed' in run.stdout.decode()
def test_enhance_frame_to_video() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'frame_enhancer', '-t', '../../models/facefusion/examples/target-240p.mp4', '-o', '../../models/facefusion/examples/test_enhance_frame_to_video.mp4', '--trim-frame-end', '10', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'video succeed' in run.stdout.decode()
+32
View File
@@ -0,0 +1,32 @@
import subprocess
import sys
import pytest
from deepfuze.download import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.mp3',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '../../models/facefusion/examples/target-240p.jpg' ])
def test_sync_lip_to_image() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'lip_syncer', '-s', '../../models/facefusion/examples/source.mp3', '-t', '../../models/facefusion/examples/target-240p.jpg', '-o', '../../models/facefusion/examples/test_sync_lip_to_image.jpg', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'image succeed' in run.stdout.decode()
def test_sync_lip_to_video() -> None:
commands = [ sys.executable, 'run.py', '--frame-processors', 'lip_syncer', '-s', '../../models/facefusion/examples/source.mp3', '-t', '../../models/facefusion/examples/target-240p.mp4', '-o', '../../models/facefusion/examples/test_sync_lip_to_video.mp4', '--trim-frame-end', '10', '--headless' ]
run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
assert run.returncode == 0
assert 'video succeed' in run.stdout.decode()
+15
View File
@@ -0,0 +1,15 @@
from deepfuze.common_helper import create_metavar, create_int_range, create_float_range
def test_create_metavar() -> None:
assert create_metavar([ 1, 2, 3, 4, 5 ]) == '[1-5]'
def test_create_int_range() -> None:
assert create_int_range(0, 2, 1) == [ 0, 1, 2 ]
assert create_float_range(0, 1, 1) == [ 0, 1 ]
def test_create_float_range() -> None:
assert create_float_range(0.0, 1.0, 0.5) == [ 0.0, 0.5, 1.0 ]
assert create_float_range(0.0, 1.0, 0.05) == [ 0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 0.95, 1.0 ]
+96
View File
@@ -0,0 +1,96 @@
from configparser import ConfigParser
import pytest
from deepfuze import config
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
config.CONFIG = ConfigParser()
config.CONFIG.read_dict(
{
'str':
{
'valid': 'a',
'unset': ''
},
'int':
{
'valid': '1',
'unset': ''
},
'float':
{
'valid': '1.0',
'unset': ''
},
'bool':
{
'valid': 'True',
'unset': ''
},
'str_list':
{
'valid': 'a b c',
'unset': ''
},
'int_list':
{
'valid': '1 2 3',
'unset': ''
},
'float_list':
{
'valid': '1.0 2.0 3.0',
'unset': ''
}
})
def test_get_str_value() -> None:
assert config.get_str_value('str.valid') == 'a'
assert config.get_str_value('str.unset', 'b') == 'b'
assert config.get_str_value('str.unset') is None
assert config.get_str_value('str.invalid') is None
def test_get_int_value() -> None:
assert config.get_int_value('int.valid') == 1
assert config.get_int_value('int.unset', '1') == 1
assert config.get_int_value('int.unset') is None
assert config.get_int_value('int.invalid') is None
def test_get_float_value() -> None:
assert config.get_float_value('float.valid') == 1.0
assert config.get_float_value('float.unset', '1.0') == 1.0
assert config.get_float_value('float.unset') is None
assert config.get_float_value('float.invalid') is None
def test_get_bool_value() -> None:
assert config.get_bool_value('bool.valid') is True
assert config.get_bool_value('bool.unset', 'False') is False
assert config.get_bool_value('bool.unset') is None
assert config.get_bool_value('bool.invalid') is None
def test_get_str_list() -> None:
assert config.get_str_list('str_list.valid') == [ 'a', 'b', 'c' ]
assert config.get_str_list('str_list.unset', 'c b a') == [ 'c', 'b', 'a' ]
assert config.get_str_list('str_list.unset') is None
assert config.get_str_list('str_list.invalid') is None
def test_get_int_list() -> None:
assert config.get_int_list('int_list.valid') == [ 1, 2, 3 ]
assert config.get_int_list('int_list.unset', '3 2 1') == [ 3, 2, 1 ]
assert config.get_int_list('int_list.unset') is None
assert config.get_int_list('int_list.invalid') is None
def test_get_float_list() -> None:
assert config.get_float_list('float_list.valid') == [ 1.0, 2.0, 3.0 ]
assert config.get_float_list('float_list.unset', '3.0 2.0 1.0') == [ 3.0, 2.0, 1.0 ]
assert config.get_float_list('float_list.unset') is None
assert config.get_float_list('float_list.invalid') is None
+23
View File
@@ -0,0 +1,23 @@
import pytest
from deepfuze.download import conditional_download, get_download_size, is_download_done
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
def test_get_download_size() -> None:
assert get_download_size('https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4') == 191675
assert get_download_size('https://github.com/facefusion/facefusion-assets/releases/download/examples/target-360p.mp4') == 370732
assert get_download_size('invalid') == 0
def test_is_download_done() -> None:
assert is_download_done('https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4', '../../models/facefusion/examples/target-240p.mp4') is True
assert is_download_done('https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4', 'invalid') is False
assert is_download_done('invalid', 'invalid') is False
+27
View File
@@ -0,0 +1,27 @@
from deepfuze.execution import encode_execution_providers, decode_execution_providers, has_execution_provider, apply_execution_provider_options
def test_encode_execution_providers() -> None:
assert encode_execution_providers([ 'CPUExecutionProvider' ]) == [ 'cpu' ]
def test_decode_execution_providers() -> None:
assert decode_execution_providers([ 'cpu' ]) == [ 'CPUExecutionProvider' ]
def test_has_execution_provider() -> None:
assert has_execution_provider('CPUExecutionProvider') is True
assert has_execution_provider('InvalidExecutionProvider') is False
def test_multiple_execution_providers() -> None:
execution_provider_with_options =\
[
'CPUExecutionProvider',
('CUDAExecutionProvider',
{
'device_id': '1',
'cudnn_conv_algo_search': 'DEFAULT'
})
]
assert apply_execution_provider_options('1', [ 'CPUExecutionProvider', 'CUDAExecutionProvider' ]) == execution_provider_with_options
+103
View File
@@ -0,0 +1,103 @@
import subprocess
import pytest
import deepfuze.globals
from deepfuze.download import conditional_download
from deepfuze.face_analyser import pre_check, clear_face_analyser, get_one_face
from deepfuze.typing import Face
from deepfuze.vision import read_static_image
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/source.jpg', '-vf', 'crop=iw*0.8:ih*0.8', '../../models/facefusion/examples/source-80crop.jpg' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/source.jpg', '-vf', 'crop=iw*0.7:ih*0.7', '../../models/facefusion/examples/source-70crop.jpg' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/source.jpg', '-vf', 'crop=iw*0.6:ih*0.6', '../../models/facefusion/examples/source-60crop.jpg' ])
@pytest.fixture(autouse = True)
def before_each() -> None:
deepfuze.globals.face_detector_score = 0.5
deepfuze.globals.face_landmarker_score = 0.5
deepfuze.globals.face_recognizer_model = 'arcface_inswapper'
clear_face_analyser()
def test_get_one_face_with_retinaface() -> None:
deepfuze.globals.face_detector_model = 'retinaface'
deepfuze.globals.face_detector_size = '320x320'
pre_check()
source_paths =\
[
'../../models/facefusion/examples/source.jpg',
'../../models/facefusion/examples/source-80crop.jpg',
'../../models/facefusion/examples/source-70crop.jpg',
'../../models/facefusion/examples/source-60crop.jpg'
]
for source_path in source_paths:
source_frame = read_static_image(source_path)
face = get_one_face(source_frame)
assert isinstance(face, Face)
def test_get_one_face_with_scrfd() -> None:
deepfuze.globals.face_detector_model = 'scrfd'
deepfuze.globals.face_detector_size = '640x640'
pre_check()
source_paths =\
[
'../../models/facefusion/examples/source.jpg',
'../../models/facefusion/examples/source-80crop.jpg',
'../../models/facefusion/examples/source-70crop.jpg',
'../../models/facefusion/examples/source-60crop.jpg'
]
for source_path in source_paths:
source_frame = read_static_image(source_path)
face = get_one_face(source_frame)
assert isinstance(face, Face)
def test_get_one_face_with_yoloface() -> None:
deepfuze.globals.face_detector_model = 'yoloface'
deepfuze.globals.face_detector_size = '640x640'
pre_check()
source_paths =\
[
'../../models/facefusion/examples/source.jpg',
'../../models/facefusion/examples/source-80crop.jpg',
'../../models/facefusion/examples/source-70crop.jpg',
'../../models/facefusion/examples/source-60crop.jpg'
]
for source_path in source_paths:
source_frame = read_static_image(source_path)
face = get_one_face(source_frame)
assert isinstance(face, Face)
def test_get_one_face_with_yunet() -> None:
deepfuze.globals.face_detector_model = 'yunet'
deepfuze.globals.face_detector_size = '640x640'
pre_check()
source_paths =\
[
'../../models/facefusion/examples/source.jpg',
'../../models/facefusion/examples/source-80crop.jpg',
'../../models/facefusion/examples/source-70crop.jpg',
'../../models/facefusion/examples/source-60crop.jpg'
]
for source_path in source_paths:
source_frame = read_static_image(source_path)
face = get_one_face(source_frame)
assert isinstance(face, Face)
+113
View File
@@ -0,0 +1,113 @@
import glob
import subprocess
import pytest
import deepfuze.globals
from deepfuze import process_manager
from deepfuze.filesystem import get_temp_directory_path, create_temp, clear_temp
from deepfuze.download import conditional_download
from deepfuze.ffmpeg import extract_frames, read_audio_buffer
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
process_manager.start()
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.mp3',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/source.mp3', '../../models/facefusion/examples/source.wav' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'fps=25', '../../models/facefusion/examples/target-240p-25fps.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'fps=30', '../../models/facefusion/examples/target-240p-30fps.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'fps=60', '../../models/facefusion/examples/target-240p-60fps.mp4' ])
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
deepfuze.globals.trim_frame_start = None
deepfuze.globals.trim_frame_end = None
deepfuze.globals.temp_frame_format = 'jpg'
def test_extract_frames() -> None:
target_paths =\
[
'../../models/facefusion/examples/target-240p-25fps.mp4',
'../../models/facefusion/examples/target-240p-30fps.mp4',
'../../models/facefusion/examples/target-240p-60fps.mp4'
]
for target_path in target_paths:
temp_directory_path = get_temp_directory_path(target_path)
create_temp(target_path)
assert extract_frames(target_path, '452x240', 30.0) is True
assert len(glob.glob1(temp_directory_path, '*.jpg')) == 324
clear_temp(target_path)
def test_extract_frames_with_trim_start() -> None:
deepfuze.globals.trim_frame_start = 224
data_provider =\
[
('../../models/facefusion/examples/target-240p-25fps.mp4', 55),
('../../models/facefusion/examples/target-240p-30fps.mp4', 100),
('../../models/facefusion/examples/target-240p-60fps.mp4', 212)
]
for target_path, frame_total in data_provider:
temp_directory_path = get_temp_directory_path(target_path)
create_temp(target_path)
assert extract_frames(target_path, '452x240', 30.0) is True
assert len(glob.glob1(temp_directory_path, '*.jpg')) == frame_total
clear_temp(target_path)
def test_extract_frames_with_trim_start_and_trim_end() -> None:
deepfuze.globals.trim_frame_start = 124
deepfuze.globals.trim_frame_end = 224
data_provider =\
[
('../../models/facefusion/examples/target-240p-25fps.mp4', 120),
('../../models/facefusion/examples/target-240p-30fps.mp4', 100),
('../../models/facefusion/examples/target-240p-60fps.mp4', 50)
]
for target_path, frame_total in data_provider:
temp_directory_path = get_temp_directory_path(target_path)
create_temp(target_path)
assert extract_frames(target_path, '452x240', 30.0) is True
assert len(glob.glob1(temp_directory_path, '*.jpg')) == frame_total
clear_temp(target_path)
def test_extract_frames_with_trim_end() -> None:
deepfuze.globals.trim_frame_end = 100
data_provider =\
[
('../../models/facefusion/examples/target-240p-25fps.mp4', 120),
('../../models/facefusion/examples/target-240p-30fps.mp4', 100),
('../../models/facefusion/examples/target-240p-60fps.mp4', 50)
]
for target_path, frame_total in data_provider:
temp_directory_path = get_temp_directory_path(target_path)
create_temp(target_path)
assert extract_frames(target_path, '426x240', 30.0) is True
assert len(glob.glob1(temp_directory_path, '*.jpg')) == frame_total
clear_temp(target_path)
def test_read_audio_buffer() -> None:
assert isinstance(read_audio_buffer('../../models/facefusion/examples/source.mp3', 1, 1), bytes)
assert isinstance(read_audio_buffer('../../models/facefusion/examples/source.wav', 1, 1), bytes)
assert read_audio_buffer('../../models/facefusion/examples/invalid.mp3', 1, 1) is None
+90
View File
@@ -0,0 +1,90 @@
import shutil
import pytest
from deepfuze.common_helper import is_windows
from deepfuze.download import conditional_download
from deepfuze.filesystem import get_file_size, is_file, is_directory, is_audio, has_audio, is_image, has_image, is_video, filter_audio_paths, filter_image_paths, list_directory, sanitize_path_for_windows
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.mp3',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4'
])
shutil.copyfile('../../models/facefusion/examples/source.jpg', '../../models/facefusion/examples/söurce.jpg')
def test_get_file_size() -> None:
assert get_file_size('../../models/facefusion/examples/source.jpg') > 0
assert get_file_size('invalid') == 0
def test_is_file() -> None:
assert is_file('../../models/facefusion/examples/source.jpg') is True
assert is_file('../../models/facefusion/examples') is False
assert is_file('invalid') is False
def test_is_directory() -> None:
assert is_directory('../../models/facefusion/examples') is True
assert is_directory('../../models/facefusion/examples/source.jpg') is False
assert is_directory('invalid') is False
def test_is_audio() -> None:
assert is_audio('../../models/facefusion/examples/source.mp3') is True
assert is_audio('../../models/facefusion/examples/source.jpg') is False
assert is_audio('invalid') is False
def test_has_audio() -> None:
assert has_audio([ '../../models/facefusion/examples/source.mp3' ]) is True
assert has_audio([ '../../models/facefusion/examples/source.mp3', '../../models/facefusion/examples/source.jpg' ]) is True
assert has_audio([ '../../models/facefusion/examples/source.jpg', '../../models/facefusion/examples/source.jpg' ]) is False
assert has_audio([ 'invalid' ]) is False
def test_is_image() -> None:
assert is_image('../../models/facefusion/examples/source.jpg') is True
assert is_image('../../models/facefusion/examples/target-240p.mp4') is False
assert is_image('invalid') is False
def test_has_image() -> None:
assert has_image([ '../../models/facefusion/examples/source.jpg' ]) is True
assert has_image([ '../../models/facefusion/examples/source.jpg', '../../models/facefusion/examples/source.mp3' ]) is True
assert has_image([ '../../models/facefusion/examples/source.mp3', '../../models/facefusion/examples/source.mp3' ]) is False
assert has_image([ 'invalid' ]) is False
def test_is_video() -> None:
assert is_video('../../models/facefusion/examples/target-240p.mp4') is True
assert is_video('../../models/facefusion/examples/source.jpg') is False
assert is_video('invalid') is False
def test_filter_audio_paths() -> None:
assert filter_audio_paths([ '../../models/facefusion/examples/source.jpg', '../../models/facefusion/examples/source.mp3' ]) == [ '../../models/facefusion/examples/source.mp3' ]
assert filter_audio_paths([ '../../models/facefusion/examples/source.jpg', '../../models/facefusion/examples/source.jpg' ]) == []
assert filter_audio_paths([ 'invalid' ]) == []
def test_filter_image_paths() -> None:
assert filter_image_paths([ '../../models/facefusion/examples/source.jpg', '../../models/facefusion/examples/source.mp3' ]) == [ '../../models/facefusion/examples/source.jpg' ]
assert filter_image_paths([ '../../models/facefusion/examples/source.mp3', '../../models/facefusion/examples/source.mp3' ]) == []
assert filter_audio_paths([ 'invalid' ]) == []
def test_list_directory() -> None:
assert list_directory('../../models/facefusion/examples')
assert list_directory('../../models/facefusion/examples/source.jpg') is None
assert list_directory('invalid') is None
def test_sanitize_path_for_windows() -> None:
if is_windows():
assert sanitize_path_for_windows('../../models/facefusion/examples/söurce.jpg') == 'ASSETS~1/examples/SURCE~1.JPG'
assert sanitize_path_for_windows('invalid') is None
+8
View File
@@ -0,0 +1,8 @@
from deepfuze.common_helper import is_linux, is_macos
from deepfuze.memory import limit_system_memory
def test_limit_system_memory() -> None:
assert limit_system_memory(4) is True
if is_linux() or is_macos():
assert limit_system_memory(1024) is False
+30
View File
@@ -0,0 +1,30 @@
from deepfuze.common_helper import is_linux, is_macos
from deepfuze.normalizer import normalize_output_path, normalize_padding, normalize_fps
def test_normalize_output_path() -> None:
if is_linux() or is_macos():
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', '../../models/facefusion/examples/target-240p.mp4') == '../../models/facefusion/examples/target-240p.mp4'
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', '../../models/facefusion/examples').startswith('../../models/facefusion/examples/target-240p')
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', '../../models/facefusion/examples').endswith('.mp4')
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', '../../models/facefusion/examples/output.mp4') == '../../models/facefusion/examples/output.mp4'
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', '../../models/facefusion/examples/invalid') is None
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', '../../models/facefusion/invalid/output.mp4') is None
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', 'invalid') is None
assert normalize_output_path('../../models/facefusion/examples/target-240p.mp4', None) is None
assert normalize_output_path(None, '../../models/facefusion/examples/output.mp4') is None
def test_normalize_padding() -> None:
assert normalize_padding([ 0, 0, 0, 0 ]) == (0, 0, 0, 0)
assert normalize_padding([ 1 ]) == (1, 1, 1, 1)
assert normalize_padding([ 1, 2 ]) == (1, 2, 1, 2)
assert normalize_padding([ 1, 2, 3 ]) == (1, 2, 3, 2)
assert normalize_padding(None) is None
def test_normalize_fps() -> None:
assert normalize_fps(0.0) == 1.0
assert normalize_fps(25.0) == 25.0
assert normalize_fps(61.0) == 60.0
assert normalize_fps(None) is None
+22
View File
@@ -0,0 +1,22 @@
from deepfuze.process_manager import set_process_state, is_processing, is_stopping, is_pending, start, stop, end
def test_start() -> None:
set_process_state('pending')
start()
assert is_processing()
def test_stop() -> None:
set_process_state('processing')
stop()
assert is_stopping()
def test_end() -> None:
set_process_state('processing')
end()
assert is_pending()
+109
View File
@@ -0,0 +1,109 @@
import subprocess
import pytest
from deepfuze.download import conditional_download
from deepfuze.vision import detect_image_resolution, restrict_image_resolution, create_image_resolutions, get_video_frame, count_video_frame_total, detect_video_fps, restrict_video_fps, detect_video_resolution, restrict_video_resolution, create_video_resolutions, normalize_resolution, pack_resolution, unpack_resolution
@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
conditional_download('../../models/facefusion/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-1080p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '../../models/facefusion/examples/target-240p.jpg' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-1080p.mp4', '-vframes', '1', '../../models/facefusion/examples/target-1080p.jpg' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vframes', '1', '-vf', 'transpose=0', '../../models/facefusion/examples/target-240p-90deg.jpg' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-1080p.mp4', '-vframes', '1', '-vf', 'transpose=0', '../../models/facefusion/examples/target-1080p-90deg.jpg' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'fps=25', '../../models/facefusion/examples/target-240p-25fps.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'fps=30', '../../models/facefusion/examples/target-240p-30fps.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'fps=60', '../../models/facefusion/examples/target-240p-60fps.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-240p.mp4', '-vf', 'transpose=0', '../../models/facefusion/examples/target-240p-90deg.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '../../models/facefusion/examples/target-1080p.mp4', '-vf', 'transpose=0', '../../models/facefusion/examples/target-1080p-90deg.mp4' ])
def test_detect_image_resolution() -> None:
assert detect_image_resolution('../../models/facefusion/examples/target-240p.jpg') == (426, 226)
assert detect_image_resolution('../../models/facefusion/examples/target-240p-90deg.jpg') == (226, 426)
assert detect_image_resolution('../../models/facefusion/examples/target-1080p.jpg') == (2048, 1080)
assert detect_image_resolution('../../models/facefusion/examples/target-1080p-90deg.jpg') == (1080, 2048)
assert detect_image_resolution('invalid') is None
def test_restrict_image_resolution() -> None:
assert restrict_image_resolution('../../models/facefusion/examples/target-1080p.jpg', (426, 226)) == (426, 226)
assert restrict_image_resolution('../../models/facefusion/examples/target-1080p.jpg', (2048, 1080)) == (2048, 1080)
assert restrict_image_resolution('../../models/facefusion/examples/target-1080p.jpg', (4096, 2160)) == (2048, 1080)
def test_create_image_resolutions() -> None:
assert create_image_resolutions((426, 226)) == [ '106x56', '212x112', '320x170', '426x226', '640x340', '852x452', '1064x564', '1278x678', '1492x792', '1704x904' ]
assert create_image_resolutions((226, 426)) == [ '56x106', '112x212', '170x320', '226x426', '340x640', '452x852', '564x1064', '678x1278', '792x1492', '904x1704' ]
assert create_image_resolutions((2048, 1080)) == [ '512x270', '1024x540', '1536x810', '2048x1080', '3072x1620', '4096x2160', '5120x2700', '6144x3240', '7168x3780', '8192x4320' ]
assert create_image_resolutions((1080, 2048)) == [ '270x512', '540x1024', '810x1536', '1080x2048', '1620x3072', '2160x4096', '2700x5120', '3240x6144', '3780x7168', '4320x8192' ]
assert create_image_resolutions(None) == []
def test_get_video_frame() -> None:
assert get_video_frame('../../models/facefusion/examples/target-240p-25fps.mp4') is not None
assert get_video_frame('invalid') is None
def test_count_video_frame_total() -> None:
assert count_video_frame_total('../../models/facefusion/examples/target-240p-25fps.mp4') == 270
assert count_video_frame_total('../../models/facefusion/examples/target-240p-30fps.mp4') == 324
assert count_video_frame_total('../../models/facefusion/examples/target-240p-60fps.mp4') == 648
assert count_video_frame_total('invalid') == 0
def test_detect_video_fps() -> None:
assert detect_video_fps('../../models/facefusion/examples/target-240p-25fps.mp4') == 25.0
assert detect_video_fps('../../models/facefusion/examples/target-240p-30fps.mp4') == 30.0
assert detect_video_fps('../../models/facefusion/examples/target-240p-60fps.mp4') == 60.0
assert detect_video_fps('invalid') is None
def test_restrict_video_fps() -> None:
assert restrict_video_fps('../../models/facefusion/examples/target-1080p.mp4', 20.0) == 20.0
assert restrict_video_fps('../../models/facefusion/examples/target-1080p.mp4', 25.0) == 25.0
assert restrict_video_fps('../../models/facefusion/examples/target-1080p.mp4', 60.0) == 25.0
def test_detect_video_resolution() -> None:
assert detect_video_resolution('../../models/facefusion/examples/target-240p.mp4') == (426, 226)
assert detect_video_resolution('../../models/facefusion/examples/target-240p-90deg.mp4') == (226, 426)
assert detect_video_resolution('../../models/facefusion/examples/target-1080p.mp4') == (2048, 1080)
assert detect_video_resolution('../../models/facefusion/examples/target-1080p-90deg.mp4') == (1080, 2048)
assert detect_video_resolution('invalid') is None
def test_restrict_video_resolution() -> None:
assert restrict_video_resolution('../../models/facefusion/examples/target-1080p.mp4', (426, 226)) == (426, 226)
assert restrict_video_resolution('../../models/facefusion/examples/target-1080p.mp4', (2048, 1080)) == (2048, 1080)
assert restrict_video_resolution('../../models/facefusion/examples/target-1080p.mp4', (4096, 2160)) == (2048, 1080)
def test_create_video_resolutions() -> None:
assert create_video_resolutions((426, 226)) == [ '426x226', '452x240', '678x360', '904x480', '1018x540', '1358x720', '2036x1080', '2714x1440', '4072x2160', '8144x4320' ]
assert create_video_resolutions((226, 426)) == [ '226x426', '240x452', '360x678', '480x904', '540x1018', '720x1358', '1080x2036', '1440x2714', '2160x4072', '4320x8144' ]
assert create_video_resolutions((2048, 1080)) == [ '456x240', '682x360', '910x480', '1024x540', '1366x720', '2048x1080', '2730x1440', '4096x2160', '8192x4320' ]
assert create_video_resolutions((1080, 2048)) == [ '240x456', '360x682', '480x910', '540x1024', '720x1366', '1080x2048', '1440x2730', '2160x4096', '4320x8192' ]
assert create_video_resolutions(None) == []
def test_normalize_resolution() -> None:
assert normalize_resolution((2.5, 2.5)) == (2, 2)
assert normalize_resolution((3.0, 3.0)) == (4, 4)
assert normalize_resolution((6.5, 6.5)) == (6, 6)
def test_pack_resolution() -> None:
assert pack_resolution((1, 1)) == '0x0'
assert pack_resolution((2, 2)) == '2x2'
def test_unpack_resolution() -> None:
assert unpack_resolution('0x0') == (0, 0)
assert unpack_resolution('2x2') == (2, 2)
+7
View File
@@ -0,0 +1,7 @@
from deepfuze import wording
def test_get() -> None:
assert wording.get('python_not_supported')
assert wording.get('help.source')
assert wording.get('invalid') is None