44step44 commited on
Commit
1005002
·
verified ·
1 Parent(s): 09c28a8

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -0
app.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import cv2
3
+ import insightface
4
+ from insightface.app import FaceAnalysis
5
+ import PIL.Image
6
+ import numpy as np
7
+ import os
8
+
9
+ # Подготовка модели (автоматическая загрузка)
10
+ app = FaceAnalysis(name='buffalore_l', providers=['CPUExecutionProvider'])
11
+ app.prepare(ctx_id=0, det_size=(640, 640))
12
+
13
+ # Ссылка на модель замены лица (скачается при первом запуске)
14
+ swapper = insightface.model_zoo.get_model('inswapper_128.onnx', download=True, check_hash=False)
15
+
16
+ def swap(source_img, target_img):
17
+ if source_img is None or target_img is None:
18
+ return None
19
+
20
+ # Анализ лиц
21
+ source_faces = app.get(np.array(source_img))
22
+ target_faces = app.get(np.array(target_img))
23
+
24
+ if not source_faces:
25
+ return target_img
26
+
27
+ source_face = source_faces[0]
28
+ result = np.array(target_img)
29
+
30
+ # Замена на всех лицах, найденных на целевом фото
31
+ for face in target_faces:
32
+ result = swapper.get(result, face, source_face, paste_back=True)
33
+
34
+ return PIL.Image.fromarray(result)
35
+
36
+ # Интерфейс приложения
37
+ with gr.Blocks() as demo:
38
+ gr.Markdown("# 🎭 Мой Face Swap")
39
+ with gr.Row():
40
+ with gr.Column():
41
+ source = gr.Image(type="pil", label="Чьё лицо берем (Source)")
42
+ target = gr.Image(type="pil", label="Куда вставляем (Target)")
43
+ btn = gr.Button("Заменить лицо!")
44
+ with gr.Column():
45
+ output = gr.Image(label="Результат")
46
+
47
+ btn.click(fn=swap, inputs=[source, target], outputs=output)
48
+
49
+ demo.launch()