> 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 Hosted API では利用できません。 [専用デプロイ](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) または [セルフホスト型 Inference](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` を 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?api_key={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?api_key={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) サーバー用。
* あなたの [専用デプロイ](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)、モデルの現在の世代です。
