import datetime import os os.system('python -m pip install \'git+https://github.com/facebookresearch/detectron2.git\'') import cv2 import gradio as gr import numpy as np from detectron2.config import get_cfg from detectron2 import model_zoo from detectron2.engine import DefaultPredictor from detectron2.utils.visualizer import Visualizer from detectron2.data import MetadataCatalog def predict(pil_image): print(datetime.datetime.now()) # Convert PIL Image to CV2 open_cv_image = np.array(pil_image) input_image = open_cv_image[:, :, ::-1].copy() # Initialise model cfg = get_cfg() cfg.merge_from_file(model_zoo.get_config_file("COCO-PanopticSegmentation/panoptic_fpn_R_101_3x.yaml")) cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-PanopticSegmentation/panoptic_fpn_R_101_3x.yaml") cfg.MODEL.DEVICE = "cpu" predictor = DefaultPredictor(cfg) assert input_image.shape[2] == 3 height, width, _ = input_image.shape # Apply Panoptic segmentation panoptic_seg, segments_info = predictor(input_image)["panoptic_seg"] v = Visualizer(input_image[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2) out = v.draw_panoptic_seg_predictions(panoptic_seg.to("cpu"), segments_info) segmented_image = out.get_image()[:, :, ::-1] return segmented_image # Create Gradio interface image_input = gr.Image(type="pil", label="Input Image") iface = gr.Interface(fn=predict, inputs=[image_input], outputs=gr.Image(type="pil"), examples=["examples/6178_3003_0.jpg"]) iface.launch()