import gradio as gr from demo import automask_image_app, automask_video_app, sahi_autoseg_app def image_app(): with gr.Blocks(): with gr.Row(): with gr.Column(): seg_automask_image_file = gr.Image(type="filepath").style(height=260) with gr.Row(): with gr.Column(): seg_automask_image_model_type = gr.Dropdown( choices=[ "vit_h", "vit_l", "vit_b", ], value="vit_l", label="Model Type", ) seg_automask_image_min_area = gr.Number( value=0, label="Min Area", ) with gr.Row(): with gr.Column(): seg_automask_image_points_per_side = gr.Slider( minimum=0, maximum=32, step=2, value=16, label="Points per Side", ) seg_automask_image_points_per_batch = gr.Slider( minimum=0, maximum=64, step=2, value=64, label="Points per Batch", ) seg_automask_image_predict = gr.Button(value="Generator") with gr.Column(): output_image = gr.Image() seg_automask_image_predict.click( fn=automask_image_app, inputs=[ seg_automask_image_file, seg_automask_image_model_type, seg_automask_image_points_per_side, seg_automask_image_points_per_batch, seg_automask_image_min_area, ], outputs=[output_image], ) def video_app(): with gr.Blocks(): with gr.Row(): with gr.Column(): seg_automask_video_file = gr.Video().style(height=260) with gr.Row(): with gr.Column(): seg_automask_video_model_type = gr.Dropdown( choices=[ "vit_h", "vit_l", "vit_b", ], value="vit_l", label="Model Type", ) seg_automask_video_min_area = gr.Number( value=1000, label="Min Area", ) with gr.Row(): with gr.Column(): seg_automask_video_points_per_side = gr.Slider( minimum=0, maximum=32, step=2, value=16, label="Points per Side", ) seg_automask_video_points_per_batch = gr.Slider( minimum=0, maximum=64, step=2, value=64, label="Points per Batch", ) seg_automask_video_predict = gr.Button(value="Generator") with gr.Column(): output_video = gr.Video() seg_automask_video_predict.click( fn=automask_video_app, inputs=[ seg_automask_video_file, seg_automask_video_model_type, seg_automask_video_points_per_side, seg_automask_video_points_per_batch, seg_automask_video_min_area, ], outputs=[output_video], ) def sahi_app(): with gr.Blocks(): with gr.Row(): with gr.Column(): sahi_image_file = gr.Image(type="filepath").style(height=260) sahi_autoseg_model_type = gr.Dropdown( choices=[ "vit_h", "vit_l", "vit_b", ], value="vit_l", label="Sam Model Type", ) with gr.Row(): with gr.Column(): sahi_model_type = gr.Dropdown( choices=[ "yolov5", "yolov8", ], value="yolov5", label="Detector Model Type", ) sahi_image_size = gr.Slider( minimum=0, maximum=1600, step=32, value=640, label="Image Size", ) sahi_overlap_width = gr.Slider( minimum=0, maximum=1, step=0.1, value=0.2, label="Overlap Width", ) sahi_slice_width = gr.Slider( minimum=0, maximum=640, step=32, value=256, label="Slice Width", ) with gr.Row(): with gr.Column(): sahi_model_path = gr.Dropdown( choices=[ "yolov5l.pt", "yolov5l6.pt", "yolov8l.pt", "yolov8x.pt" ], value="yolov5l6.pt", label="Detector Model Path", ) sahi_conf_th = gr.Slider( minimum=0, maximum=1, step=0.1, value=0.2, label="Confidence Threshold", ) sahi_overlap_height = gr.Slider( minimum=0, maximum=1, step=0.1, value=0.2, label="Overlap Height", ) sahi_slice_height = gr.Slider( minimum=0, maximum=640, step=32, value=256, label="Slice Height", ) sahi_image_predict = gr.Button(value="Generator") with gr.Column(): output_image = gr.Image() sahi_image_predict.click( fn=sahi_autoseg_app, inputs=[ sahi_image_file, sahi_autoseg_model_type, sahi_model_type, sahi_model_path, sahi_conf_th, sahi_image_size, sahi_slice_height, sahi_slice_width, sahi_overlap_height, sahi_overlap_width, ], outputs=[output_image], ) def metaseg_app(): app = gr.Blocks() with app: with gr.Row(): with gr.Column(): with gr.Tab("Image"): image_app() with gr.Tab("Video"): video_app() with gr.Tab("SAHI"): sahi_app() app.queue(concurrency_count=1) app.launch(debug=True, enable_queue=True) if __name__ == "__main__": metaseg_app()