# Copyright (c) Facebook, Inc. and its affiliates. # Copyright (c) Meta Platforms, Inc. All Rights Reserved import multiprocessing as mp import numpy as np from PIL import Image try: import detectron2 except: import os os.system('pip install git+https://github.com/facebookresearch/detectron2.git') from detectron2.config import get_cfg from detectron2.projects.deeplab import add_deeplab_config from detectron2.data.detection_utils import read_image from open_vocab_seg import add_ovseg_config from open_vocab_seg.utils import VisualizationDemo, SAMVisualizationDemo import gradio as gr import gdown # ckpt_url = 'https://drive.google.com/uc?id=1cn-ohxgXDrDfkzC1QdO-fi8IjbjXmgKy' # output = './ovseg_swinbase_vitL14_ft_mpt.pth' # gdown.download(ckpt_url, output, quiet=False) def setup_cfg(config_file): # load config from file and command-line arguments cfg = get_cfg() add_deeplab_config(cfg) add_ovseg_config(cfg) cfg.merge_from_file(config_file) cfg.freeze() return cfg def inference(class_names, proposal_gen, granularity, input_img): mp.set_start_method("spawn", force=True) config_file = './ovseg_swinB_vitL_demo.yaml' cfg = setup_cfg(config_file) if proposal_gen == 'MaskFormer': demo = VisualizationDemo(cfg) elif proposal_gen == 'Segment_Anything': demo = SAMVisualizationDemo(cfg, granularity, './sam_vit_l_0b3195.pth', './ovseg_clip_l_9a1909.pth') class_names = class_names.split(',') img = read_image(input_img, format="BGR") _, visualized_output = demo.run_on_image(img, class_names) return Image.fromarray(np.uint8(visualized_output.get_image())).convert('RGB') examples = [['Saturn V, toys, desk, wall, sunflowers, white roses, chrysanthemums, carnations, green dianthus', 'Segment_Anything', 0.8, './resources/demo_samples/sample_01.jpeg'], ['red bench, yellow bench, blue bench, brown bench, green bench, blue chair, yellow chair, green chair, brown chair, yellow square painting, barrel, buddha statue', 'Segment_Anything', 0.8, './resources/demo_samples/sample_04.png'], ['pillow, pipe, sweater, shirt, jeans jacket, shoes, cabinet, handbag, photo frame', 'Segment_Anything', 0.7, './resources/demo_samples/sample_05.png'], ['Saturn V, toys, blossom', 'MaskFormer', 1.0, './resources/demo_samples/sample_01.jpeg'], ['Oculus, Ukulele', 'MaskFormer', 1.0, './resources/demo_samples/sample_03.jpeg'], ['Golden gate, yacht', 'MaskFormer', 1.0, './resources/demo_samples/sample_02.jpeg'],] output_labels = ['segmentation map'] title = 'OVSeg (+ Segment_Anything)' description = """ [NEW!] We incorperate OVSeg CLIP w/ Segment_Anything, enabling SAM's text prompts. Gradio Demo for Open-Vocabulary Semantic Segmentation with Mask-adapted CLIP. \n OVSeg could perform open vocabulary segmentation, you may input more classes (seperate by comma). You may click on of the examples or upload your own image. \n It might take some time to process. Cheers!
(Colab only supports MaskFormer proposal generator) Don't want to wait in queue?
""" article = """Open-Vocabulary Semantic Segmentation with Mask-adapted CLIP | Github Repo
""" gr.Interface( inference, inputs=[ gr.Textbox( lines=1, placeholder=None, default='', label='class names'), gr.Radio(["Segment_Anything", "MaskFormer"], label="Proposal generator", default="Segment_Anything"), gr.Slider(0, 1.0, 0.8, label="For Segment_Anything only, granularity of masks from 0 (most coarse) to 1 (most precise)"), gr.Image(type='filepath'), ], outputs=gr.components.Image(type="pil", label='segmentation map'), title=title, description=description, article=article, examples=examples).launch(enable_queue=True)