앞의 코드에서 불러온 mask_predictor에게 분할을 진행할 이미지(image_rgb)를 설정합니다(①). 그리고 predict 메서드에 박스 좌표(box)와 multimask_output=True를 전달하여 여러 개의 마스크를 출력할 수 있도록 설정합니다(②, ③). 반환되는 값은 마스크(masks), 각 마스크의 점수(scores), 로짓(logits)입니다.
box_annotator = sv.BoxAnnotator(color=sv.Color.red())
mask_annotator = sv.MaskAnnotator(color=sv.Color.red(), color_lookup=sv.ColorLookup.INDEX)
detections = sv.Detections(
xyxy=sv.mask_to_xyxy(masks=masks),mask=masks) # ①
detections = detections[detections.area == np.max(detections.area)] # ②
source_image = box_annotator.annotate(scene=image_bgr.copy(), detections=detections, skip_label=True) # ③
segmented_image = mask_annotator.annotate(scene=image_bgr.copy(), detections=detections) # ④
sv.plot_images_grid(
images=[source_image, segmented_image],
grid_size=(1, 2),
titles=['source image', 'segmented image']
)