Rohit8y's picture
updated application
811bcfe
raw
history blame
1.71 kB
import os
os.system('python -m pip install \'git+https://github.com/facebookresearch/detectron2.git\'')
import cv2
import gradio as gr
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(input_image):
# 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]
# Resize image if required
if not segmented_image.shape[:2] == (height, width):
segmented_image = cv2.resize(segmented_image, (height, width))
# Combine the segmented and original image
combined_image = cv2.hconcat([segmented_image, input_image])
return combined_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/trump-fake.jpeg"]])
iface.launch()