Add more deepfacelive models

This commit is contained in:
henryruhs 2024-11-14 15:06:03 +01:00
parent ca035068fe
commit 7605b5451b
4 changed files with 117 additions and 23 deletions

View File

@ -14,7 +14,7 @@ from facefusion.choices import download_provider_set
from facefusion.common_helper import is_macos from facefusion.common_helper import is_macos
from facefusion.filesystem import get_file_size, is_file, remove_file from facefusion.filesystem import get_file_size, is_file, remove_file
from facefusion.hash_helper import validate_hash from facefusion.hash_helper import validate_hash
from facefusion.typing import DownloadSet from facefusion.typing import DownloadProviderKey, DownloadSet
if is_macos(): if is_macos():
ssl._create_default_https_context = ssl._create_unverified_context ssl._create_default_https_context = ssl._create_unverified_context
@ -130,5 +130,9 @@ def resolve_download_url(base_name : str, file_name : str) -> Optional[str]:
for download_provider in download_provider_set: for download_provider in download_provider_set:
if download_provider in download_providers: if download_provider in download_providers:
return download_provider_set.get(download_provider).format(base_name = base_name, file_name = file_name) return resolve_download_url_by_provider(download_provider, base_name, file_name)
return None return None
def resolve_download_url_by_provider(download_provider : DownloadProviderKey, base_name : str, file_name : str) -> Optional[str]:
return download_provider_set.get(download_provider).format(base_name = base_name, file_name = file_name)

View File

@ -4,7 +4,7 @@ from facefusion.common_helper import create_float_range, create_int_range
from facefusion.processors.typing import AgeModifierModel, DeepSwapperModel, ExpressionRestorerModel, FaceDebuggerItem, FaceEditorModel, FaceEnhancerModel, FaceSwapperSet, FrameColorizerModel, FrameEnhancerModel, LipSyncerModel from facefusion.processors.typing import AgeModifierModel, DeepSwapperModel, ExpressionRestorerModel, FaceDebuggerItem, FaceEditorModel, FaceEnhancerModel, FaceSwapperSet, FrameColorizerModel, FrameEnhancerModel, LipSyncerModel
age_modifier_models : List[AgeModifierModel] = [ 'styleganex_age' ] age_modifier_models : List[AgeModifierModel] = [ 'styleganex_age' ]
deep_swapper_models : List[DeepSwapperModel] = [ 'iperov/jackie_chan_224' ] deep_swapper_models : List[DeepSwapperModel] = [ 'iperov/emma_watson_224', 'iperov/jackie_chan_224', 'iperov/keanu_reeves_320', 'iperov/sylvester_stallone_224', 'iperov/taylor_swift_224' ]
expression_restorer_models : List[ExpressionRestorerModel] = [ 'live_portrait' ] expression_restorer_models : List[ExpressionRestorerModel] = [ 'live_portrait' ]
face_debugger_items : List[FaceDebuggerItem] = [ 'bounding-box', 'face-landmark-5', 'face-landmark-5/68', 'face-landmark-68', 'face-landmark-68/5', 'face-mask', 'face-detector-score', 'face-landmarker-score', 'age', 'gender', 'race' ] face_debugger_items : List[FaceDebuggerItem] = [ 'bounding-box', 'face-landmark-5', 'face-landmark-5/68', 'face-landmark-68', 'face-landmark-68/5', 'face-mask', 'face-detector-score', 'face-landmarker-score', 'age', 'gender', 'race' ]
face_editor_models : List[FaceEditorModel] = [ 'live_portrait' ] face_editor_models : List[FaceEditorModel] = [ 'live_portrait' ]

View File

@ -8,7 +8,7 @@ import facefusion.jobs.job_manager
import facefusion.jobs.job_store import facefusion.jobs.job_store
import facefusion.processors.core as processors import facefusion.processors.core as processors
from facefusion import config, content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, inference_manager, logger, process_manager, state_manager, wording from facefusion import config, content_analyser, face_classifier, face_detector, face_landmarker, face_masker, face_recognizer, inference_manager, logger, process_manager, state_manager, wording
from facefusion.download import conditional_download_hashes, conditional_download_sources from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url_by_provider
from facefusion.face_analyser import get_many_faces, get_one_face from facefusion.face_analyser import get_many_faces, get_one_face
from facefusion.face_helper import paste_back, warp_face_for_deepfacelive from facefusion.face_helper import paste_back, warp_face_for_deepfacelive
from facefusion.face_masker import create_occlusion_mask, create_static_box_mask from facefusion.face_masker import create_occlusion_mask, create_static_box_mask
@ -22,31 +22,121 @@ from facefusion.thread_helper import thread_semaphore
from facefusion.typing import ApplyStateItem, Args, Face, InferencePool, Mask, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame from facefusion.typing import ApplyStateItem, Args, Face, InferencePool, Mask, ModelOptions, ModelSet, ProcessMode, QueuePayload, UpdateProgress, VisionFrame
from facefusion.vision import conditional_match_frame_color, read_image, read_static_image, write_image from facefusion.vision import conditional_match_frame_color, read_image, read_static_image, write_image
MODEL_SET : ModelSet =\
{ def create_model_set() -> ModelSet:
'iperov/jackie_chan_224': return\
{ {
'hashes': 'iperov/emma_watson_224':
{ {
'deep_swapper': 'hashes':
{ {
'url': 'https://huggingface.co/bluefoxcreation/DFM/resolve/main/Jackie_Chan.hash', 'deep_swapper':
'path': resolve_relative_path('../.assets/models/Jackie_Chan.hash') {
} 'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'emma_watson_224.hash'),
'path': resolve_relative_path('../.assets/models/emma_watson_224.hash')
}
},
'sources':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'emma_watson_224.dfm'),
'path': resolve_relative_path('../.assets/models/emma_watson_224.dfm')
}
},
'size': (224, 224),
'shift': (0.0, 0.0),
'coverage': 2.2
}, },
'sources': 'iperov/jackie_chan_224':
{ {
'deep_swapper': 'hashes':
{ {
'url': 'https://github.com/iperov/DeepFaceLive/releases/download/JACKIE_CHAN/Jackie_Chan.dfm', 'deep_swapper':
'path': resolve_relative_path('../.assets/models/Jackie_Chan.dfm') {
} 'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'jackie_chan_224.hash'),
'path': resolve_relative_path('../.assets/models/jackie_chan_224.hash')
}
},
'sources':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'jackie_chan_224.dfm'),
'path': resolve_relative_path('../.assets/models/jackie_chan_224.dfm')
}
},
'size': (224, 224),
'shift': (0.0, 0.0),
'coverage': 2.2
}, },
'size': (224, 224), 'iperov/keanu_reeves_320':
'shift': (0.0, 0.0), {
'coverage': 2.2 'hashes':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'keanu_reeves_320.hash'),
'path': resolve_relative_path('../.assets/models/keanu_reeves_320.hash')
}
},
'sources':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'keanu_reeves_320.dfm'),
'path': resolve_relative_path('../.assets/models/keanu_reeves_320.dfm')
}
},
'size': (320, 320),
'shift': (0.0, 0.0),
'coverage': 2.2
},
'iperov/sylvester_stallone_224':
{
'hashes':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'sylvester_stallone_224.hash'),
'path': resolve_relative_path('../.assets/models/sylvester_stallone_224.hash')
}
},
'sources':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'sylvester_stallone_224.dfm'),
'path': resolve_relative_path('../.assets/models/sylvester_stallone_224.dfm')
}
},
'size': (224, 224),
'shift': (0.0, 0.0),
'coverage': 2.2
},
'iperov/taylor_swift_224':
{
'hashes':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'taylor_swift_224.hash'),
'path': resolve_relative_path('../.assets/models/taylor_swift_224.hash')
}
},
'sources':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'taylor_swift_224.dfm'),
'path': resolve_relative_path('../.assets/models/taylor_swift_224.dfm')
}
},
'size': (224, 224),
'shift': (0.0, 0.0),
'coverage': 2.2
}
} }
}
def get_inference_pool() -> InferencePool: def get_inference_pool() -> InferencePool:
@ -62,7 +152,7 @@ def clear_inference_pool() -> None:
def get_model_options() -> ModelOptions: def get_model_options() -> ModelOptions:
deep_swapper_model = state_manager.get_item('deep_swapper_model') deep_swapper_model = state_manager.get_item('deep_swapper_model')
return MODEL_SET.get(deep_swapper_model) return create_model_set().get(deep_swapper_model)
def register_args(program : ArgumentParser) -> None: def register_args(program : ArgumentParser) -> None:

View File

@ -5,7 +5,7 @@ from numpy._typing import NDArray
from facefusion.typing import AppContext, AudioFrame, Face, FaceSet, VisionFrame from facefusion.typing import AppContext, AudioFrame, Face, FaceSet, VisionFrame
AgeModifierModel = Literal['styleganex_age'] AgeModifierModel = Literal['styleganex_age']
DeepSwapperModel = Literal['iperov/jackie_chan_224'] DeepSwapperModel = Literal['iperov/emma_watson_224', 'iperov/jackie_chan_224', 'iperov/keanu_reeves_320', 'iperov/sylvester_stallone_224', 'iperov/taylor_swift_224']
ExpressionRestorerModel = Literal['live_portrait'] ExpressionRestorerModel = Literal['live_portrait']
FaceDebuggerItem = Literal['bounding-box', 'face-landmark-5', 'face-landmark-5/68', 'face-landmark-68', 'face-landmark-68/5', 'face-mask', 'face-detector-score', 'face-landmarker-score', 'age', 'gender', 'race'] FaceDebuggerItem = Literal['bounding-box', 'face-landmark-5', 'face-landmark-5/68', 'face-landmark-68', 'face-landmark-68/5', 'face-mask', 'face-detector-score', 'face-landmarker-score', 'age', 'gender', 'race']
FaceEditorModel = Literal['live_portrait'] FaceEditorModel = Literal['live_portrait']