Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
import os | |
import subprocess | |
import tempfile | |
from glob import glob | |
def run_inference(image_input, audio_input, progress=gr.Progress(track_tqdm=True)): | |
# Create a temporary folder for downloaded and processed images | |
temp_dir = tempfile.mkdtemp() | |
try: | |
# Start the subprocess with Popen to capture logs | |
process = subprocess.Popen( | |
[ | |
"python", "inference.py", | |
"--config", "configs/inference.yaml", | |
"--input_image", image_input, | |
"--input_audio", audio_input, | |
"--output_dir", temp_dir, | |
], | |
stdout=subprocess.PIPE, # Capture standard output | |
stderr=subprocess.PIPE, # Capture standard error | |
text=True, # Decode output to text (instead of bytes) | |
) | |
# Stream logs from the subprocess in real-time | |
for line in process.stdout: | |
print(line, end="") # Print logs to the console (or handle them as needed) | |
# Wait for the subprocess to finish and check for errors | |
process.wait() | |
if process.returncode != 0: | |
error_message = process.stderr.read() | |
raise gr.Error(f"Inference failed with error: {error_message}") | |
# Collect the output video | |
output_video = glob(os.path.join(temp_dir, "*.mp4")) | |
return output_video[0] if output_video else "No video generated." | |
except Exception as e: | |
raise gr.Error(f"Error during inference: {str(e)}") | |
with gr.Blocks() as demo: | |
with gr.Column(): | |
gr.Markdown("# MEMO") | |
with gr.Row(): | |
with gr.Column(): | |
image_input = gr.Image(label="Image Input", type="filepath") | |
audio_input = gr.Audio(label="Audio Input", type="filepath") | |
submit_btn = gr.Button("Submit") | |
with gr.Column(): | |
output_result = gr.Video(label="Result") | |
submit_btn.click( | |
fn =run_inference, | |
inputs =[image_input, audio_input], | |
outputs = [output_result] | |
) | |
demo.queue().launch() | |