nagasurendra's picture
Update app.py
65964c5 verified
import gradio as gr
import os
import shutil
from utils.video_processor import compare_videos
def compare_videos_interface(video1, video2):
if video1 is None or video2 is None:
return "Please upload both videos.", None, None
# Validate file extensions
valid_extensions = [".mp4", ".avi", ".mov"]
if not any(video1.lower().endswith(ext) for ext in valid_extensions) or \
not any(video2.lower().endswith(ext) for ext in valid_extensions):
return "Invalid video format. Please upload MP4, AVI, or MOV files.", None, None
# Save uploaded videos temporarily
os.makedirs("temp", exist_ok=True)
video1_path = os.path.join("temp", os.path.basename(video1))
video2_path = os.path.join("temp", os.path.basename(video2))
# Copy uploaded files to temp directory
shutil.copy(video1, video1_path)
shutil.copy(video2, video2_path)
try:
# Compare videos
plot_path, diff_video_path = compare_videos(video1_path, video2_path)
# Return results
return (
"Comparison complete!",
plot_path,
diff_video_path
)
except Exception as e:
return f"Error during comparison: {str(e)}", None, None
finally:
# Clean up temporary files
if os.path.exists(video1_path):
os.remove(video1_path)
if os.path.exists(video2_path):
os.remove(video2_path)
# Define Gradio interface
with gr.Blocks(title="Video Comparison App") as demo:
gr.Markdown("# Video Comparison App")
gr.Markdown("Upload two videos of the same duration (MP4, AVI, MOV) to compare frame-by-frame differences.")
with gr.Row():
video1_input = gr.File(label="Upload First Video", file_types=[".mp4", ".avi", ".mov"])
video2_input = gr.File(label="Upload Second Video", file_types=[".mp4", ".avi", ".mov"])
submit_button = gr.Button("Compare Videos")
output_text = gr.Textbox(label="Status")
output_plot = gr.Image(label="Difference Plot")
output_video = gr.Video(label="Difference Video")
submit_button.click(
fn=compare_videos_interface,
inputs=[video1_input, video2_input],
outputs=[output_text, output_plot, output_video]
)
# Launch the app
if __name__ == "__main__":
os.makedirs("utils/output", exist_ok=True)
demo.launch()