File size: 2,308 Bytes
ed99d08
205ca4b
 
 
 
 
 
 
 
 
 
ed99d08
205ca4b
d4baf14
 
ed99d08
d4baf14
ed99d08
 
d4baf14
ed99d08
 
 
 
d4baf14
ed99d08
 
 
 
 
 
d4baf14
 
 
ed99d08
 
 
 
d4baf14
00e82f0
 
d4baf14
 
 
00e82f0
 
ed99d08
00e82f0
d4baf14
ed99d08
 
 
 
 
 
d4baf14
ed99d08
 
 
 
d4baf14
 
 
ed99d08
00e82f0
205ca4b
ed99d08
 
 
 
 
 
 
 
 
 
 
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
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


def swap_face(source_file, target_file, doFaceEnhancer):

    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)

    print("source_path: ", source_path)
    print("target_path: ", 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()

    print(
        "start process",
        roop.globals.source_path,
        roop.globals.target_path,
        roop.globals.output_path,
    )

    for frame_processor in get_frame_processors_modules(
        roop.globals.frame_processors
    ):
        if not frame_processor.pre_check():
            return

    start()
    return output_path


app = gr.Blocks()

with app:
    gr.Interface(
        fn=swap_face,
        inputs=[gr.Image(), gr.Image(), gr.Checkbox(label="Apply Face Enhancer")],
        outputs="image",
        description="Swap faces between two images. Use the Face Enhancer option to improve the result. Processing may take longer if you use Face Enhancer because this model is running using the CPU."
    )

app.launch()