|
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() |
|
|