File size: 3,081 Bytes
53cc24b 0c56f63 263fa33 0c56f63 263fa33 0c56f63 263fa33 0c56f63 263fa33 53cc24b 263fa33 53cc24b 0c56f63 53cc24b 263fa33 0c56f63 53cc24b 0c56f63 53cc24b 263fa33 53cc24b 263fa33 53cc24b 0c56f63 53cc24b 263fa33 0c56f63 53cc24b 0c56f63 53cc24b 263fa33 53cc24b 0c56f63 263fa33 53cc24b 0c56f63 53cc24b 0c56f63 53cc24b 0c56f63 |
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 |
import gradio as gr
import subprocess
import os
# Não precisamos mais de nenhuma função de setup, clone ou pip install aqui!
# O Dockerfile já cuidou de tudo.
def run_inference_app(video_file, seed_num):
if video_file is None:
return None, "Por favor, envie um arquivo de vídeo."
# O app roda de dentro do diretório /app/SeedVR, então os caminhos são relativos
input_folder = "inputs"
os.makedirs(input_folder, exist_ok=True)
# O Gradio nos dá um caminho temporário, vamos movê-lo para um local conhecido
input_video_path = os.path.join(input_folder, os.path.basename(video_file.name))
os.rename(video_file.name, input_video_path)
output_folder = "outputs"
os.makedirs(output_folder, exist_ok=True)
# Comando de inferência. O ambiente conda já está "ativado" graças ao Dockerfile.
command = [
"torchrun", "--nproc-per-node=4",
"projects/inference_seedvr2_3b.py",
"--video_path", input_folder,
"--output_dir", output_folder,
"--seed", str(seed_num),
"--res_h", "320",
"--res_w", "512",
]
log_output = "Iniciando a inferência...\n" + ' '.join(command) + "\n\n"
try:
process = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
encoding='utf-8'
)
while True:
line = process.stdout.readline()
if not line:
break
log_output += line
print(line.strip())
yield None, log_output
process.wait()
if process.returncode != 0:
raise RuntimeError("O script de inferência falhou. Verifique os logs.")
result_files = [os.path.join(output_folder, f) for f in os.listdir(output_folder) if f.endswith('.mp4')]
if not result_files:
return None, log_output + "\n\nERRO: Nenhum vídeo foi gerado."
return result_files, log_output + "\n\nInferência concluída com sucesso!"
except Exception as e:
error_message = f"{log_output}\n\nOcorreu um erro: {str(e)}"
return None, error_message
with gr.Blocks() as demo:
gr.Markdown("# 🚀 Inferência SeedVR2 com Ambiente Conda")
gr.Markdown("Este ambiente foi construído com Conda usando um Dockerfile para máxima estabilidade.")
with gr.Row():
with gr.Column(scale=1):
video_input = gr.File(label="Vídeo de Entrada")
seed_input = gr.Number(label="Seed", value=123)
run_button = gr.Button("Gerar Vídeo", variant="primary")
with gr.Column(scale=2):
gallery_output = gr.Gallery(label="Vídeo de Saída", show_label=True)
log_display = gr.Textbox(label="Logs de Execução", lines=15, interactive=False, autoscroll=True)
run_button.click(
fn=run_inference_app,
inputs=[video_input, seed_input],
outputs=[gallery_output, log_display]
)
demo.launch() |