File size: 1,950 Bytes
1005002 8d85246 1005002 6272793 8d85246 1005002 6272793 8d85246 6272793 8d85246 6272793 8d85246 1005002 6272793 8d85246 602b442 6272793 8d85246 6272793 602b442 6272793 602b442 8d85246 6272793 8d85246 1005002 | 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 | import gradio as gr
import cv2
import insightface
from insightface.app import FaceAnalysis
import PIL.Image
import numpy as np
import os
import requests
# Функция для скачивания модели, если она не скачалась сама
def download_file(url, filename):
if not os.path.exists(filename):
response = requests.get(url)
with open(filename, "wb") as f:
f.write(response.content)
# Инициализация (с попыткой обхода ошибки загрузки)
try:
app = FaceAnalysis(name='buffalore_l', providers=['CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
except:
# Если база не качается, используем упрощенную инициализацию
app = FaceAnalysis(providers=['CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
# Ссылка на файл модели (альтернативный источник)
model_url = "https://huggingface.co/ezioruan/inswapper_128.onnx/resolve/main/inswapper_128.onnx"
model_path = "inswapper_128.onnx"
download_file(model_url, model_path)
swapper = insightface.model_zoo.get_model(model_path, download=False)
def swap(source_img, target_img):
if source_img is None or target_img is None:
return None
source_faces = app.get(np.array(source_img))
target_faces = app.get(np.array(target_img))
if not source_faces:
return target_img
result = np.array(target_img)
for face in target_faces:
result = swapper.get(result, face, source_faces[0], paste_back=True)
return PIL.Image.fromarray(result)
demo = gr.Interface(
fn=swap,
inputs=[gr.Image(type="pil", label="Лицо-донор"), gr.Image(type="pil", label="Целевое фото")],
outputs=gr.Image(label="Результат"),
title="🎭 Мой Face Swap"
)
demo.launch() |