> 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/ja/supported-models/sam.md).

# Segment Anything（SAM）

[Segment Anything](https://github.com/facebookresearch/segment-anything) Metaのオリジナルのプロンプト可能な画像セグメンテーションモデルです。オブジェクト内の一点（またはボックス）を与えると、そのオブジェクトの正確な境界を示すマスクを返します。

SAMは2つのステップで動作します：

1. 画像の埋め込みを作成します。
2. セグメント化したいオブジェクトの座標を指定してモデルにプロンプトします。

埋め込みは次のキーでキャッシュされます `image_id`。そのため、画像を一度埋め込めば、再エンコードせずにその画像に対して何度もプロンプトを送れます。

{% hint style="info" %}
新しいプロジェクトでは、次を推奨します [SAM2](/models/ja/supported-models/sam2.md) （より高速、より良いマスク、動画対応）または [SAM3](/models/ja/supported-models/sam3.md) （テキストプロンプトから概念の各インスタンスをすべてセグメント化します）。既存の統合向けに、SAM v1 のドキュメントはこちらです。
{% endhint %}

{% hint style="info" %}
SAMはServerless Cloud APIでは利用できません。次の環境で実行してください： [Dedicated Deployment](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) または [self-hosted Inference](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` Dedicated Deploymentの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",
    headers={"Authorization": f"Bearer {api_key}"},
    json=payload,
)
embeddings = response.json()["embeddings"]
```

この `image_id` 埋め込みをキャッシュするため、同じ画像に対する後続のセグメンテーション要求で再度送信する必要はありません。
{% endstep %}

{% step %}

### オブジェクトをセグメント化する

オブジェクト上にある少なくとも1つの点を指定してモデルにプロンプトします。 `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",
    headers={"Authorization": f"Bearer {api_key}"},
    json=payload,
)
masks = response.json()["masks"]
```

レスポンスには、対象オブジェクトのセグメンテーションマスクが含まれています。
{% endstep %}
{% endstepper %}

{% hint style="info" %}
テスト画像の点の座標を見つけるには、それを次にアップロードします： [PolygonZone Webツール](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) サーバー用。
* あなたの [Dedicated Deployment](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) プライベートエンドポイント用のURL。
  {% endhint %}

## 参考資料

* [Segment Anything Model（SAM）とは何ですか？](https://blog.roboflow.com/segment-anything-breakdown/)
* [SAM2](/models/ja/supported-models/sam2.md) と [SAM3](/models/ja/supported-models/sam3.md)、モデルの現在の世代です。
