File size: 1,810 Bytes
3266b60
fa3cda5
2520dea
 
0ffaf55
 
fa3cda5
2520dea
 
 
 
fa3cda5
 
 
2520dea
570f004
2520dea
0ffaf55
 
 
 
22a4581
0ffaf55
 
 
22a4581
fa3cda5
0ffaf55
 
fa3cda5
570f004
 
fa3cda5
22a4581
0ffaf55
 
 
 
22a4581
fa3cda5
 
2520dea
fa3cda5
0ffaf55
fa3cda5
 
 
22a4581
 
fa3cda5
 
22a4581
fa3cda5
3266b60
 
fa3cda5
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
import gradio as gr
from gradio_client import Client, handle_file
import os
import random
from io import BytesIO
from PIL import Image

KEYS = os.getenv("KEYS").split(",")

def get_random_api_key():
    return random.choice(KEYS)

def swap_face_api(source_img, target_img, doFaceEnhancer):
    try:
        api_key = get_random_api_key()
        client = Client("tuan2308/face-swap")

        # Конвертируем PIL изображения в байты
        source_bytes = BytesIO()
        source_img.save(source_bytes, format="JPEG")  # или PNG, в зависимости от формата
        source_bytes.seek(0)

        target_bytes = BytesIO()
        target_img.save(target_bytes, format="JPEG") # или PNG, в зависимости от формата
        target_bytes.seek(0)

        result = client.predict(
            source_file=handle_file(source_bytes.read(), filename="source.jpg"), #  Добавляем имя файла
            target_file=handle_file(target_bytes.read(), filename="target.jpg"), #  Добавляем имя файла
            doFaceEnhancer=doFaceEnhancer,
            api_name="/predict",
            api_key=api_key
        )

        # Конвертируем результат из байтов обратно в PIL Image
        output_image = Image.open(BytesIO(result))

        return output_image

    except Exception as e:
        print(f"Ошибка при вызове API: {e}")
        return None


iface = gr.Interface(
    fn=swap_face_api,
    inputs=[
        gr.Image(type="pil", label="Source Image"),
        gr.Image(type="pil", label="Target Image"),
        gr.Checkbox(label="Face Enhancer?")
    ],
    outputs=gr.Image(type="pil", label="Output Image"),
    title="Face Swap via API"
)

iface.launch()