CoolFace
Apppublic

AideepImage/interior-design

sourceHugging Faceopenrailupdated 2y agoView on Hugging Face
1likes
segmentation.py55 linesDownload Raw Back to root
1import logging2from typing import List, Tuple, Dict3 4import streamlit as st5import torch6import gc7import numpy as np8from PIL import Image9 10from transformers import AutoImageProcessor, UperNetForSemanticSegmentation11 12from palette import ade_palette13 14LOGGING = logging.getLogger(__name__)15 16 17def flush():18    gc.collect()19    torch.cuda.empty_cache()20 21@st.cache_resource(max_entries=5)22def get_segmentation_pipeline() -> Tuple[AutoImageProcessor, UperNetForSemanticSegmentation]:23    """Method to load the segmentation pipeline24    Returns:25        Tuple[AutoImageProcessor, UperNetForSemanticSegmentation]: segmentation pipeline26    """27    image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-small")28    image_segmentor = UperNetForSemanticSegmentation.from_pretrained(29        "openmmlab/upernet-convnext-small")30    return image_processor, image_segmentor31 32 33@torch.inference_mode()34@torch.autocast('cuda')35def segment_image(image: Image) -> Image:36    """Method to segment image37    Args:38        image (Image): input image39    Returns:40        Image: segmented image41    """42    image_processor, image_segmentor = get_segmentation_pipeline()43    pixel_values = image_processor(image, return_tensors="pt").pixel_values44    with torch.no_grad():45        outputs = image_segmentor(pixel_values)46 47    seg = image_processor.post_process_semantic_segmentation(48        outputs, target_sizes=[image.size[::-1]])[0]49    color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8)50    palette = np.array(ade_palette())51    for label, color in enumerate(palette):52        color_seg[seg == label, :] = color53    color_seg = color_seg.astype(np.uint8)54    seg_image = Image.fromarray(color_seg).convert('RGB')55    return seg_image