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