Merge pull request #10 from facefusion/develop

Develop
This commit is contained in:
Henry Ruhs 2023-08-21 17:11:48 +02:00 committed by GitHub
commit 2de53c57fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 66 additions and 24 deletions

View File

@ -14,8 +14,8 @@ jobs:
python-version: '3.10' python-version: '3.10'
- run: pip install flake8 - run: pip install flake8
- run: pip install mypy - run: pip install mypy
- run: flake8 run.py facefusion - run: flake8 run.py facefusion tests
- run: mypy run.py facefusion - run: mypy run.py facefusion tests
test: test:
strategy: strategy:
matrix: matrix:
@ -31,13 +31,4 @@ jobs:
with: with:
python-version: '3.10' python-version: '3.10'
- run: pip install -r requirements-ci.txt - run: pip install -r requirements-ci.txt
- run: curl --create-dirs --output .assets/examples/source.jpg https://huggingface.co/facefusion/examples/resolve/main/source.jpg - run: pytest
- run: curl --create-dirs --output .assets/examples/target-240p.mp4 https://huggingface.co/facefusion/examples/resolve/main/target-240p.mp4
- run: python run.py --source .assets/examples/source.jpg --target .assets/examples/target-240p.mp4 --output .assets/examples --trim-frame-end 24
if: matrix.os != 'windows-latest'
- run: python run.py --source .assets\examples\source.jpg --target .assets\examples\target-240p.mp4 --output .assets\examples --trim-frame-end 24
if: matrix.os == 'windows-latest'
- run: ffprobe -show_format -show_streams .assets/examples/source-target-240p.mp4
if: matrix.os != 'windows-latest'
- run: ffprobe -show_format -show_streams .assets\examples\source-target-240p.mp4
if: matrix.os == 'windows-latest'

View File

@ -39,7 +39,7 @@ def clear_frame_processor() -> None:
def pre_check() -> bool: def pre_check() -> bool:
download_directory_path = resolve_relative_path('../.assets/models') download_directory_path = resolve_relative_path('../.assets/models')
conditional_download(download_directory_path, ['https://huggingface.co/facefusion/models/resolve/main/GFPGANv1.4.pth']) conditional_download(download_directory_path, ['https://github.com/facefusion/facefusion-assets/releases/download/models/GFPGANv1.4.pth'])
return True return True

View File

@ -35,7 +35,7 @@ def clear_frame_processor() -> None:
def pre_check() -> bool: def pre_check() -> bool:
download_directory_path = resolve_relative_path('../.assets/models') download_directory_path = resolve_relative_path('../.assets/models')
conditional_download(download_directory_path, ['https://huggingface.co/facefusion/models/resolve/main/inswapper_128.onnx']) conditional_download(download_directory_path, ['https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnx'])
return True return True

View File

@ -47,7 +47,7 @@ def clear_frame_processor() -> None:
def pre_check() -> bool: def pre_check() -> bool:
download_directory_path = resolve_relative_path('../.assets/models') download_directory_path = resolve_relative_path('../.assets/models')
conditional_download(download_directory_path, ['https://huggingface.co/facefusion/models/resolve/main/RealESRGAN_x4plus.pth']) conditional_download(download_directory_path, ['https://github.com/facefusion/facefusion-assets/releases/download/models/RealESRGAN_x4plus.pth'])
return True return True

View File

@ -7,14 +7,14 @@ from facefusion.utilities import conditional_download
def pre_check() -> bool: def pre_check() -> bool:
conditional_download('.assets/examples', conditional_download('.assets/examples',
[ [
'https://huggingface.co/facefusion/examples/resolve/main/source.jpg', 'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://huggingface.co/facefusion/examples/resolve/main/target-240p.mp4', 'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-240p.mp4',
'https://huggingface.co/facefusion/examples/resolve/main/target-360p.mp4', 'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-360p.mp4',
'https://huggingface.co/facefusion/examples/resolve/main/target-540p.mp4', 'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-540p.mp4',
'https://huggingface.co/facefusion/examples/resolve/main/target-720p.mp4', 'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-720p.mp4',
'https://huggingface.co/facefusion/examples/resolve/main/target-1080p.mp4', 'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-1080p.mp4',
'https://huggingface.co/facefusion/examples/resolve/main/target-1440p.mp4', 'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-1440p.mp4',
'https://huggingface.co/facefusion/examples/resolve/main/target-2160p.mp4' 'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-2160p.mp4'
]) ])
return True return True

View File

@ -5,6 +5,7 @@ onnxruntime==1.15.1
opencv-python==4.8.0.74 opencv-python==4.8.0.74
opennsfw2==0.10.2 opennsfw2==0.10.2
protobuf==4.23.4 protobuf==4.23.4
pytest==7.4.0
psutil==5.9.5 psutil==5.9.5
tensorflow==2.13.0 tensorflow==2.13.0
tqdm==4.65.0 tqdm==4.65.0

0
tests/__init__.py Normal file
View File

29
tests/test_cli.py Normal file
View File

@ -0,0 +1,29 @@
import subprocess
import pytest
from facefusion import wording
from facefusion.utilities import conditional_download
@pytest.fixture(scope = 'module', autouse = True)
def setup() -> None:
conditional_download('.assets/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/source.jpg',
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-1080p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '.assets/examples/target-1080p.mp4', '-vframes', '1', '.assets/examples/target-1080p.jpg' ])
def test_image_to_image() -> None:
commands = [ 'python', 'run.py', '-s', '.assets/examples/source.jpg', '-t', '.assets/examples/target-1080p.jpg', '-o', '.assets/examples' ]
run = subprocess.run(commands, stdout = subprocess.PIPE)
assert run.returncode == 0
assert wording.get('processing_image_succeed') in run.stdout.decode()
def test_image_to_video() -> None:
commands = [ 'python', 'run.py', '-s', '.assets/examples/source.jpg', '-t', '.assets/examples/target-1080p.mp4', '-o', '.assets/examples', '--trim-frame-end', '10' ]
run = subprocess.run(commands, stdout = subprocess.PIPE)
assert run.returncode == 0
assert wording.get('processing_video_succeed') in run.stdout.decode()

21
tests/test_utilities.py Normal file
View File

@ -0,0 +1,21 @@
import subprocess
import pytest
from facefusion.utilities import conditional_download, detect_fps
@pytest.fixture(scope = 'module', autouse = True)
def setup() -> None:
conditional_download('.assets/examples',
[
'https://github.com/facefusion/facefusion-assets/releases/download/examples/target-1080p.mp4'
])
subprocess.run([ 'ffmpeg', '-i', '.assets/examples/target-1080p.mp4', '-vf', 'fps=25', '.assets/examples/target-1080p-25fps.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '.assets/examples/target-1080p.mp4', '-vf', 'fps=30', '.assets/examples/target-1080p-30fps.mp4' ])
subprocess.run([ 'ffmpeg', '-i', '.assets/examples/target-1080p.mp4', '-vf', 'fps=60', '.assets/examples/target-1080p-60fps.mp4' ])
def test_detect_fps() -> None:
assert detect_fps('.assets/examples/target-1080p-25fps.mp4') == 25.0
assert detect_fps('.assets/examples/target-1080p-30fps.mp4') == 30.0
assert detect_fps('.assets/examples/target-1080p-60fps.mp4') == 60.0