# SAM 2 图像分割教程：正负点只选套装中的一个零件

用原创积木套装练习正点包含、负点排除，保存候选分数与 mask，并保持实际像素坐标一致。

已运行原创输入生成与离线文件校验；本页模型/桌面应用未实跑，比较脚本供你运行后使用。

## 逐步操作

### 1. 确认目标零件和实际坐标系

原创 flatlay.png 是代码绘制的五个积木零件，目标是中间红色块。points.json 使用原图像素 x/y，不是截图 CSS 坐标；点位可视图只是输入标注，不是 SAM 2 分割结果。

```bash
python3 verify.py
```

### 2. 安装官方仓库并对应配置与 checkpoint

在独立环境按官方 INSTALL 安装。示例选择 SAM 2.1 tiny，checkpoint 与 configs/sam2.1/sam2.1_hiera_t.yaml 必须匹配；不要混旧 SAM1 ONNX。大权重未在本页机器执行。

```bash
git clone https://github.com/facebookresearch/sam2.git
cd sam2
git checkout 2b90b9f5ceec907a1c18123530e92e794ad901a4
pip install -e ".[notebooks]"
```

### 3. 先检查 正点与负点职责

labels=1 的点要求包含目标，labels=0 排除右侧零件。先保留 points.json 副本；修改一个点时其余点和输入不变。多次提交点的集合要以实际调用内容为准。

```bash
python3 verify.py
```

### 4. 请求多候选并保存评分

run_sam_points.py 使用 SAM2ImagePredictor.set_image，传入 point_coords/point_labels 与 multimask_output=True。候选分数不是人工质量分；所有候选都存盘，不能只存最高分图。

```bash
python run_sam_points.py --repo /path/to/sam2 --checkpoint /path/to/sam2.1_hiera_tiny.pt --device cuda
```

### 5. 对照候选与负点附近

官方 Notebook 图是该作者输入的真实演示，不是本积木推理。你执行后在 output/ 查看候选 mask；尤其检查是否包括旁边零件、目标孔洞是否遗漏。

```bash
python3 verify.py --results output
```

### 6. 将选定 mask 应用到原始 RGB

按人工验收选定 candidate-0/1/2，而不是盲选 score 最大值。导出时 RGB 从原图复制，alpha 来自该候选；保持原画布，不对零件形状进行生成式重画。

### 7. 保存点位、候选和选择原因

交付原图、points.json、checkpoint/源码 revision、三个候选和人工选择原因。一次抠像失败可新增负点再跑到新目录，不能覆盖掉失败证据。

## 来源与边界

- [官方图像提示点 Notebook](https://github.com/facebookresearch/sam2/blob/main/notebooks/image_predictor_example.ipynb)
- [官方安装与 CUDA 扩展边界](https://github.com/facebookresearch/sam2/blob/main/INSTALL.md)

素材：照片样式输入由 apizt 原创生成；几何商品、积木、文具、纹理、线稿和透明标尺由代码原创绘制。输入/标注/官方示例均不是未运行模型的输出。
官方代码/模型、第三方依赖各保留其独立许可；包内不含模型权重或API凭证。
