import gradio as gr from fastapi import FastAPI from shared import DEFAULT_CHANGE_THRESHOLD, DEFAULT_MAX_SPEAKERS, ABSOLUTE_MAX_SPEAKERS # Replace with your actual space URL when deployed API_WS = "wss://your-space.hf.space/ws_inference" def build_ui(): """Build Gradio UI for speaker diarization""" with gr.Blocks(title="Real-time Speaker Diarization", theme=gr.themes.Soft()) as demo: gr.Markdown("# 🎤 Live Speaker Diarization") gr.Markdown("Real-time speech recognition with automatic speaker identification") with gr.Row(): with gr.Column(scale=2): # Conversation display output = gr.HTML( value="
Click 'Start' to begin listening...
", label="Live Conversation", elem_classes=["output"] ) # Control buttons with gr.Row(): start_btn = gr.Button("â–ļī¸ Start Listening", variant="primary", size="lg") stop_btn = gr.Button("âšī¸ Stop", variant="stop", size="lg") clear_btn = gr.Button("đŸ—‘ī¸ Clear", variant="secondary", size="lg") # Status display status_output = gr.Textbox( label="System Status", value="Click 'Start Listening' to begin...", lines=8, interactive=False ) with gr.Column(scale=1): # Settings gr.Markdown("## âš™ī¸ Settings") threshold_slider = gr.Slider( minimum=0.3, maximum=0.9, step=0.05, value=DEFAULT_CHANGE_THRESHOLD, label="Speaker Change Sensitivity", info="Lower = more sensitive" ) max_speakers_slider = gr.Slider( minimum=2, maximum=ABSOLUTE_MAX_SPEAKERS, step=1, value=DEFAULT_MAX_SPEAKERS, label="Maximum Speakers" ) update_btn = gr.Button("Update Settings", variant="secondary") # Instructions gr.Markdown(""" ## 📋 Instructions 1. **Start Listening** - allows browser to access microphone 2. **Speak** - system will recognize different speakers 3. **Stop** when finished ## 🎨 Speaker Colors - 🔴 Speaker 1 (Red) - đŸŸĸ Speaker 2 (Teal) - đŸ”ĩ Speaker 3 (Blue) - 🟡 Speaker 4 (Green) """) # JavaScript for browser audio capture and WebRTC js = f""" """ # Inject JavaScript demo.load(js, outputs=[output, status_output]) return demo # Create Gradio interface demo = build_ui() def mount_ui(app: FastAPI): """Mount Gradio app to FastAPI""" app.mount("/", demo.app) # For standalone testing if __name__ == "__main__": demo.launch()