Skip to content

Download notebook

SAM3 Image Segmentation for JPG images

image

This notebook demonstrates how to use the Segment Anything Model 3 (SAM3) for segmenting JPG images using the samgeo3 module.

Installation

First, make sure you have the required dependencies installed:

1
# %pip install "segment-geospatial[samgeo3]"
1
# %pip install transformers==5.0.0rc0

Import Libraries

1
2
from samgeo import SamGeo3, download_file
from samgeo.common import show_image

Download Sample Data

Let's download a sample satellite image covering the University of California, Berkeley, for testing:

1
2
url = "https://raw.githubusercontent.com/facebookresearch/sam3/refs/heads/main/assets/images/test_image.jpg"
image_path = download_file(url)
1
show_image(image_path)

image

Request access to SAM3

To use SAM3, you need to request access by filling out this form on Hugging Face: https://huggingface.co/facebook/sam3

Once you have access, uncomment the following code block and run it.

1
2
# from huggingface_hub import login
# login()

Initialize SAM3

When initializing SAM3, you can choose the backend from "meta", or "transformers".

1
2
3
sam3 = SamGeo3(
    backend="transformers", device=None, checkpoint_path=None, load_from_HF=True
)

Set the image

You can set the image by either passing the image path or the image URL.

1
sam3.set_image(image_path)

Generate masks with text prompt

1
sam3.generate_masks(prompt="person")

Show the results

1
sam3.show_anns()

image

1
sam3.show_masks()

image

Generate masks by bounding boxes

1
2
3
4
5
6
7
8
# Define boxes in [xmin, ymin, xmax, ymax] format
boxes = [[480, 290, 590, 650]]

# Optional: specify which boxes are positive/negative prompts
box_labels = [True]  # True=include, False=exclude

# Generate masks
sam3.generate_masks_by_boxes(boxes, box_labels)
1
sam3.show_boxes(boxes, box_labels)

image

Show the results

1
sam3.show_anns()

image

Save Masks

Save the generated masks to a file. If the input is a GeoTIFF, the output will be a GeoTIFF with the same georeferencing. Otherwise, it will be saved as PNG.

1
2
# Save as binary mask (all foreground pixels are 255)
sam3.save_masks(output="person_masks_binary.png", unique=False)
1
sam3.show_masks(cmap="coolwarm")

text