diff --git a/.claudian/sessions/conv-1776871296744-2ksok7n1u.meta.json b/.claudian/sessions/conv-1776871296744-2ksok7n1u.meta.json index 97d2a7b..ba90c98 100644 --- a/.claudian/sessions/conv-1776871296744-2ksok7n1u.meta.json +++ b/.claudian/sessions/conv-1776871296744-2ksok7n1u.meta.json @@ -4,8 +4,8 @@ "title": "Design ComfyUI video segmentation and tracking", "titleGenerationStatus": "success", "createdAt": 1776871296744, - "updatedAt": 1776872591468, - "lastResponseAt": 1776872300286, + "updatedAt": 1776995136544, + "lastResponseAt": 1776995136544, "sessionId": "50e1c568-9493-4c86-8ca1-1f50b0f2e724", "providerState": { "providerSessionId": "50e1c568-9493-4c86-8ca1-1f50b0f2e724" @@ -15,12 +15,12 @@ ], "usage": { "model": "kimi-for-coding", - "inputTokens": 35379, + "inputTokens": 46448, "cacheCreationInputTokens": 0, "cacheReadInputTokens": 0, "contextWindow": 200000, - "contextTokens": 35379, - "percentage": 18, + "contextTokens": 46448, + "percentage": 23, "contextWindowIsAuthoritative": true } } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index b03d95f..399ff6b 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -195,11 +195,11 @@ "obsidian-excalidraw-plugin:新建绘图文件": false } }, - "active": "cf6ed9a83174d6d5", + "active": "98c4d568edb73698", "lastOpenFiles": [ + "自动语义分割系统/安装步骤.md", "自动语义分割系统/系统设计.md", "自动语义分割系统/ComfyUI 搭建操作指南.md", - "自动语义分割系统/安装步骤.md", "Excalidraw/Drawing 2026-04-22 22.49.48.excalidraw.md", "Excalidraw/Drawing 2026-04-22 22.49.50.excalidraw.md", "Excalidraw/Drawing 2026-04-22 22.40.08.excalidraw.md", diff --git a/自动语义分割系统/ComfyUI 搭建操作指南.md b/自动语义分割系统/ComfyUI 搭建操作指南.md index d3ccdbe..448e5be 100644 --- a/自动语义分割系统/ComfyUI 搭建操作指南.md +++ b/自动语义分割系统/ComfyUI 搭建操作指南.md @@ -13,7 +13,7 @@ tags: > 前置假设:你已安装以下节点包。如未安装,请先通过 ComfyUI Manager 安装: > - `ComfyUI-Manager`(管理器本身) > - `ComfyUI-VideoHelperSuite`(视频加载/保存) -> - `ComfyUI-SAM2`(SAM2 分割,推荐 kijai 版) +> - `ComfyUl-segment-anything-2`(SAM2 分割,推荐 kijai 版) > - `ComfyUI-Impact-Pack`(Grounding DINO / 检测器) > - `rgthree-comfy`(Fast Muter / Bypass 节点) @@ -31,18 +31,22 @@ tags: ### 2.1 加载视频 -1. 右键/双击空白处 -2. 依次找到:`video` → `Load Video (Upload)` 或 `Load Video (Path)` - - 如果你用 VideoHelperSuite,路径通常是 `video` → `VHS_LoadVideo` -3. 点击创建节点 -4. 节点出现在画布上,把它拖到左上角区域 +1. 右键/双击空白处打开节点菜单 +2. 在第二级菜单中找到 **Video Helper Suite**(带有紫色摄像机图标的那一项) +3. 在右侧弹出的第三级菜单中,根据你的需求选择以下任意一个节点: + - **Load Video (Upload)**:如果你想从电脑本地上传一个视频文件 + - **Load Video (Path)**:如果你想通过输入电脑上的文件夹路径来读取视频 +4. 点击创建节点 +5. 节点出现在画布上,把它拖到左上角区域 ### 2.2 提取第一帧(关键帧选择器) -1. 添加节点:`video` → `VHS_SelectFrames` 或 `Get Image From Batch` - - 如果没有专用选帧节点,可用原生 `ImageBatch` 配合索引拆分 -2. 连接:`Load Video` 的 `IMAGE` 输出 → `SelectFrames` 的 `image` 输入 -3. 设置参数:`frame_index = 0`(表示取第一帧) +1. 回到 **Video Helper Suite**(紫色摄像机图标)的第三级菜单 +2. 找到 `图像` 分类下的 **`Select Images`**: + - 在较新版本的 Video Helper Suite 中,它取代了旧版的 `VHS_SelectFrames` 名称,功能完全一致,都是通过索引(Index)从视频流中挑选特定帧 +3. (可选抽帧)如果你不想逐帧处理,也可以使用它上方的 **`Select Every Nth Image`**,每隔几帧取一张 +4. 连接:`Load Video` 的 `IMAGE` 输出 → `Select Images` 的 `image` 输入 +5. 设置参数:`index = 0`(表示取第一帧) > **操作技巧**:ComfyUI 中,鼠标从一个节点的**圆形输出端**拖拽到另一个节点的**圆形输入端**即可完成连线。 @@ -53,10 +57,10 @@ tags: 这是整个系统的核心引擎。 1. 右键/双击空白处 -2. 找到分类:`SAM2` 或 `segment_anything` -3. 选择节点:`SAM2 Model Loader`(名称可能为 `SAM2ModelLoader` 或 `SAM2::Model Loader`) +2. 找到分类:`SAM2` ,别选 `segment_anything2 ` +3. 选择节点:`(Down)Load SAM2Model`(名称可能为 `SAM2ModelLoader` 或 `SAM2::Model Loader`) 4. 参数设置: - - `model_name`: 选择 `sam2_hiera_base_plus.pt`(精度与速度平衡) + - `model_name`: 选择 `sam2.1 hiera_base_plus.safetensors`(精度与速度平衡) - `device`: `cuda`(若显存不足可选 `cpu`,但极慢) - `precision`: `fp16`(推荐,省显存) @@ -70,7 +74,7 @@ tags: ### 4.1 点标注(正选/反选) -1. 添加节点:`SAM2` → `SAM2 Point Prompt` 或 `Point Prompt` +1. 添加节点:`SAM2 → `SAM2 Point Prompt` 或 `Point Prompt` 2. 参数设置: - `points`: `[[0.5, 0.5]]`(归一化坐标,格式为 JSON 列表) - `labels`: `[1]`(`1` = 正选前景,`0` = 反选背景) diff --git a/自动语义分割系统/安装步骤.md b/自动语义分割系统/安装步骤.md new file mode 100644 index 0000000..56a470e --- /dev/null +++ b/自动语义分割系统/安装步骤.md @@ -0,0 +1,164 @@ +--- +title: ComfyUI 视频分割系统 - 安装与搭建步骤 +date: 2026-04-22 +tags: + - comfyUI + - 安装步骤 + - SAM2 + - 工作流搭建 +--- + +# ComfyUI 视频分割系统 - 安装与搭建步骤 + +## 前置要求 + +在 ComfyUI 界面中操作前,请确保已通过 **ComfyUI Manager(管理扩展功能)** 安装以下节点包: + +| 节点包 | 作用 | +|-------|------| +| `ComfyUI-VideoHelperSuite` | 视频加载、帧提取、视频合成 | +| `ComfyUI-SAM2`(推荐 kijai 版) | SAM2 模型加载、图像/视频预测 | +| `ComfyUI-Impact-Pack` | Grounding DINO 语义检测 | +| `rgthree-comfy` | Fast Muter / Bypass 节点 | + +安装后**重启 ComfyUI**。 + +--- + +## 搭建步骤(共 10 步) + +以下所有节点均通过 **双击画布空白处** 或 **右键 → 添加节点** 创建。 + +### 第 1 步:选择加载节点 + +1. 右键/双击空白处打开节点菜单 +2. 在第二级菜单中找到 **Video Helper Suite**(带有紫色摄像机图标的那一项) +3. 在右侧弹出的第三级菜单中,根据你的需求选择以下任意一个节点: + - **Load Video (Upload)**:如果你想从电脑本地上传一个视频文件 + - **Load Video (Path)**:如果你想通过输入电脑上的文件夹路径来读取视频 +4. 点击创建节点 +5. 节点出现在画布上,把它拖到左上角区域 + +### 第 2 步:提取第一帧(关键帧) + +1. 回到 **Video Helper Suite**(紫色摄像机图标)的第三级菜单 +2. 找到 `图像` 分类下的 **`Select Images`**: + - 在较新版本的 Video Helper Suite 中,它取代了旧版的 `VHS_SelectFrames` 名称,功能完全一致,都是通过索引(Index)从视频流中挑选特定帧 +3. (可选抽帧)如果你不想逐帧处理,也可以使用它上方的 **`Select Every Nth Image`**,每隔几帧取一张 +4. 连接:`Load Video` 的 `IMAGE` 输出 → `Select Images` 的 `image` 输入 +5. 设置参数:`index = 0`(表示取第一帧) + +> 这就是你的关键帧,后续所有分割以此为基础。 + +### 第 3 步:SAM2 模型加载器 + +- 搜索:`SAM2` → `SAM2 Model Loader` +- 拖到画布**中上方**,作为公共模型源 +- 参数设置: + - `model_name`: `sam2_hiera_base_plus.pt` + - `precision`: `fp16`(省显存) + +### 第 4 步:创建提示节点(建议三种都建) + +| 节点路径 | 参数示例 | 用途 | +|---------|---------|------| +| `SAM2` → `SAM2 Point Prompt` | `points=[[0.5,0.5]]`, `labels=[1]` | 点选目标(1=正选,0=反选) | +| `SAM2` → `SAM2 Box Prompt` | `box=[0.3,0.3,0.7,0.8]` | 框选目标 | +| `Impact` → `Grounding DINO` → 连到 Box Prompt | `prompt="a person"` | 语义提示转检测框 | + +> 连线方式:从节点的**圆形输出端**拖拽到另一个节点的**圆形输入端**。 + +### 第 5 步:单帧分割测试 + +- 搜索:`SAM2` → `SAM2 Image Predictor` +- 连接: + - `Get Image From Batch(0)` → `image` + - `SAM2 Model Loader` → `sam2_model` + - `Point Prompt` / `Box Prompt` → `prompt` +- 再加一个 `image` → `Preview Image`,连到 Image Predictor 的输出 +- **点击右上角「运行」**,先确认第一帧分割正确 + +### 第 6 步:视频追踪器 + +- 搜索:`SAM2` → `SAM2 Video Predictor` +- 连接: + - `SAM2 Model Loader` → `sam2_model` + - `Load Video` 的完整 `IMAGE`(批次,不是单帧)→ `images` 或 `video_frames` + - `SAM2 Image Predictor` 的 `mask` → `initial_mask` + - 设置 `frame_index = 0` + +### 第 7 步:追踪输出 + +- 若 SAM2 包有 `SAM2 Track Forward/Backward`,将 Video Predictor 的 `state` 连入 +- 若 Video Predictor 直接输出 `mask_sequence`,跳过此步 + +### 第 8 步:可视化与保存 + +| 节点 | 路径 | 用途 | +|------|------|------| +| `MaskToImage` | `image` → `MaskToImage` | 将 mask 转为可视图像 | +| `Preview Image` | `image` → `Preview Image` | 预览效果 | +| `Save Image` | `image` → `Save Image` | 保存 mask 序列 | +| `VHS_VideoCombine` | `video` → `VHS_VideoCombine` | 合成带遮罩的视频 | + +### 第 9 步:人工纠正分支(RGThree Fast Muter) + +- 搜索:`rgthree` → `Fast Muter` +- 在主线旁创建第二条「修正流」: + 1. 再建一个 `Get Image From Batch`,`index` 填问题帧号(如 45) + 2. 再建一个 `SAM2 Point Prompt`,填修正坐标 + 3. 再建一个 `SAM2 Image Predictor`(修正版) + 4. 修正 Image Predictor 的 `mask` → **`Fast Muter`** → `SAM2 Video Predictor` 的 `correction_mask`(或额外提示输入) +- **默认点击 Fast Muter 使其变红**(关闭,不参与运算) +- 需要修正时,**点击变绿**(启用),修改帧号和坐标,重新运行 + +### 第 10 步:总连线检查 + +确保以下三点: +- Video Predictor 吃的是**完整视频**,不是单帧 +- Image Predictor(第一帧)只吃了 `index=0` 的单帧 +- Fast Muter 当前状态符合预期 + +--- + +## 建议的执行顺序 + +不要一次性连完所有节点再运行!按以下顺序验证: + +1. **只连第 1~5 步**(到 Preview Image)→ 运行 → 确认第一帧分割正确 +2. **接入第 6~8 步**(Video Predictor + 输出)→ 运行 → 确认整段视频能跑通 +3. **最后加第 9 步**(Fast Muter 修正分支)→ 测试一次纠正流程 + +--- + +## Fast Muter 实际操作流程 + +``` +首次运行: + Fast Muter = 红色(关闭) + → 点击「运行」→ 检查 Preview Image + +发现第 N 帧错了: + 1. 修改修正 Frame Picker 的 index = N + 2. 修改修正 Point Prompt 的坐标 + 3. Fast Muter = 绿色(打开) + 4. 再次点击「运行」 + 5. 系统从第 N 帧重新追踪 + +修好了: + Fast Muter = 红色(关闭) + → 保存最终工作流模板 +``` + +--- + +## 常见问题速查 + +| 问题 | 排查方向 | +|------|---------| +| 节点呈红色/无法创建 | 节点包未安装或加载失败,检查 ComfyUI 启动日志 | +| SAM2 节点报错显存不足 | 换 `sam2_hiera_tiny.pt`,或降低视频分辨率,或启用 fp16 | +| 追踪结果全黑/全白 | 检查 `initial_mask` 是否正确传入;检查坐标格式(0~1 vs 像素) | +| Grounding DINO 无检测结果 | 降低 `threshold`,或简化 prompt(如只写 `"person"`) | +| 修正后重新追踪无变化 | 确认 `Fast Muter` 已启用(绿色),且修正 mask 正确连入 Video Predictor | +| 视频输出帧率不对 | 在 `Load Video` 和 `VideoCombine` 中统一设置 fps 参数 |