> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/models/ko/supported-models/sam.md).

# Segment Anything (SAM)

[Segment Anything](https://github.com/facebookresearch/segment-anything) Meta의 원조 프롬프트형 이미지 분할 모델입니다. 객체 내부의 한 점(또는 박스)을 지정하면, 해당 객체의 정확한 경계를 표시하는 마스크를 반환합니다.

SAM은 두 단계로 작동합니다:

1. 이미지에 대한 임베딩을 생성합니다.
2. 분할하려는 객체의 좌표로 모델에 프롬프트를 입력합니다.

임베딩은 다음에 의해 캐시됩니다 `image_id`, 따라서 이미지를 한 번 임베딩하면 다시 인코딩하지 않고도 그 이미지에 대해 여러 프롬프트를 보낼 수 있습니다.

{% hint style="info" %}
새 프로젝트에서는 다음을 권장합니다: [SAM2](/models/ko/supported-models/sam2.md) (더 빠르고, 더 나은 마스크, 비디오 지원) 또는 [SAM3](/models/ko/supported-models/sam3.md) (텍스트 프롬프트로 개념의 모든 인스턴스를 분할합니다). SAM v1은 기존 통합을 위해 여기 문서화되어 있습니다.
{% endhint %}

{% hint style="info" %}
SAM은 Serverless Cloud API에서 사용할 수 없습니다. 다음에서 실행하세요: [전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) 또는 [자체 호스팅 추론](https://docs.roboflow.com/deployment/self-hosted/self-hosted).
{% endhint %}

## SAM API

{% stepper %}
{% step %}

### API 키 받기

Roboflow 계정을 만들고 다음에서 키를 찾으세요 [Roboflow API 설정 페이지](https://app.roboflow.com/settings/api) 그리고 셸에서 사용할 수 있도록 설정하세요:

```bash
export ROBOFLOW_API_KEY="your-key-here"
```

{% endstep %}

{% step %}

### 종속성 설치

```bash
pip install requests
```

{% endstep %}

{% step %}

### 이미지를 임베딩하기

임베딩은 이미지의 수치 표현입니다. SAM은 이를 사용해 객체 위치를 계산합니다. 다음을 설정하세요: `base_url` 전용 배포 URL 또는 로컬 추론 서버로.

```python
import os
import requests

base_url = "http://localhost:9001"
api_key = os.environ["ROBOFLOW_API_KEY"]

payload = {
    "image": {"type": "url", "value": "https://media.roboflow.com/quickstart/traffic.jpg"},
    "image_id": "example_image_id",
}

response = requests.post(
    f"{base_url}/sam/embed_image?api_key={api_key}",
    json=payload,
)
embeddings = response.json()["embeddings"]
```

해당 `image_id` 임베딩을 캐시하므로, 나중에 같은 이미지에 대한 분할 요청에서 이를 다시 보낼 필요가 없습니다.
{% endstep %}

{% step %}

### 객체 분할하기

객체 위에 있는 점 하나 이상으로 모델에 프롬프트를 입력합니다. `point_labels` 각 점을 양성(`1`, 포함) 또는 음성(`0`, 제외)로 표시합니다.

```python
payload = {
    "image": {"type": "url", "value": "https://media.roboflow.com/quickstart/traffic.jpg"},
    "point_coords": [[380, 350]],
    "point_labels": [1],
    "image_id": "example_image_id",
}

response = requests.post(
    f"{base_url}/sam/segment_image?api_key={api_key}",
    json=payload,
)
masks = response.json()["masks"]
```

응답에는 관심 객체의 분할 마스크가 포함됩니다.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
테스트 이미지의 점 좌표를 찾으려면 이를 다음에 업로드하세요: [PolygonZone 웹 도구](https://roboflow.github.io/polygonzone/) 그런 다음 객체 위에 마우스를 올리세요. 파이프라인에서는 먼저 객체 탐지기를 실행하고 각 박스의 중심점을 SAM 프롬프트로 사용하는 것이 일반적입니다.
{% endhint %}

{% hint style="info" %}
설정하세요 `base_url` 배포 대상에 맞게:

* `http://localhost:9001` 로컬 [Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) 서버.
* 귀하의 [전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) 비공개 엔드포인트용 URL.
  {% endhint %}

## 추가 읽을거리

* [Segment Anything Model(SAM)이란?](https://blog.roboflow.com/segment-anything-breakdown/)
* [SAM2](/models/ko/supported-models/sam2.md) 및 [SAM3](/models/ko/supported-models/sam3.md), 모델의 현재 세대입니다.
