Files
sam3_local/README.md
2026-02-18 02:26:41 +08:00

230 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 量迹AI · SAM3「分割一切」视觉分割服务
# Admin Config
ADMIN_PASSWORD = "admin_secure_password" # 可以根据需求修改
HISTORY_FILE = "history.json"
本项目在开源 SAM3Segment Anything Model 3能力之上封装了面向业务的 **“分割一切”** 推理服务:通过 **FastAPI** 提供文本提示词驱动的图像分割接口,并扩展了 **塔罗牌分割/识别**、**人脸与头发分割 + 属性分析** 等场景能力。
本仓库定位为:**模型推理 + API 服务** 的可复用工程模板(适合在 MacOS 开发、服务器部署)。
---
## 你能用它做什么
- 通用分割:输入图片 + 文本提示词(中文或英文),返回分割可视化结果图 URL
- 分割子图导出:可选返回每个目标的独立裁剪图(支持透明背景抠图)
- 塔罗牌:检测指定数量的塔罗牌 → 透视矫正裁剪 →(可选)调用多模态大模型识别牌名与正逆位
- 人脸分析:分割人脸/头发区域 → 裁剪保存 →(可选)调用多模态大模型预测性别/年龄等属性
对应实现文件:
- API 服务入口:[fastAPI_tarot.py](fastAPI_tarot.py)
- 人脸分析流程:[human_analysis_service.py](human_analysis_service.py)
---
## 项目结构(关键目录)
- sam3/SAM3 模型核心代码(本仓库已内置,不依赖外部子模块)
- static/results/:推理结果落盘目录(接口返回的 URL 指向这里)
- assets/:示例素材、演示图片/视频
- fastAPI_tarot.py主要 API 服务(含鉴权、模型加载、推理、可视化与落盘)
---
## 环境要求
- Python建议 3.10+SAM3 作为库最低 3.8+
- PyTorch建议按你的设备CPU/CUDA安装匹配版本
- 依赖FastAPI/uvicorn 等(见 requirement.txt另有 sam3 依赖见 pyproject.toml
---
## 安装与准备
### 0) 创建虚拟环境(推荐)
```bash
conda create -n sam3 python=3.12
conda deactivate
conda activate sam3
```
### 0.1) 安装 PyTorch按你的设备选择
GPUCUDA环境请安装与你 CUDA 版本匹配的 PyTorchCPU 环境可直接安装 CPU 版。
```bash
pip install torch torchvision torchaudio
```
### 1) 安装本仓库与依赖
```bash
pip install -e .
pip install -r requirement.txt
```
如果需要接口用到的第三方库(如 OpenCV、matplotlib、Pillow、requests、dashscope 等),请按你的实际场景安装(仓库中部分功能会依赖它们)。
### 2) 下载权重模型(必须)
> 说明:模型文件较大,建议预留充足磁盘空间。
>
> 默认将权重保存到 `./dir/`,可按需修改 `--local_dir`。
>
> 如需通过 Hugging Face 下载,也可以自行改用 `huggingface_hub` 的下载方式。
1.1 **下载权重模型:**
```bash
pip install modelscope
modelscope download --model facebook/sam3 sam3.pt --local_dir ./dir
```
下载后会得到 `./dir/sam3.pt`
### 3) 配置 SAM3 权重路径(必须)
当前 API 服务会在启动时加载 SAM3 权重。你需要确保 `fastAPI_tarot.py` 里构建模型时使用了正确的 `checkpoint_path`
推荐做法:在 [fastAPI_tarot.py](fastAPI_tarot.py) 中将模型构建改为显式传入本地权重路径,例如:
```python
model = build_sam3_image_model(checkpoint_path="./dir/sam3.pt")
```
---
## 启动 API 服务FastAPI
服务定义在 [fastAPI_tarot.py](fastAPI_tarot.py) 中。你可以用 uvicorn 启动(示例命令仅供参考,按需调整 host/port
```bash
uvicorn fastAPI_tarot:app --host 127.0.0.1 --port 55600
```
启动后:
- OpenAPI 文档:`http://127.0.0.1:55600/docs`
- 静态结果目录:`http://127.0.0.1:55600/static/results/...`
---
## 鉴权说明API Key
所有接口都要求在请求 Header 中携带 API Key
- Header 名:`X-API-Key`
- 值:请使用你服务端配置的 Key建议用环境变量或配置文件管理不要在代码里硬编码
---
## API 接口一览
以下接口均在 [fastAPI_tarot.py](fastAPI_tarot.py) 中实现,返回体为 JSON并通过静态文件服务输出结果图片 URL。
### 1) POST /segment通用分割
功能:对图片做文本提示词分割(中文会自动翻译为英文提示词)。
参数(表单):
- prompt提示词必填`cat` / `人` / `白色连衣裙`
- file上传图片二选一
- image_url图片 URL二选一
- save_segment_images是否保存并返回每个目标的独立图片默认 false
- cutout导出子图时是否透明背景抠图默认 false
- highlight是否启用“周边变黑突出主体”的效果默认 false
- confidence置信度阈值0.0-1.0,默认 0.7
返回(示例字段):
- result_image_url分割可视化结果图
- detected_count检测到的目标数量
- segmented_images可选的分割子图 URL 列表
### 2) POST /segment_tarot塔罗牌分割
功能:检测塔罗牌并对每张牌做透视矫正与裁剪。
参数(表单):
- file / image_url二选一
- expected_count期望严格检测到的塔罗牌数量默认 3
返回:
- tarot_cards每张牌的裁剪图 URL、是否被算法旋转矫正等信息
- full_visualization整体分割可视化图 URL可选
### 3) POST /recognize_tarot塔罗牌全流程分割 + 识别)
功能:在 `/segment_tarot` 基础上,进一步调用多模态大模型识别每张牌的名称与正逆位,并尝试识别牌阵。
说明:
- 该流程依赖多模态大模型服务(例如 Qwen-VL / DashScope请自行配置密钥与可用模型
- 强烈建议将密钥通过环境变量注入,避免写入仓库
### 4) POST /segment_face人脸/头发分割 + 属性分析)
功能分割“face and hair”等区域并可选调用多模态大模型进行性别/年龄等属性识别。
参数(表单):
- file / image_url二选一
- prompt默认 `face and hair`(中文会尝试翻译)
---
## 请求示例curl
### 通用分割(上传图片)
```bash
curl -X POST "http://127.0.0.1:55600/segment" \
-H "X-API-Key: <YOUR_API_KEY>" \
-F "prompt=猫" \
-F "file=@/path/to/image.jpg"
```
### 通用分割(图片 URL
```bash
curl -X POST "http://127.0.0.1:55600/segment" \
-H "X-API-Key: <YOUR_API_KEY>" \
-F "prompt=person" \
-F "image_url=https://example.com/image.jpg"
```
---
## 结果输出与落盘
- 结果图会写入:`static/results/`
- 接口返回的 URL 形如:`/static/results/<filename>``/static/results/<request_id>/<filename>`
- 服务可选开启后台清理任务,定期删除过期结果文件(见 `fastAPI_tarot.py` 末尾的环境变量配置逻辑)
---
## 常见问题
### 1) 启动时报找不到权重文件?
请确认:
- 已按“下载权重模型”得到 `sam3.pt`
- `fastAPI_tarot.py``build_sam3_image_model(checkpoint_path=...)` 指向正确路径
### 2) 返回 401/403
请确认请求头是否带了 `X-API-Key`,且值与服务端配置一致。
---
# Admin Config
ADMIN_PASSWORD = "admin_secure_password" # 可以根据需求修改
HISTORY_FILE = "history.json"
API_KEY = "123quant-speed" # 可以根据需求修改
## 免责声明与致谢
- 本项目为量迹AI内部/业务化工程封装示例,**不是官方 SAM3 仓库**。
- 模型与核心算法能力来自开源的 SAM3 实现与相关依赖,感谢社区贡献者与原作者团队。