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

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 изображения в байты, затем в base64
        source_bytes = BytesIO()
        source_img.save(source_bytes, format="JPEG")
        source_b64 = base64.b64encode(source_bytes.getvalue()).decode("utf-8")

        target_bytes = BytesIO()
        target_img.save(target_bytes, format="JPEG")
        target_b64 = base64.b64encode(target_bytes.getvalue()).decode("utf-8")


        result = client.predict(
            source_file=source_b64,  # Передаем base64 строку
            target_file=target_b64,  # Передаем base64 строку
            doFaceEnhancer=doFaceEnhancer,
            api_name="/predict",
            api_key=api_key # Передаем api_key в predict
        )

        # Конвертируем результат из байтов в 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()