Spaces:
Running
Running
File size: 2,931 Bytes
872c724 6a2e37d 9e9266f 872c724 6a2e37d 9e9266f 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 9e9266f 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 6a2e37d 872c724 9e9266f 6a2e37d 54fb304 |
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 |
import gradio as gr
from refacer import Refacer
import ngrok
import time
import threading
# Initialize Refacer
def initialize_refacer():
global refacer
print("Initializing Refacer...")
start_time = time.time()
refacer = Refacer(force_cpu=False, colab_performance=False)
print(f"Refacer initialized in {time.time() - start_time:.2f} seconds")
# Ngrok connection
def connect(token, port, options):
account = None
if token:
if ':' in token:
# token = authtoken:username:password
token, username, password = token.split(':', 2)
account = f"{username}:{password}"
if not options.get('authtoken_from_env'):
options['authtoken'] = token
if account:
options['basic_auth'] = account
try:
public_url = ngrok.connect(f"127.0.0.1:{port}", **options).url()
print(f'ngrok connected to localhost:{port}! URL: {public_url}')
except Exception as e:
print(f'ngrok connection aborted: {e}')
# Run reface
def run(*vars):
video_path = vars[0]
origins = vars[1:(num_faces + 1)]
destinations = vars[(num_faces + 1):(num_faces * 2) + 1]
thresholds = vars[(num_faces * 2) + 1:]
faces = []
for k in range(num_faces):
if origins[k] and destinations[k]:
faces.append({
'origin': origins[k],
'destination': destinations[k],
'threshold': thresholds[k]
})
return refacer.reface(video_path, faces)
# UI setup
origin = []
destination = []
thresholds = []
num_faces = 5
with gr.Blocks() as demo:
with gr.Row():
gr.Markdown("# Refacer")
with gr.Row():
video = gr.Video(label="Original video", format="mp4")
video2 = gr.Video(label="Refaced video", interactive=False, format="mp4")
for i in range(num_faces):
with gr.Tab(f"Face #{i + 1}"):
with gr.Row():
origin.append(gr.Image(label="Face to replace"))
destination.append(gr.Image(label="Destination face"))
with gr.Row():
thresholds.append(gr.Slider(label="Threshold", minimum=0.0, maximum=1.0, value=0.2))
with gr.Row():
button = gr.Button("Reface", variant="primary")
button.click(fn=run, inputs=[video] + origin + destination + thresholds, outputs=[video2])
# Start initialization in a separate thread to prevent blocking
init_thread = threading.Thread(target=initialize_refacer)
init_thread.start()
# Launch demo
demo = gr.Interface(fn=predict, inputs=gr.inputs.Textbox(label='CANDIDATE input'), \
outputs=[gr.outputs.Textbox(label='VACANCIES'),\
gr.Plot()],\
css='div {margin-left: auto; margin-right: auto; width: 100%;\
background-image: url("https://ibb.co/37wzh0r"); repeat 0 0;}')\
.launch(share=False).launch(show_error=True, share=True, server_name="0.0.0.0", server_port=7860) |