import gradio as gr from interface.detect_interface_methods import interface_detect from interface.defaults import shared_theme def build_detect_interface(): # Gradio Interface Code with gr.Blocks(theme=shared_theme) as demo: gr.Markdown( """ # Image & Video Interface for YOLOv8 Upload your own image or video and watch YOLOv8 try to guess what it is! """) # Row for for input & output settings with gr.Row() as file_settings: # Allows choice for uploading image or video [for all] file_type = gr.Radio(label="File Type",info="Choose 'Image' if you are uploading an image, Choose 'Video' if you are uploading a video", choices=['Image','Video'],value='Image',show_label=True,interactive=True,visible=True) # Row for all inputs & outputs with gr.Row() as inputs_outputs: # Default input image: Visible, Upload from computer input_im = gr.Image(sources=['upload','webcam','clipboard'],type='numpy',label="Input Image", show_download_button=True,show_share_button=True,interactive=True,visible=True) # Default Boxed output image: Visible output_box_im = gr.Image(type='numpy',label="Output Image", show_download_button=True,show_share_button=True,interactive=False,visible=True) # Default input video: Not visible, Upload from computer input_vid = gr.Video(sources=['upload','webcam'],label="Input Video", show_share_button=True,interactive=True,visible=False) # Default Boxed output video: Not visible output_box_vid = gr.Video(label="Output Video",show_share_button=True,visible=False) # List of components for clearing clear_list = [input_im,output_box_im,input_vid,output_box_vid] # Row for start & clear buttons with gr.Row() as buttons: start_but = gr.Button(value="Start") clear_but = gr.ClearButton(value='Clear All',components=clear_list, interactive=True,visible=True) update_list = [input_im,output_box_im,input_vid,output_box_vid] input_media = input_im output_media = output_box_im def change_input_type(file_type, input_media): if file_type == 'Image': input_media = input_im output_media = output_box_im return { input_im: gr.Image(visible=True), output_box_im: gr.Image(visible=True), input_vid: gr.Video(visible=False), output_box_vid: gr.Video(visible=False) } elif file_type == 'Video': input_media = input_vid output_media = output_box_vid return { input_im: gr.Image(visible=False), output_box_im: gr.Image(visible=False), input_vid: gr.Video(visible=True), output_box_vid: gr.Video(visible=True) } # When start button is clicked, the run_all method is called start_but.click(interface_detect, inputs=[input_media], outputs=output_media) # When these settings are changed, the change_file_type method is called file_type.input(change_input_type, show_progress=True, inputs=[file_type, input_media], outputs=update_list) return demo