Skip to content

NNNSX/SAM2Cut

Repository files navigation

SAM2Cut 本地交互式抠图工具

SAM2Cut 是一个基于 Meta Segment Anything 2 / SAM2.1 的本地 Web 抠图工具,面向图片透明抠图和视频对象追踪抠图。当前版本使用 FastAPI + HTML Canvas 实现交互标注。

核心流程是:上传素材、初始化 SAM2、用点选或框选标注对象、追踪并预览、在问题帧补标、满意后导出透明素材。

功能

  • 图片抠图:前景点、背景点、拖拽框选、多对象、按对象导出透明 PNG。
  • 视频抠图:点选、框选、多对象、按帧补标、增量追踪、浏览器视频预览。
  • 对象管理:新增对象、删除当前对象、删除当前帧当前对象提示、清空全部。
  • 预览质检:右侧状态日志、当前对象摘要、本帧点/框数量、追踪后 MP4 预览。
  • 导出格式:图片 PNG;视频 PNG 序列 ZIP、GIF、WebM alpha、MOV HEVC alpha、MOV ProRes 4444 alpha、MP4 H.264 无透明。
  • 视频导出可选择输出格式、码率、输出缩放、原始尺寸/裁剪/最大宽度策略。
  • 设备支持:autocudampscpu
  • 权重加载:优先使用本地 checkpoints/,缺失时可走 Hugging Face fallback。

仓库结构

.
├── sam2_image_canvas_app.py                         # 主入口:FastAPI + Canvas Web 版
├── sam2cut_core.py                                  # SAM2 加载、渲染、追踪、导出核心函数
├── check_env.py                                     # 环境检查
├── requirements.txt
├── README.md
├── checkpoints/                                     # 本地权重目录,不建议提交
└── sam2/                                            # 本地 SAM2 源码目录,不建议提交

环境要求

  • Python 3.10
  • PyTorch / torchvision
  • SAM2 Python 包
  • FastAPI、Uvicorn、OpenCV、Pillow、NumPy、tqdm、Hugging Face Hub
  • ffmpeg:用于视频转码、WebM/MOV/MP4 导出和预览视频编码。

Apple Silicon 可用 mps,但速度和结果可能与 CUDA 有差异。长视频建议使用 CUDA。

安装

创建环境:

conda create -n sam2cut python=3.10 -y
conda activate sam2cut

安装 PyTorch。请按你的平台选择官方命令,下面只是示例:

pip install torch torchvision

安装项目依赖:

pip install -r requirements.txt

安装 SAM2:

git clone https://github.com/facebookresearch/sam2.git
cd sam2
pip install -e .
cd ..

安装 ffmpeg

# Conda / Anaconda,推荐在当前环境内安装
conda install -c conda-forge ffmpeg

# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y ffmpeg

检查环境:

python check_env.py

模型权重

可以把 SAM2.1 权重放到 checkpoints/

mkdir -p checkpoints

curl -L -o checkpoints/sam2.1_hiera_tiny.pt \
  https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_tiny.pt

curl -L -o checkpoints/sam2.1_hiera_small.pt \
  https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_small.pt

curl -L -o checkpoints/sam2.1_hiera_base_plus.pt \
  https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_base_plus.pt

权重文件较大,默认应被 .gitignore 忽略,不建议提交到 GitHub。

启动

推荐入口:

SAM2_DEVICE=mps python sam2_image_canvas_app.py

其他设备:

SAM2_DEVICE=auto python sam2_image_canvas_app.py
SAM2_DEVICE=cuda python sam2_image_canvas_app.py
SAM2_DEVICE=cpu  python sam2_image_canvas_app.py

浏览器打开:

图片抠图:http://127.0.0.1:7862/
视频抠图:http://127.0.0.1:7862/video

如需换端口:

SAM2_IMAGE_PORT=7870 SAM2_DEVICE=mps python sam2_image_canvas_app.py

图片流程

  1. 打开 http://127.0.0.1:7862/
  2. 上传图片,选择模型和设备,点击 初始化图片
  3. 使用 点选 添加前景点或背景点。
  4. 使用 框选 时,按住鼠标拖出矩形,松开后提交。
  5. 需要新对象时点击 新增对象
  6. 可用 删除当前对象 删除当前对象 ID 的点和框。
  7. 如只导出部分对象,在 保留对象 填写 1,3 这类 ID 列表。
  8. 点击 导出 PNG,浏览器会触发下载。

视频流程

  1. 打开 http://127.0.0.1:7862/video
  2. 上传视频,选择模型和设备,点击 初始化视频
  3. 在当前帧用点选或框选标注目标。
  4. 点击 追踪,右侧会生成 MP4 追踪预览。
  5. 发现问题帧后,用帧滑块跳转到该帧。
  6. 继续对当前对象补点或补框,再次点击 追踪
  7. 需要修掉某一帧的错误提示时,点击 删除本帧当前对象提示
  8. 需要移除整个对象时,点击 删除当前对象
  9. 如只导出部分对象,在 保留对象 填写对象 ID。
  10. 选择导出格式、尺寸处理和视频码率。
  11. 点击 导出,右侧会显示可下载文件。

导出格式

  • image_cutout.png:单张图片透明 PNG。
  • transparent_png_frames.zip:视频透明 PNG 序列。
  • cutout_preview.gif:GIF 预览,透明质量受 GIF 格式限制。
  • cutout_alpha.webm:VP9 alpha 视频,需要 ffmpeg
  • cutout_alpha_hevc.mov:HEVC alpha 视频,文件通常比 ProRes 小,主要适合 macOS / iOS / Apple 生态,需要 ffmpeghevc_videotoolbox 支持。
  • cutout_alpha_prores4444.mov:ProRes 4444 alpha 视频,体积大,但后期软件兼容性和透明质量最好,需要 ffmpeg
  • cutout_preview_h264.mp4:H.264 MP4 兼容版,不保留透明通道,透明区域会合成为黑底。

视频导出参数:

  • 尺寸处理
    • 原始尺寸:保持输入视频尺寸。
    • 按 mask 外接框裁剪:按所有追踪 mask 的总体外接框裁剪,可设置裁剪边距。
    • 限制最大宽度:保持全画面,只按最大宽度等比缩放。
    • 裁剪后限制最大宽度:先裁剪,再按最大宽度等比缩放。
  • 输出缩放:提供 100%75%50%25%。这是最直接的体积控制方式,分辨率减半通常会显著降低 WebM、MP4、GIF、PNG 序列和 MOV 的体积。
  • 最大宽度:在输出缩放后再做宽度上限限制,适合明确要导出 720p、1080p 等宽度的场景。
  • 码率方案:提供 小体积 2M标准 4M高质量 8M超高质量 16M编码器默认自定义。自定义值会传给 ffmpeg 的 -b:v,例如 6M12000k
  • 预计文件大小:按视频时长和码率粗略估算,实际大小会受透明通道、画面复杂度、编码器策略和所选格式影响。ProRes 通常远大于 WebM/HEVC/MP4。

常见问题

初始化 SAM2 时报 sam2 包被遮蔽

通常是从 SAM2 仓库父目录运行导致包名冲突。当前工具已做路径修正,但仍建议:

  • 在本项目根目录运行。
  • 确认 sam2/ 已执行 pip install -e .
  • 不要从 sam2 源码目录的父目录直接导入未安装包。

WebM/MOV/MP4 或视频预览失败

通常是 ffmpeg 未安装或不在 PATH。安装后重启程序。

MOV HEVC Alpha 依赖 Apple VideoToolbox 的 HEVC alpha 编码能力;如果该格式失败,仍可导出 WebM alpha、MOV ProRes 4444 或 PNG 序列。

GIF 背景或边缘不理想

GIF 只有索引透明,不支持高质量半透明 alpha。正式视频合成建议用 WebM alpha、MOV HEVC alpha、MOV ProRes 4444 或 PNG 序列。MP4 H.264 不支持透明,只适合预览或普通平台分发。

MPS 慢或结果不稳定

MPS 可用,但 SAM2 在 CUDA 上通常更稳。MPS/CPU 下建议先用 tinysmall 模型验证流程。

About

No description, website, or topics provided.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages