File size: 2,690 Bytes
3266b60
2520dea
 
0ffaf55
1865d84
df949d3
c1942c1
fa3cda5
4cbb89e
 
 
 
 
 
 
 
fa3cda5
 
 
2520dea
1865d84
 
4cbb89e
45f4da3
4cbb89e
 
2520dea
45f4da3
4cbb89e
 
22a4581
4cbb89e
c1942c1
4cbb89e
 
 
c1942c1
 
4cbb89e
 
 
 
 
 
 
 
1865d84
c1942c1
4cbb89e
c1942c1
4cbb89e
 
1865d84
4cbb89e
 
0ffaf55
22a4581
c1942c1
 
2520dea
3412fa4
c1942c1
3412fa4
 
4cbb89e
fa3cda5
 
 
4cbb89e
 
fa3cda5
 
4cbb89e
fa3cda5
3266b60
 
4cbb89e
1865d84
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
import gradio as gr
import os
import random
from PIL import Image
from io import BytesIO
import base64
import requests

# Получаем ключи API из секретной переменной
KEYS = os.getenv("KEYS", "").split(",")

# Создаем функцию для получения случайного ключа API
def get_random_api_key():
    if not KEYS:
        raise ValueError("KEYS environment variable is not set or empty.")
    return random.choice(KEYS)

def swap_face_api(source_img, target_img, doFaceEnhancer):
    try:
        api_key = get_random_api_key()
        api_url = "https://tuan2308-face-swap-predict.hf.space/api/predict/"

        # Преобразуем изображения в base64
        source_bytes = BytesIO()
        source_img.save(source_bytes, format="JPEG")
        source_b64 = source_bytes.getvalue()

        target_bytes = BytesIO()
        target_img.save(target_bytes, format="JPEG")
        target_b64 = target_bytes.getvalue()

        # Создаем полезные данные для POST-запроса
        payload = {
            "source_file": ("source.jpg", source_b64, "image/jpeg"),
            "target_file": ("target.jpg", target_b64, "image/jpeg"),
            "doFaceEnhancer": doFaceEnhancer
        }

        # Создаем заголовки с API ключом
        headers = {
            "Content-Type": "multipart/form-data",
            "Authorization": f"Bearer {api_key}"
        }

        # Отправляем POST-запрос
        response = requests.post(api_url, files=payload)
        response.raise_for_status()

        # Получаем результат
        result = response.json()
        result_data = result["data"][0]  # Убедитесь, что индекс корректный
        result_b64 = base64.b64decode(result_data)

        # Преобразуем результат в изображение PIL
        output_image = Image.open(BytesIO(result_b64))
        return output_image

    except requests.exceptions.RequestException as e:
        print(f"Ошибка API: {e}")
        return None
    except Exception as e:
        print(f"Ошибка: {e}")
        return None

# Создаем интерфейс Gradio
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(server_name="0.0.0.0", server_port=7860)  # Запускаем на всех интерфейсах