Add more deepfacelive models (#817)

* Add more deepfacelive models

* Add more deepfacelive models
This commit is contained in:
Henry Ruhs 2024-11-15 22:02:52 +01:00 committed by GitHub
parent ba71e96302
commit db64c529d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 128 additions and 105 deletions

View File

@ -16,7 +16,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.50000000, 0.61154464 ],
[ 0.37913393, 0.77687500 ],
[ 0.62086607, 0.77687500 ]
]).astype(numpy.float32),
]),
'arcface_112_v2': numpy.array(
[
[ 0.34191607, 0.46157411 ],
@ -24,7 +24,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.50022500, 0.64050536 ],
[ 0.37097589, 0.82469196 ],
[ 0.63151696, 0.82325089 ]
]).astype(numpy.float32),
]),
'arcface_128_v2': numpy.array(
[
[ 0.36167656, 0.40387734 ],
@ -32,7 +32,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.50019687, 0.56044219 ],
[ 0.38710391, 0.72160547 ],
[ 0.61507734, 0.72034453 ]
]).astype(numpy.float32),
]),
'dfl_head': numpy.array(
[
[ 0.39062554, 0.59114583 ],
@ -40,7 +40,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.49414062, 0.70898442 ],
[ 0.41796875, 0.82031255 ],
[ 0.58007813, 0.82031255 ]
]).astype(numpy.float32),
]),
'dfl_whole_face': numpy.array(
[
[ 0.36816406, 0.40429688 ],
@ -48,7 +48,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.49023438, 0.54296875 ],
[ 0.39843755, 0.68554699 ],
[ 0.59375543, 0.68554699 ]
]).astype(numpy.float32),
]),
'ffhq_512': numpy.array(
[
[ 0.37691676, 0.46864664 ],
@ -56,7 +56,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.50123859, 0.61331904 ],
[ 0.39308822, 0.72541100 ],
[ 0.61150205, 0.72490465 ]
]).astype(numpy.float32),
]),
'mtcnn_512': numpy.array(
[
[ 0.36562865, 0.46733799 ],
@ -64,7 +64,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.50019127, 0.61942959 ],
[ 0.39032951, 0.77598822 ],
[ 0.61178945, 0.77476328 ]
]).astype(numpy.float32),
]),
'styleganex_384': numpy.array(
[
[ 0.42353745, 0.52289879 ],
@ -72,7 +72,7 @@ WARP_TEMPLATES : WarpTemplateSet =\
[ 0.50123859, 0.61331904 ],
[ 0.43364461, 0.68337652 ],
[ 0.57015325, 0.68306005 ]
]).astype(numpy.float32)
])
}

View File

@ -4,7 +4,41 @@ 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
age_modifier_models : List[AgeModifierModel] = [ 'styleganex_age' ]
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' ]
deep_swapper_models : List[DeepSwapperModel] =\
[
'iperov/emma_watson_224',
'iperov/keanu_reeves_320',
'iperov/jackie_chan_224',
'iperov/alexandra_daddario_224',
'iperov/alexei_navalny_224',
'iperov/amber_heard_224',
'iperov/dilraba_dilmurat_224',
'iperov/elon_musk_224',
'iperov/emilia_clarke_224',
'iperov/emma_watson_224',
'iperov/erin_moriarty_224',
'iperov/jackie_chan_224',
'iperov/james_carrey_224',
'iperov/jason_statham_320',
'iperov/jessica_alba_224',
'iperov/keanu_reeves_320',
'iperov/lucy_liu_224',
'iperov/margot_robbie_224',
'iperov/meghan_markle_224',
'iperov/natalie_dormer_224',
'iperov/natalie_portman_224',
'iperov/nicolas_coppola__224',
'iperov/robert_downey_224',
'iperov/rowan_atkinson_224',
'iperov/ryan_reynolds_224',
'iperov/scarlett_johansson_224',
'iperov/sylvester_stallone_224',
'iperov/taylor_swift_224',
'iperov/thomas_cruise_224',
'iperov/thomas_holland_224',
'iperov/vin_diesel_224',
'iperov/vladimir_putin_224'
]
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_editor_models : List[FaceEditorModel] = [ 'live_portrait' ]

View File

@ -25,114 +25,69 @@ from facefusion.vision import conditional_match_frame_color, read_image, read_st
def create_model_set() -> ModelSet:
return\
{
'iperov/emma_watson_224':
model_config =\
[
('iperov', 'emma_watson_224', 'dfl_whole_face', (224, 224)),
('iperov', 'keanu_reeves_320', 'dfl_whole_face', (320, 320)),
('iperov', 'jackie_chan_224', 'dfl_whole_face', (224, 224)),
('iperov', 'alexandra_daddario_224', 'dfl_whole_face', (224, 224)),
('iperov', 'alexei_navalny_224', 'dfl_whole_face', (224, 224)),
('iperov', 'amber_heard_224', 'dfl_whole_face', (224, 224)),
('iperov', 'dilraba_dilmurat_224', 'dfl_whole_face', (224, 224)),
('iperov', 'elon_musk_224', 'dfl_whole_face', (224, 224)),
('iperov', 'emilia_clarke_224', 'dfl_whole_face', (224, 224)),
('iperov', 'emma_watson_224', 'dfl_whole_face', (224, 224)),
('iperov', 'erin_moriarty_224', 'dfl_whole_face', (224, 224)),
('iperov', 'jackie_chan_224', 'dfl_whole_face', (224, 224)),
('iperov', 'james_carrey_224', 'dfl_whole_face', (224, 224)),
('iperov', 'jason_statham_320', 'dfl_whole_face', (224, 224)),
('iperov', 'jessica_alba_224', 'dfl_whole_face', (224, 224)),
('iperov', 'keanu_reeves_320', 'dfl_whole_face', (224, 224)),
('iperov', 'lucy_liu_224', 'dfl_whole_face', (224, 224)),
('iperov', 'margot_robbie_224', 'dfl_whole_face', (224, 224)),
('iperov', 'meghan_markle_224', 'dfl_whole_face', (224, 224)),
('iperov', 'natalie_dormer_224', 'dfl_whole_face', (224, 224)),
('iperov', 'natalie_portman_224', 'dfl_whole_face', (224, 224)),
('iperov', 'nicolas_coppola__224', 'dfl_whole_face', (224, 224)),
('iperov', 'robert_downey_224', 'dfl_whole_face', (224, 224)),
('iperov', 'rowan_atkinson_224', 'dfl_whole_face', (224, 224)),
('iperov', 'ryan_reynolds_224', 'dfl_whole_face', (224, 224)),
('iperov', 'scarlett_johansson_224', 'dfl_whole_face', (224, 224)),
('iperov', 'sylvester_stallone_224', 'dfl_whole_face', (224, 224)),
('iperov', 'taylor_swift_224', 'dfl_whole_face', (224, 224)),
('iperov', 'thomas_cruise_224', 'dfl_whole_face', (224, 224)),
('iperov', 'thomas_holland_224', 'dfl_whole_face', (224, 224)),
('iperov', 'vin_diesel_224', 'dfl_whole_face', (224, 224)),
('iperov', 'vladimir_putin_224', 'dfl_whole_face', (224, 224))
]
model_set : ModelSet = {}
for model_creator, model_name, model_template, model_size in model_config:
model_id = '/'.join([ model_creator, model_name ])
model_set[model_id] =\
{
'hashes':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'emma_watson_224.hash'),
'path': resolve_relative_path('../.assets/models/iperov/emma_watson_224.hash')
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-' + model_creator, model_name + '.hash'),
'path': resolve_relative_path('../.assets/models/' + model_creator + '/' + model_name + '.hash')
}
},
'sources':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'emma_watson_224.dfm'),
'path': resolve_relative_path('../.assets/models/iperov/emma_watson_224.dfm')
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-' + model_creator, model_name + '.dfm'),
'path': resolve_relative_path('../.assets/models/' + model_creator + '/' + model_name + '.dfm')
}
},
'template': 'dfl_whole_face',
'size': (224, 224),
},
'iperov/jackie_chan_224':
{
'hashes':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'jackie_chan_224.hash'),
'path': resolve_relative_path('../.assets/models/iperov/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/iperov/jackie_chan_224.dfm')
}
},
'template': 'dfl_whole_face',
'size': (224, 224),
},
'iperov/keanu_reeves_320':
{
'hashes':
{
'deep_swapper':
{
'url': resolve_download_url_by_provider('huggingface', 'deepfacelive-models-iperov', 'keanu_reeves_320.hash'),
'path': resolve_relative_path('../.assets/models/iperov/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/iperov/keanu_reeves_320.dfm')
}
},
'template': 'dfl_whole_face',
'size': (320, 320),
},
'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/iperov/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/iperov/sylvester_stallone_224.dfm')
}
},
'template': 'dfl_whole_face',
'size': (224, 224),
},
'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/iperov/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/iperov/taylor_swift_224.dfm')
}
},
'template': 'dfl_whole_face',
'size': (224, 224),
'template': model_template,
'size': model_size
}
}
return model_set
def get_inference_pool() -> InferencePool:
@ -154,7 +109,7 @@ def get_model_options() -> ModelOptions:
def register_args(program : ArgumentParser) -> None:
group_processors = find_argument_group(program, 'processors')
if group_processors:
group_processors.add_argument('--deep-swapper-model', help = wording.get('help.deep_swapper_model'), default = config.get_str_value('processors.deep_swapper_model', 'iperov/jackie_chan_224'), choices = processors_choices.deep_swapper_models)
group_processors.add_argument('--deep-swapper-model', help = wording.get('help.deep_swapper_model'), default = config.get_str_value('processors.deep_swapper_model', 'iperov/elon_musk_224'), choices = processors_choices.deep_swapper_models)
group_processors.add_argument('--deep-swapper-morph', help = wording.get('help.deep_swapper_morph'), type = int, default = config.get_int_value('processors.deep_swapper_morph', '80'), choices = processors_choices.deep_swapper_morph_range, metavar = create_int_metavar(processors_choices.deep_swapper_morph_range))
facefusion.jobs.job_store.register_step_keys([ 'deep_swapper_model', 'deep_swapper_morph' ])

View File

@ -5,7 +5,41 @@ from numpy._typing import NDArray
from facefusion.typing import AppContext, AudioFrame, Face, FaceSet, VisionFrame
AgeModifierModel = Literal['styleganex_age']
DeepSwapperModel = Literal['iperov/emma_watson_224', 'iperov/jackie_chan_224', 'iperov/keanu_reeves_320', 'iperov/sylvester_stallone_224', 'iperov/taylor_swift_224']
DeepSwapperModel = Literal\
[
'iperov/emma_watson_224',
'iperov/keanu_reeves_320',
'iperov/jackie_chan_224',
'iperov/alexandra_daddario_224',
'iperov/alexei_navalny_224',
'iperov/amber_heard_224',
'iperov/dilraba_dilmurat_224',
'iperov/elon_musk_224',
'iperov/emilia_clarke_224',
'iperov/emma_watson_224',
'iperov/erin_moriarty_224',
'iperov/jackie_chan_224',
'iperov/james_carrey_224',
'iperov/jason_statham_320',
'iperov/jessica_alba_224',
'iperov/keanu_reeves_320',
'iperov/lucy_liu_224',
'iperov/margot_robbie_224',
'iperov/meghan_markle_224',
'iperov/natalie_dormer_224',
'iperov/natalie_portman_224',
'iperov/nicolas_coppola__224',
'iperov/robert_downey_224',
'iperov/rowan_atkinson_224',
'iperov/ryan_reynolds_224',
'iperov/scarlett_johansson_224',
'iperov/sylvester_stallone_224',
'iperov/taylor_swift_224',
'iperov/thomas_cruise_224',
'iperov/thomas_holland_224',
'iperov/vin_diesel_224',
'iperov/vladimir_putin_224'
]
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']
FaceEditorModel = Literal['live_portrait']