gradio_app / Empty Document
mikx1's picture
Upload folder using huggingface_hub
b5ea024
import gradio as gr
import insightface
import onnxruntime
from insightface.app import FaceAnalysis
def face_swap(user_image, celebrity_image):
# Загрузка моделей
detector = insightface.model_zoo.get_model('retinaface_r50_v1')
arcface = insightface.model_zoo.get_model('arcface_r100_v1')
# Определение пути к модели замены лица
onnx_model_path = 'face_swap_model.onnx'
# Обнаружение лиц
user_bbox, user_landmarks = detector.detect(user_image)
celebrity_bbox, celebrity_landmarks = detector.detect(celebrity_image)
# Выравнивание лиц
user_aligned = FaceAnalysis.align(user_image, user_landmarks)
celebrity_aligned = FaceAnalysis.align(celebrity_image, celebrity_landmarks)
# Получение векторных представлений лиц
user_embedding = arcface.get_embedding(user_aligned)
celebrity_embedding = arcface.get_embedding(celebrity_aligned)
# Загрузка модели ONNX
session = onnxruntime.InferenceSession(onnx_model_path)
# Подготовка входных данных
input_name = session.get_inputs()[0].name
user_data = user_aligned.transpose(2, 0, 1)
celebrity_data = celebrity_aligned.transpose(2, 0, 1)
input_feed = {input_name: np.concatenate([user_data, celebrity_data], axis=0)}
# Замена лица
results = session.run(None, input_feed)
swapped_face = results[0].transpose(1, 2, 0)
return swapped_face
iface = gr.Interface(fn=face_swap, inputs=["image", "image"], outputs="image")
iface.launch()