Spaces:
Running
Running
File size: 4,034 Bytes
f1c2d0d a49d20b f1c2d0d 263cf40 9155ce6 263cf40 9155ce6 263cf40 e8a5179 c881ebc 263cf40 e8a5179 9155ce6 5130416 9155ce6 e8a5179 9155ce6 e8a5179 a49d20b 263cf40 e8a5179 263cf40 e8a5179 263cf40 e8a5179 263cf40 e8a5179 263cf40 61428fa 9155ce6 |
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
import requests
from io import BytesIO
def load_image_from_url(url):
try:
response = requests.get(url)
img = Image.open(BytesIO(response.content))
return np.array(img)
except:
return None
def swap_face(source_input, target_input, source_url, target_url, doFaceEnhancer):
# Handle source image
source_file = None
if source_input is not None:
source_file = source_input
elif source_url:
source_file = load_image_from_url(source_url)
# Handle target image
target_file = None
if target_input is not None:
target_file = target_input
elif target_url:
target_file = load_image_from_url(target_url)
if source_file is None or target_file is None:
return None
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)
roop.globals.source_path = source_path
roop.globals.target_path = target_path
output_path = "output.jpg"
roop.globals.output_path = normalize_output_path(
roop.globals.source_path, roop.globals.target_path, output_path
)
if doFaceEnhancer:
roop.globals.frame_processors = ["face_swapper", "face_enhancer"]
else:
roop.globals.frame_processors = ["face_swapper"]
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()
roop.globals.execution_providers = decode_execution_providers(["cuda"])
roop.globals.execution_threads = suggest_execution_threads()
for frame_processor in get_frame_processors_modules(roop.globals.frame_processors):
if not frame_processor.pre_check():
return None
start()
return output_path
html_section_1 = "<div><h1>Welcome Face Swap</h1></div>"
html_section_2 = '<div><p>Upload your source and target images to swap faces. Optionally, use the face enhancer feature for better results.</p><h2><br /><strong>For bulk swap visit:</strong> <a href="https://picfy.xyz/swap" target="_blank" rel="noopener">https://picfy.xyz/swap</a><br /> <strong>Support me USDT (TRC-20): TAe7hsSVWtMEYz3G5V1UiUdYPQVqm28bKx</h2></div><br>Start Face Swap SaaS on WordPress:</strong> <a href="https://www.codester.com/aheed/" target="_blank" rel="noopener">https://www.codester.com/aheed/</a>'
app = gr.Blocks()
with app:
gr.HTML(html_section_1)
gr.HTML(html_section_2)
with gr.Tabs():
with gr.Tab("Upload Images"):
gr.Interface(
fn=lambda s, t, d: swap_face(s, t, None, None, d),
inputs=[
gr.Image(label="Source Image"),
gr.Image(label="Target Image"),
gr.Checkbox(label="face_enhancer?", info="do face enhancer?")
],
outputs="image"
)
with gr.Tab("Image URLs"):
gr.Interface(
fn=lambda s, t, d: swap_face(None, None, s, t, d),
inputs=[
gr.Textbox(label="Source Image URL"),
gr.Textbox(label="Target Image URL"),
gr.Checkbox(label="face_enhancer?", info="do face enhancer?")
],
outputs="image"
)
# Add a global queue with a concurrency limit of 10
app.queue(default_concurrency_limit=10)
# Launch the app
app.launch()
|