Spaces:
Running
Running
import argparse | |
import gradio as gr | |
from dofaker import FaceSwapper, PoseSwapper | |
def parse_args(): | |
parser = argparse.ArgumentParser(description='⏳running face swap') | |
parser.add_argument( | |
'--inbrowser', | |
help= | |
'whether to automatically launch the interface in a new tab on the default browser.', | |
dest='inbrowser', | |
default=True) | |
parser.add_argument( | |
'--server_port', | |
help= | |
'will start gradio app on this port (if available). Can be set by environment variable GRADIO_SERVER_PORT. If None, will search for an available port starting at 7860.', | |
dest='server_port', | |
type=int, | |
default=None) | |
return parser.parse_args() | |
def swap_face(input_path, dst_path, src_path, use_enhancer, use_sr, scale, | |
face_sim_thre): | |
faker = FaceSwapper(use_enhancer=use_enhancer, | |
use_sr=use_sr, | |
scale=scale, | |
face_sim_thre=face_sim_thre) | |
output_path = faker.run(input_path, dst_path, src_path) | |
return output_path | |
def swap_pose(input_path, target_path, use_enhancer, use_sr, scale): | |
faker = PoseSwapper(use_enhancer=use_enhancer, use_sr=use_sr, scale=scale) | |
output_path = faker.run(input_path, target_path) | |
return output_path | |
def main(): | |
args = parse_args() | |
with gr.Blocks(theme='ysharma/huggingface@=0.0.4') as web_ui: | |
gr.Markdown('# 👑 FaceClone') | |
gr.Markdown('### Deepfake Swap Face and Pose.') | |
with gr.Tab('🧩 FaceSwapper'): | |
gr.Markdown(' 🧸 FaceClone:power by Gradio') | |
with gr.Tab('📥 Face'): | |
with gr.Row(): | |
with gr.Column(): | |
gr.Markdown('🖇️ Source Face to be swapped') | |
image_input = gr.Image(type='filepath') | |
with gr.Row(): | |
with gr.Column(): | |
gr.Markdown( | |
'🎭 Target source included with Face') | |
dst_face_image = gr.Image(type='filepath') | |
with gr.Column(): | |
gr.Markdown( | |
'🧑🦳 Source Face to Replace Target Face') | |
src_face_image = gr.Image(type='filepath') | |
with gr.Column(): | |
output_image = gr.Image(type='filepath') | |
use_enhancer = gr.Checkbox( | |
label="👑 Face Enhance", | |
info="🧿Whether use face enhance model.") | |
with gr.Row(): | |
use_sr = gr.Checkbox( | |
label="🛠️ Super resolution", | |
info="⚒️ Whether use image resolution model.") | |
scale = gr.Number( | |
value=1, label='📐image super resolution scale') | |
with gr.Row(): | |
face_sim_thre = gr.Number( | |
value=0.6, | |
label='🧲 face similarity threshold', | |
minimum=0.0, | |
maximum=1.0) | |
convert_button = gr.Button('🔍Swap') | |
convert_button.click(fn=swap_face, | |
inputs=[ | |
image_input, dst_face_image, | |
src_face_image, use_enhancer, | |
use_sr, scale, face_sim_thre | |
], | |
outputs=[output_image], | |
api_name='🔎Image swap') | |
with gr.Tab('🖥️ Video'): | |
with gr.Row(): | |
with gr.Column(): | |
gr.Markdown('📺 Target Video') | |
video_input = gr.Video() | |
with gr.Row(): | |
with gr.Column(): | |
gr.Markdown( | |
'👳 Target Face') | |
dst_face_image = gr.Image(type='filepath') | |
with gr.Column(): | |
gr.Markdown( | |
'🫅 Source Face') | |
src_face_image = gr.Image(type='filepath') | |
with gr.Column(): | |
output_video = gr.Video() | |
use_enhancer = gr.Checkbox( | |
label="📸 Face Enhance", | |
info="📷 Whether use face enhance model.") | |
with gr.Row(): | |
use_sr = gr.Checkbox( | |
label="🔋 Super Resolution", | |
info="🔦Whether use image resolution model.") | |
scale = gr.Number( | |
value=1, label='🗞️ Super Resolution Image') | |
with gr.Row(): | |
face_sim_thre = gr.Number( | |
value=0.6, | |
label='💌face similarity threshold', | |
minimum=0.0, | |
maximum=1.0) | |
convert_button = gr.Button('🎯 Swap') | |
convert_button.click(fn=swap_face, | |
inputs=[ | |
video_input, dst_face_image, | |
src_face_image, use_enhancer, | |
use_sr, scale, face_sim_thre | |
], | |
outputs=[output_video], | |
api_name='💽 Video Swap 💽') | |
with gr.Tab('🪩 PoseSwapper'): | |
gr.Markdown(' 🧸FaceClone:Deepfake power by Gradio') | |
with gr.Tab('📷 Image'): | |
with gr.Row(): | |
with gr.Column(): | |
gr.Markdown('🧑🦳The source image to be swapped') | |
image_input = gr.Image(type='filepath') | |
gr.Markdown('🗳️ The target image with pose') | |
target = gr.Image(type='filepath') | |
with gr.Column(): | |
output_image = gr.Image(type='filepath') | |
use_enhancer = gr.Checkbox( | |
label="👑 Face Enhance", | |
info="🧾Whether use face enhance model.") | |
with gr.Row(): | |
use_sr = gr.Checkbox( | |
label="🛠️ Super Resolution", | |
info="⌛Whether use image resolution model.") | |
scale = gr.Number( | |
value=1, label='📸 Super resolution scale') | |
convert_button = gr.Button('🎯 Swap') | |
convert_button.click(fn=swap_pose, | |
inputs=[ | |
image_input, target, | |
use_enhancer, use_sr, scale | |
], | |
outputs=[output_image], | |
api_name='🎭 Image slSwap 🎭') | |
# with gr.Tab('Video'): | |
# with gr.Row(): | |
# with gr.Column(): | |
# gr.Markdown('The source video to be swapped') | |
# video_input = gr.Image(type='filepath') | |
# gr.Markdown('The target image with pose') | |
# target = gr.Video() | |
# with gr.Column(): | |
# output_video = gr.Video() | |
# use_enhancer = gr.Checkbox( | |
# label="face enhance", | |
# info="Whether use face enhance model.") | |
# with gr.Row(): | |
# use_sr = gr.Checkbox( | |
# label="super resolution", | |
# info="Whether use image resolution model.") | |
# scale = gr.Number(value=1, | |
# label='image super resolution scale') | |
# convert_button = gr.Button('Swap') | |
# convert_button.click(fn=swap_pose, | |
# inputs=[ | |
# video_input, target, use_enhancer, | |
# use_sr, scale | |
# ], | |
# outputs=[output_video], | |
# api_name='video swap') | |
web_ui.launch(inbrowser=args.inbrowser, server_port=args.server_port) | |
if __name__ == '__main__': | |
main() | |