Spaces:
Running
Running
File size: 3,610 Bytes
205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b e3f4dc3 205ca4b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import numpy as np
import gradio as gr
import roop.globals
from roop.core import (
start,
decode_execution_providers,
suggest_max_memory,
suggest_execution_threads,
)
from roop.processors.frame.core import get_frame_processors_modules
from roop.utilities import normalize_output_path
import os
from PIL import Image
from datetime import datetime
def swap_face(source_file, target_file, doFaceEnhancer, use_gpu):
try:
# Save input images temporarily
source_path = "input.jpg"
target_path = "target.jpg"
source_image = Image.fromarray(source_file)
source_image.save(source_path)
target_image = Image.fromarray(target_file)
target_image.save(target_path)
# Set global variables for Roop
roop.globals.source_path = source_path
roop.globals.target_path = target_path
# Create a dynamic output path
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
output_path = f"output_{timestamp}.jpg"
roop.globals.output_path = normalize_output_path(
roop.globals.source_path, roop.globals.target_path, output_path
)
# Configure frame processors
if doFaceEnhancer:
roop.globals.frame_processors = ["face_swapper", "face_enhancer"]
else:
roop.globals.frame_processors = ["face_swapper"]
# Global settings
roop.globals.headless = True
roop.globals.keep_fps = True
roop.globals.keep_audio = True
roop.globals.keep_frames = False
roop.globals.many_faces = False
roop.globals.video_encoder = "libx264"
roop.globals.video_quality = 18
roop.globals.max_memory = suggest_max_memory()
# Execution providers
if use_gpu:
roop.globals.execution_providers = decode_execution_providers(["cuda"])
else:
roop.globals.execution_providers = decode_execution_providers(["cpu"])
roop.globals.execution_threads = suggest_execution_threads()
print(
"Starting process with the following parameters:",
f"Source: {roop.globals.source_path}",
f"Target: {roop.globals.target_path}",
f"Output: {roop.globals.output_path}",
f"Enhancer: {doFaceEnhancer}",
f"Using GPU: {use_gpu}",
sep="\n"
)
# Pre-check and start process
for frame_processor in get_frame_processors_modules(roop.globals.frame_processors):
if not frame_processor.pre_check():
return "Pre-check failed for frame processors."
start()
return output_path
except Exception as e:
return f"An error occurred: {e}"
# HTML content for UI information
html_section_1 = "<div><p>This model is running on the selected hardware (CPU/GPU). Processing might take some time.</p></div>"
# Create the Gradio interface
app = gr.Blocks()
with app:
gr.HTML(html_section_1)
gr.Markdown("## Face Swap Application")
gr.Markdown("Upload a source and target image to swap faces. Optionally, enhance the swapped face.")
# Inputs and Interface
inputs = [
gr.Image(label="Source Image"),
gr.Image(label="Target Image"),
gr.Checkbox(label="Enhance", info="Use Face Enhancer"),
gr.Checkbox(label="Use GPU (if available)", value=True)
]
outputs = gr.Image(label="Swapped Image")
# Interface function call
gr.Interface(
fn=swap_face,
inputs=inputs,
outputs=outputs
).launch()
app.launch()
|