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) # Запускаем на всех интерфейсах
|