import gradio as gr def wire_events(demo, components, assistant): c = components def handle_describe(webcam_img, upload_img, task, voice): is_webcam = webcam_img is not None img = webcam_img if is_webcam else upload_img if img is None: return gr.update(), gr.update(), f'
Please provide an image.
' import numpy as np import cv2 # If the image came from the webcam, it is likely horizontally mirrored by Gradio. # We must un-mirror it so text and spatial relationships are correct! if is_webcam and isinstance(img, np.ndarray): img = cv2.flip(img, 1) text, audio, status = assistant.process_image(img, task, voice, force=True) return text or gr.update(), audio or gr.update(), f'
{status}
' c["describe_btn"].click( handle_describe, inputs=[c["webcam"], c["upload"], c["task_radio"], c["voice_dropdown"]], outputs=[c["caption_box"], c["audio_player"], c["status_bar"]] ) def toggle_rt(is_active): new_state = not is_active btn_text = "⚫ Stop Realtime (R)" if new_state else "⚫ Start Realtime (R)" status_msg = "Realtime Started" if new_state else "Realtime Paused" return new_state, gr.update(value=btn_text), f'
{status_msg}
' c["realtime_btn"].click( toggle_rt, inputs=[c["rt_state"]], outputs=[c["rt_state"], c["realtime_btn"], c["status_bar"]] ) def handle_rt_stream(image, task, voice, is_active): print(f"DEBUG stream: is_active={is_active}, task={task}, voice={voice}") if is_active is False: return gr.update(), gr.update(), f'
Realtime Paused
' if not is_active: # Fallback if None is_active = True if image is None: return gr.update(), gr.update(), f'
No Camera
' import numpy as np import cv2 # Un-mirror the webcam feed for backend processing if isinstance(image, np.ndarray): image = cv2.flip(image, 1) text, audio, status = assistant.process_image(image, task, voice, force=False) return text or gr.update(), audio or gr.update(), f'
{status}
' c["webcam"].stream( handle_rt_stream, inputs=[c["webcam"], c["task_radio"], c["voice_dropdown"], c["rt_state"]], outputs=[c["caption_box"], c["audio_player"], c["status_bar"]], stream_every=3.0 )