> 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)

[세그먼트 애니씽](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 Hosted API에서 사용할 수 없습니다.  [전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) 또는 [자체 호스팅 추론](https://docs.roboflow.com/deployment/self-hosted/self-hosted).
{% endhint %}

## 코드 예제

{% 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` 로컬 [추론](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), 현재 세대의 모델입니다.
