Roop / app.py
heatingma's picture
Update app.py
1110322 verified
import os
import time
import shutil
import gradio as gr
ROOP_DEFAULT_PATH = "media/roop_default.png"
ROOP_OUTPUT_VIDEO_PATH = "media/roop_output.mp4"
def _handle_roop_solve(
video_path: str,
img_path: str
):
if video_path is None:
raise gr.Error("Please upload source video!")
if img_path is None:
raise gr.Error("Please upload target image!")
if not os.path.exists("media"):
os.mkdir("media")
start_time = time.time()
command = f"python run.py -t {video_path} -s {img_path} -o {ROOP_OUTPUT_VIDEO_PATH}"
os.system(command)
solved_time = time.time() - start_time
message = "Successfully solve the GED problem, using time ({:.3f}s).".format(solved_time)
return message, ROOP_OUTPUT_VIDEO_PATH
def handle_roop(
video_path: str,
img_path: str
):
try:
message = _handle_roop_solve(
video_path=video_path,
img_path=img_path
)
return message
except Exception as e:
message = str(e)
return message, ROOP_OUTPUT_VIDEO_PATH
def handle_roop_clear():
shutil.copy(
src=ROOP_DEFAULT_PATH,
dst=ROOP_OUTPUT_VIDEO_PATH
)
message = "successfully clear the files!"
return message, ROOP_OUTPUT_VIDEO_PATH
with gr.Blocks() as ged_page:
gr.Markdown(
'''
This space displays how to perform face swapping.
## How to use this Space?
- Upload a video, preferably with a duration of less than 5 seconds.
- Upload a photo of the person you wish to swap with.
- You will receive the result of the face swap after 5-10 minutes.
- Click the 'clear' button to clear all the files.
## Examples
- You can get the test examples from our [Roop Dataset Repo.](https://huggingface.co/datasets/SJTU-TES/Roop)
'''
)
with gr.Row(variant="panel"):
with gr.Column(scale=2):
with gr.Row():
upload_video = gr.Video(
label="Upload .mp4 Vide0",
format="mp4",
)
upload_img = gr.Image(
label="Upload .png or .jpg File",
type="filepath",
min_width=40,
)
info = gr.Textbox(
value="",
label="Log",
scale=4,
)
with gr.Row():
with gr.Column(scale=1, min_width=100):
solve_button = gr.Button(
value="Solve",
variant="primary",
scale=1
)
with gr.Column(scale=1, min_width=100):
clear_button = gr.Button(
"Clear",
variant="secondary",
scale=1
)
with gr.Column(scale=8):
pass
with gr.Column(scale=2):
output_video = gr.Video(height=405, width=720)
solve_button.click(
handle_roop,
[upload_video, upload_img],
outputs=[info, output_video]
)
clear_button.click(
handle_roop_clear,
inputs=None,
outputs=[info, output_video]
)
if __name__ == "__main__":
ged_page.launch(debug = True)