File size: 3,007 Bytes
1f6a041
 
 
51a3166
1f6a041
 
 
 
 
 
 
 
 
860023c
3aff737
28ae202
51a3166
ba0e720
a39ec9f
3aff737
 
 
 
 
 
1f6a041
 
 
 
 
 
 
 
 
3aff737
42b1f81
1f6a041
42b1f81
 
 
 
 
 
 
 
 
324786c
42b1f81
 
 
decc5b1
28ae202
 
1f6a041
42b1f81
1f6a041
438e3e2
1f6a041
 
42b1f81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f6a041
 
 
 
438e3e2
 
 
 
 
 
 
1f6a041
8725ec6
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
# -* coding:UTF-8 -*
# !/usr/bin/env python
import numpy as np
import gradio as gr
import roop.globals
from roop.core import (
    start,
    decode_execution_providers,
)
from roop.processors.frame.core import get_frame_processors_modules
from roop.utilities import normalize_output_path
import os
from PIL import Image
import spaces
import uuid
import onnxruntime as ort

@spaces.GPU
def swap_face(source_file, target_file, doFaceEnhancer):
    session_id = str(uuid.uuid4())  # Tạo một UUID duy nhất cho mỗi phiên làm việc
    session_dir = f"temp/{session_id}"
    os.makedirs(session_dir, exist_ok=True)

    source_path = os.path.join(session_dir, "input.jpg")
    target_path = os.path.join(session_dir, "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)

    output_path = os.path.join(session_dir, "output.jpg")
    normalized_output_path = normalize_output_path(source_path, target_path, output_path)

    frame_processors = ["face_swapper", "face_enhancer"] if doFaceEnhancer else ["face_swapper"]
    headless = True
    keep_fps = True
    keep_audio = True
    keep_frames = False
    many_faces = False
    video_encoder = "libx264"
    video_quality = 18
    max_memory = "4G"
    execution_providers = ["CUDAExecutionProvider", "CPUExecutionProvider"]  # Ưu tiên GPU, sau đó là CPU
    execution_threads = 4
    reference_face_position = 0
    similar_face_distance = 0.6

    print("Available providers:", ort.get_available_providers())  # Kiểm tra các provider hiện có
    print("Configured execution providers:", execution_providers)

    for frame_processor in get_frame_processors_modules(frame_processors):
        if not frame_processor.pre_check():
            print(f"Pre-check failed for {frame_processor}")
            return

    roop.globals.source_path = source_path
    roop.globals.target_path = target_path
    roop.globals.output_path = normalized_output_path
    roop.globals.frame_processors = frame_processors
    roop.globals.headless = headless
    roop.globals.keep_fps = keep_fps
    roop.globals.keep_audio = keep_audio
    roop.globals.keep_frames = keep_frames
    roop.globals.many_faces = many_faces
    roop.globals.video_encoder = video_encoder
    roop.globals.video_quality = video_quality
    roop.globals.max_memory = max_memory
    roop.globals.execution_providers = execution_providers
    roop.globals.execution_threads = execution_threads
    roop.globals.reference_face_position = reference_face_position
    roop.globals.similar_face_distance = similar_face_distance

    start()
    return output_path

app = gr.Interface(
    fn=swap_face, 
    inputs=[
        gr.Image(), 
        gr.Image(), 
        gr.Checkbox(label="Face Enhancer?", info="Do face enhancement?")
    ], 
    outputs="image"
)
app.launch()