Spaces:
Running
Running
| import numpy as np | |
| import supervision as sv | |
| from segment_anything.modeling.sam import Sam | |
| from segment_anything import SamPredictor, SamAutomaticMaskGenerator | |
| def sam_inference( | |
| image: np.ndarray, | |
| model: Sam | |
| ) -> sv.Detections: | |
| mask_generator = SamAutomaticMaskGenerator(model) | |
| result = mask_generator.generate(image=image) | |
| return sv.Detections.from_sam(result) | |
| def sam_interactive_inference( | |
| image: np.ndarray, | |
| mask: np.ndarray, | |
| model: Sam | |
| ) -> sv.Detections: | |
| predictor = SamPredictor(model) | |
| predictor.set_image(image) | |
| masks = [] | |
| for polygon in sv.mask_to_polygons(mask.astype(bool)): | |
| random_point_indexes = np.random.choice(polygon.shape[0], size=5, replace=True) | |
| input_point = polygon[random_point_indexes] | |
| input_label = np.ones(5) | |
| mask = predictor.predict( | |
| point_coords=input_point, | |
| point_labels=input_label, | |
| multimask_output=False, | |
| )[0][0] | |
| masks.append(mask) | |
| masks = np.array(masks, dtype=bool) | |
| return sv.Detections( | |
| xyxy=sv.mask_to_xyxy(masks), | |
| mask=masks | |
| ) | |