Uniaff commited on
Commit
d627392
·
verified ·
1 Parent(s): fe68bd3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +75 -37
app.py CHANGED
@@ -1,49 +1,87 @@
1
  import gradio as gr
 
 
2
  import subprocess
3
- from subprocess import call
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  with gr.Blocks() as ui:
 
6
  with gr.Row():
7
- video = gr.File(label="Video or Image")
8
- audio = gr.File(label="Audio")
9
  with gr.Column():
10
- checkpoint = gr.Radio(["wav2lip", "wav2lip_gan"], label="Checkpoint")
11
- no_smooth = gr.Checkbox(label="No Smooth")
12
- resize_factor = gr.Slider(minimum=1, maximum=4, step=1, label="Resize Factor")
13
  with gr.Row():
14
  with gr.Column():
15
- pad_top = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Pad Top")
16
- pad_bottom = gr.Slider(minimum=0, maximum=50, step=1, value=10, label="Pad Bottom (Often increasing this to 20 allows chin to be included)")
17
- pad_left = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Pad Left")
18
- pad_right = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Pad Right")
19
- generate_btn = gr.Button("Generate")
20
  with gr.Column():
21
- result = gr.Video()
22
-
23
- def generate(video, audio, checkpoint, no_smooth, resize_factor, pad_top, pad_bottom, pad_left, pad_right):
24
- if video is None or audio is None or checkpoint is None:
25
- return
26
-
27
- smooth = "--nosmooth" if no_smooth else ""
28
-
29
-
30
- cmd = [
31
- "python",
32
- "inference.py",
33
- "--checkpoint_path", f"checkpoints/{checkpoint}.pth",
34
- "--segmentation_path", "checkpoints/face_segmentation.pth",
35
- "--enhance_face", "gfpgan",
36
- "--face", video.name,
37
- "--audio", audio.name,
38
- "--outfile", "results/output.mp4",
39
- ]
40
-
41
- call(cmd)
42
- return "results/output.mp4"
43
 
44
  generate_btn.click(
45
  generate,
46
- [video, audio, checkpoint, pad_top, pad_bottom, pad_left, pad_right, resize_factor],
47
- result)
48
-
49
- ui.queue().launch(debug=True)
 
 
1
  import gradio as gr
2
+ import torch
3
+ import os
4
  import subprocess
5
+ import tempfile
6
+ from inference import main as inference_main # Предполагается, что вы интегрируете функцию main из inference.py
7
+ import shutil
8
+
9
+ def generate(video, audio, checkpoint, no_smooth, resize_factor, pad_top, pad_bottom, pad_left, pad_right):
10
+ if video is None or audio is None or checkpoint is None:
11
+ return "Пожалуйста, загрузите видео/изображение и аудио файл, а также выберите чекпойнт."
12
+
13
+ # Создание временной директории для обработки
14
+ with tempfile.TemporaryDirectory() as temp_dir:
15
+ # Копирование загруженных файлов во временную директорию
16
+ video_path = os.path.join(temp_dir, video.name)
17
+ audio_path = os.path.join(temp_dir, audio.name)
18
+ with open(video_path, "wb") as f:
19
+ f.write(video.read())
20
+ with open(audio_path, "wb") as f:
21
+ f.write(audio.read())
22
+
23
+ # Определение выходного файла
24
+ output_path = os.path.join(temp_dir, "output.mp4")
25
+
26
+ # Подготовка аргументов для inference.py
27
+ args = [
28
+ "--checkpoint_path", f"checkpoints/{checkpoint}.pth",
29
+ "--segmentation_path", "checkpoints/face_segmentation.pth",
30
+ "--enhance_face", "gfpgan",
31
+ "--face", video_path,
32
+ "--audio", audio_path,
33
+ "--outfile", output_path,
34
+ "--resize_factor", str(resize_factor),
35
+ "--pads", str(pad_top), str(pad_bottom), str(pad_left), str(pad_right)
36
+ ]
37
+
38
+ if no_smooth:
39
+ args.append("--nosmooth")
40
+
41
+ try:
42
+ # Вызов функции инференса напрямую
43
+ # Если вы интегрируете код из inference.py, вызовите функцию непосредственно
44
+ # Например:
45
+ # inference_main(args)
46
+ # Но для простоты, здесь мы будем использовать subprocess
47
+ cmd = ["python", "inference.py"] + args
48
+ subprocess.run(cmd, check=True)
49
+ except subprocess.CalledProcessError as e:
50
+ return f"Произошла ошибка при обработке: {e}"
51
+
52
+ # Проверка наличия выходного файла
53
+ if not os.path.exists(output_path):
54
+ return "Не удалось создать выходное видео."
55
+
56
+ # Чтение выходного файла
57
+ with open(output_path, "rb") as f:
58
+ output_video = f.read()
59
+
60
+ return output_video
61
 
62
  with gr.Blocks() as ui:
63
+ gr.Markdown("## Wav2Lip - Синхронизация губ в видео")
64
  with gr.Row():
65
+ video = gr.File(label="Видео или Изображение", type="file")
66
+ audio = gr.File(label="Аудио", type="file")
67
  with gr.Column():
68
+ checkpoint = gr.Radio(["wav2lip", "wav2lip_gan"], label="Чекпойнт", value="wav2lip_gan")
69
+ no_smooth = gr.Checkbox(label="Без сглаживания", value=False)
70
+ resize_factor = gr.Slider(minimum=1, maximum=4, step=1, label="Фактор изменения размера", value=1)
71
  with gr.Row():
72
  with gr.Column():
73
+ pad_top = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ сверху")
74
+ pad_bottom = gr.Slider(minimum=0, maximum=50, step=1, value=10, label="Отступ снизу (рекомендуется 20 для включения подбородка)")
75
+ pad_left = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ слева")
76
+ pad_right = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ справа")
77
+ generate_btn = gr.Button("Сгенерировать")
78
  with gr.Column():
79
+ result = gr.Video(label="Результат")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
 
81
  generate_btn.click(
82
  generate,
83
+ inputs=[video, audio, checkpoint, no_smooth, resize_factor, pad_top, pad_bottom, pad_left, pad_right],
84
+ outputs=result
85
+ )
86
+
87
+ ui.queue(concurrency_count=1).launch(debug=True)