Spaces:
Running
Running
File size: 5,215 Bytes
bd2f353 0fc70c3 11cf479 d627392 79ec25e d627392 8aca7f6 d627392 49487f1 8aca7f6 49487f1 c3dd560 c947273 6c6b506 c947273 b951d0b 6c6b506 b951d0b c947273 c3dd560 bd2f353 8aca7f6 bd2f353 d627392 bd2f353 2f4dbe2 bd2f353 b951d0b d627392 b951d0b 49487f1 b951d0b 49487f1 79ec25e 49487f1 bd2f353 d627392 bd2f353 8aca7f6 b24dca3 79ec25e 8a67596 6c6b506 8a67596 d627392 8aca7f6 cef6ce0 |
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import gradio as gr
import subprocess
import os
def generate(video, audio, checkpoint, no_smooth, resize_factor, pad_top, pad_bottom, pad_left, pad_right, save_as_video):
if video is None or audio is None or checkpoint is None:
return "Пожалуйста, загрузите видео/изображение и аудио файл, а также выберите чекпойнт."
# Отладка: проверка текущей директории и наличия inference.py
print(f"Текущая рабочая директория: {os.getcwd()}")
print(f"Содержимое текущей директории: {os.listdir('.')}")
print(f"Проверка наличия 'inference.py': {os.path.exists('inference.py')}")
# Используем пути к файлам напрямую
video_path = video # Строка с путем к видео
audio_path = audio # Строка с путем к аудио
# Логирование путей для отладки
print(f"Путь к видео: {video_path}")
print(f"Путь к аудио: {audio_path}")
# Создание директории 'outputs' для сохранения выходного видео
output_dir = "outputs"
os.makedirs(output_dir, exist_ok=True)
# Определение выходного файла
output_path = os.path.join(output_dir, "output.mp4")
print(f"Путь к выходному файлу: {output_path}")
# Подготовка аргументов для инференса
args = [
"--checkpoint_path", f"checkpoints/{checkpoint}.pth",
"--segmentation_path", "checkpoints/face_segmentation.pth",
"--no_seg",
"--no_sr",
"--face", video_path,
"--audio", audio_path,
"--outfile", output_path,
"--resize_factor", "2",
"--face_det_batch_size", "32",
"--wav2lip_batch_size", "256",
"--fps", "30",
"--pads", str(pad_top), str(pad_bottom), str(pad_left), str(pad_right)
]
if no_smooth:
args.append("--nosmooth")
if save_as_video:
args.append("--save_as_video")
try:
# Вызов команды инференса без изменения рабочей директории
cmd = ["python", "inference.py"] + args
print(f"Запуск инференса с командой: {' '.join(cmd)}")
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError as e:
print(f"Ошибка при выполнении команды: {e}")
return f"Произошла ошибка при обработке: {e}"
# Проверка наличия выходного файла
if not os.path.exists(output_path):
print("Выходной файл не существует.")
return "Не удалось создать выходное видео."
# Возвращаем путь к выходному файлу
print(f"Выходной файл создан по пути: {output_path}")
return output_path # Gradio автоматически обработает путь и выведет видео
# Корректная структура Gradio Blocks
with gr.Blocks() as ui:
gr.Markdown("## Wav2Lip - Синхронизация губ в видео")
with gr.Row():
video = gr.File(label="Видео или Изображение", type="filepath")
audio = gr.File(label="Аудио", type="filepath")
with gr.Column():
checkpoint = gr.Radio(["wav2lip", "wav2lip_gan"], label="Чекпойнт", value="wav2lip_gan", visible=False)
no_smooth = gr.Checkbox(label="Без сглаживания", value=False)
resize_factor = gr.Slider(minimum=1, maximum=4, step=1, label="Фактор изменения размера", value=2)
with gr.Row():
with gr.Column():
pad_top = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ сверху")
pad_bottom = gr.Slider(minimum=0, maximum=50, step=1, value=10, label="Отступ снизу")
pad_left = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ слева")
pad_right = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ справа")
save_as_video = gr.Checkbox(label="Сохранять как видео", value=True) # Новый элемент управления
generate_btn = gr.Button("Сгенерировать")
with gr.Column():
result = gr.Video(label="Результат")
# Вызов метода .click() внутри контекста gr.Blocks()
generate_btn.click(
generate,
inputs=[video, audio, checkpoint, no_smooth, resize_factor, pad_top, pad_bottom, pad_left, pad_right, save_as_video],
outputs=result,
concurrency_limit=10 # Устанавливаем лимит на количество одновременно выполняемых операций
)
# Запуск приложения
ui.launch(debug=True)
|