Spaces:
Runtime error
Runtime error
| import mediapipe as mp | |
| from utils import read_n_resize | |
| from random import sample | |
| import cv2, numpy as np | |
| BG_IMG = [ | |
| 'examples/back1.jpg', | |
| 'examples/back2.jpg', | |
| 'examples/back3.jpg', | |
| 'examples/back4.jpg', | |
| 'examples/back5.jpg', | |
| 'examples/back6.jpg' | |
| ] | |
| def mp_selfi_segment_fn(image): | |
| mp_selfie_segmentation = mp.solutions.selfie_segmentation | |
| with mp_selfie_segmentation.SelfieSegmentation( | |
| model_selection=0) as selfie_segmentation: | |
| image = read_n_resize(image, read=False) | |
| image_height, image_width, _ = image.shape | |
| # get a random background picture to fill original background | |
| backs = cv2.imread(sample(BG_IMG, 1)[0]) | |
| backs = cv2.resize(backs, (image_width, image_height)) | |
| backs = cv2.cvtColor(backs, cv2.COLOR_BGR2RGB) | |
| # pass to model | |
| results = selfie_segmentation.process(image) | |
| # Draw selfie segmentation on the background image. | |
| # To improve segmentation around boundaries, consider applying a joint | |
| # bilateral filter to "results.segmentation_mask" with "image". | |
| condition = np.stack((results.segmentation_mask,) * 3, axis=-1) > 0.1 | |
| # Generate solid color images for showing the output selfie segmentation mask. | |
| fg_image = np.zeros(image.shape, dtype=np.uint8) | |
| fg_image[:] = image | |
| bg_image = np.zeros(image.shape, dtype=np.uint8) | |
| bg_image[:] = backs | |
| output_image = np.where(condition, fg_image, bg_image) | |
| return output_image |