FaceSwap / app.py
Rooni's picture
Update app.py
45f4da3 verified
raw
history blame
2.15 kB
import gradio as gr
import os
import random
from PIL import Image
from io import BytesIO
import base64
import requests
import numpy as np
# ... (остальной код без изменений)
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/"
# Преобразовазуем numpy массивы в PIL изображения, затем в байты и base64
source_pil = Image.fromarray(source_img)
source_bytes = BytesIO()
source_pil.save(source_bytes, format="JPEG")
source_b64 = base64.b64encode(source_bytes.getvalue()).decode("utf-8")
target_pil = Image.fromarray(target_img)
target_bytes = BytesIO()
target_pil.save(target_bytes, format="JPEG")
target_b64 = base64.b64encode(target_bytes.getvalue()).decode("utf-8")
payload = {
"data": [
source_b64,
target_b64,
doFaceEnhancer
],
"api_key": api_key
}
response = requests.post(api_url, json=payload)
response.raise_for_status()
print(response)
result = response.json()
result_data = result["data"][0] # Проверьте индекс
result_decoded = base64.b64decode(result_data)
output_image = Image.open(BytesIO(result_decoded))
return output_image
except requests.exceptions.RequestException as e:
print(f"Ошибка API: {e}")
return None
except Exception as e:
print(f"Ошибка: {e}")
return None
iface = gr.Interface(
fn=swap_face_api,
inputs=[
gr.Image(type="numpy", label="Source Image"), # Изменено на numpy
gr.Image(type="numpy", label="Target Image"), # Изменено на numpy
gr.Checkbox(label="Face Enhancer?")
],
outputs=gr.Image(type="pil", label="Output Image"), # Остается pil
title="Face Swap via API"
)
iface.launch(server_name="0.0.0.0", server_port=7860)