File size: 3,573 Bytes
6a7b87d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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