Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import albumentations as albu | |
| from pylab import imshow | |
| import numpy as np | |
| import cv2 | |
| import torch | |
| import albumentations as albu | |
| from iglovikov_helper_functions.utils.image_utils import load_rgb, pad, unpad | |
| from iglovikov_helper_functions.dl.pytorch.utils import tensor_from_rgb_image | |
| from collections import namedtuple | |
| from tempfile import NamedTemporaryFile | |
| import os | |
| from people_segmentation.pre_trained_models import create_model | |
| model = create_model("Unet_2020-07-20") | |
| model.eval() | |
| # Define model | |
| import matplotlib.pyplot as plt | |
| from pylab import imshow | |
| def segment_people(image): | |
| transform = albu.Compose([albu.Normalize(p=1)], p=1) | |
| padded_image, pads = pad(image, factor=32, border=cv2.BORDER_CONSTANT) | |
| x = transform(image=padded_image)["image"] | |
| x = torch.unsqueeze(tensor_from_rgb_image(x), 0) | |
| with torch.no_grad(): | |
| prediction = model(x)[0][0] | |
| mask = (prediction > 0).cpu().numpy().astype(np.uint8) | |
| mask = unpad(mask, pads) | |
| dst = cv2.addWeighted(image, 1, (cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB) * (0, 255, 0)).astype(np.uint8), 0.5, 0) | |
| return dst | |
| # Create Gradio app | |
| def gradio_segmentation(image_path): | |
| image = load_rgb(image_path) | |
| mask = segment_people(image) | |
| return mask | |
| examples = [ | |
| [ "73.jpg"], | |
| [ "69.jpg"], | |
| [ "80.jpg"] | |
| ] | |
| description = """ | |
| # People Segmentation | |
| This application segments people from the input image. Upload an image to see the segmented output. | |
| """ | |
| gr.Interface( | |
| fn=gradio_segmentation, | |
| inputs=gr.Image(type="filepath"), | |
| outputs=gr.Image(type="numpy"), | |
| examples=examples, | |
| title="People Segmentation", | |
| description=description, | |
| ).launch() | |