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()