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()