Spaces:
Runtime error
Runtime error
| import torch | |
| import os | |
| from PIL import Image | |
| import numpy as np | |
| from transformers import AutoImageProcessor, UperNetForSemanticSegmentation | |
| import random | |
| lst_model_segmentation = { | |
| "Convnet tiny": "openmmlab/upernet-convnext-tiny", | |
| "Convnet small": "openmmlab/upernet-convnext-small", | |
| "Convnet base": "openmmlab/upernet-convnext-base", | |
| "Convnet large": "openmmlab/upernet-convnext-large", | |
| "Convnet xlarge": "openmmlab/upernet-convnext-xlarge", | |
| "Swin tiny": "openmmlab/upernet-swin-tiny", | |
| "Swin small": "openmmlab/upernet-swin-small", | |
| "Swin base": "openmmlab/upernet-swin-base", | |
| "Swin large": "openmmlab/upernet-swin-large", | |
| } | |
| def preprocessing_segmentation(method,image): | |
| global lst_model_segmentation | |
| method = lst_model_segmentation[method] | |
| device = 'cpu' | |
| if torch.cuda.is_available(): | |
| device = 'cuda' | |
| image_processor = AutoImageProcessor.from_pretrained(method) | |
| image_segmentor = UperNetForSemanticSegmentation.from_pretrained(method).to(device) | |
| pixel_values = image_processor(image, return_tensors="pt").pixel_values.to(device) | |
| with torch.no_grad(): | |
| outputs = image_segmentor(pixel_values) | |
| seg = image_processor.post_process_semantic_segmentation(outputs, target_sizes=[image.size[::-1]])[0] | |
| color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8) # height, width, 3 | |
| seg = seg.to('cpu') | |
| unique_values = torch.unique(seg) | |
| lst_color = [] | |
| for i in unique_values: | |
| color = [random.randrange(0,256), random.randrange(0,256), random.randrange(0,256)] | |
| while color in lst_color: | |
| color = [random.randrange(0,256), random.randrange(0,256), random.randrange(0,256)] | |
| color_seg[seg == i, :] = color | |
| lst_color.append(color) | |
| color_seg = color_seg.astype(np.uint8) | |
| control_image = Image.fromarray(color_seg) | |
| return control_image |