Files
Pre_Seg_Server/doc/01-purpose-and-word-summary.md
admin afcddfaeb9 feat: 完善分割工作区导入导出与管理流程
- 新增基于 JWT 当前用户的登录恢复、角色权限、用户管理、审计日志和演示出厂重置后台接口与前端管理页。

- 重串 GT_label 导出和 GT Mask 导入逻辑:导出保留类别真实 maskid,导入仅接受灰度或 RGB 等通道 maskid 图,支持未知 maskid 策略、尺寸最近邻拉伸和导入预览。

- 统一分割结果导出体验:默认当前帧,按项目抽帧顺序和 XhXXmXXsXXXms 时间戳命名 ZIP 与图片,补齐 GT/Pro/Mix/分开 Mask 输出和映射 JSON。

- 调整工作区左侧工具栏:移除创建点/线段入口,新增画笔、橡皮擦及尺寸控制,并按绘制、布尔、导入/AI 工具分组分隔。

- 扩展 Canvas 编辑能力:画笔按语义分类绘制并可自动并入连通选中 mask,橡皮擦对选中区域扣除,优化布尔操作、选区、撤销重做和保存状态联动。

- 优化自动传播时间轴显示:同一蓝色系按传播新旧递进变暗,老传播记录达到阈值后统一旧记录色,并维护范围选择与清空后的历史显示。

- 将 AI 智能分割入口替换为更明确的 AI 元素图标,并同步侧栏、工作区和 AI 页面入口表现。

- 完善模板分类、maskid 工具函数、分类树联动、遮罩透明度、边缘平滑和传播链同步相关前端状态。

- 扩展后端项目、媒体、任务、Dashboard、模板和传播 runner 的用户隔离、任务控制、进度事件与兼容处理。

- 补充前后端测试,覆盖用户管理、GT_label 往返导入导出、GT Mask 校验和预览、画笔/橡皮擦、时间轴传播历史、导出范围、WebSocket 与 API 封装。

- 更新 AGENTS、README 和 doc 文档,记录当前接口契约、实现状态、测试计划、安装说明和 maskid/GT_label 规则。
2026-05-03 03:52:32 +08:00

6.0 KiB
Raw Blame History

目的与 Word 方案摘要

为什么要做这个系统

Word 文档《语义分割系统构建方案.docx》的核心目标是建设一个面向视频和连续帧的智能语义分割标注系统解决传统标注工具在以下场景中的痛点

  • 视频或连续帧数量大,逐帧人工画 mask 成本高。
  • 高分辨率图像上同时存在底图、点、框、多边形和遮罩DOM 渲染难以支撑重交互。
  • AI 分割需要低延迟点选/框选反馈,普通 REST 往返在密集交互场景下体验较差。
  • 语义分割要求一个像素只能归属一个类别因此需要模板、颜色、z-index 和类别优先级来解决遮罩重叠。
  • 历史 GT mask 如果只是作为静态像素图层叠加后续修改不灵活Word 方案希望把 mask 降维成可编辑的点区域。

所以这个系统的业务目的不是单纯播放视频,而是把“视频/DICOM 数据接入、拆帧、AI 辅助分割、语义分类、标注导出”串成一个工作台。

Word 中的目标架构

Word 方案描述的理想系统包含:

  • React/Vue + Konva 的高性能 Canvas 工作台。
  • FastAPI 后端,使用 WebSocket 处理实时交互与任务进度。
  • Celery + Redis 处理视频拆帧等长任务。
  • FFmpeg/OpenCV 解析视频pydicom 解析医学影像。
  • 本地 CUDA 上的 SAM 推理;当前产品实现启用可选 SAM 2.1 tiny/small/base+/largeSAM 3 因没有文本提示入口而暂时禁用。
  • GT mask 导入后通过距离变换、骨架提取、聚类等算法降维为点区域。
  • 模板库管理分类、颜色和 z-index用于语义分割遮罩重叠裁决。
  • PostgreSQL 存储项目、帧、模板和点区域数据。

当前代码已落地的部分

目标 当前代码状态 依据
React 前端工作台 已落地 src/App.tsxsrc/components/*.tsx
Konva Canvas 已落地 CanvasArea.tsxAISegmentation.tsx 使用 react-konva
FastAPI 后端 已落地 backend/main.py
PostgreSQL ORM 已落地 backend/database.pybackend/models.py
MinIO 对象存储 已落地 backend/minio_client.py
Redis 连接 已落地 用于 Celery broker/result backend并通过 seg:progress pub/sub 转发任务进度
视频拆帧 已落地 backend/services/frame_parser.pybackend/routers/media.py
DICOM 批量导入 部分落地 上传和解析存在,项目级体验还需完善
WebSocket 进度 已落地 拆帧进度写入任务表后发布到 Redis seg:progressFastAPI 广播到 /ws/progress
SAM 推理 部分落地 当前产品入口启用 SAM 2.1 tiny/small/base+/large 和真实 GPU/SAM2.1 状态接口SAM 2.1 已接 point/box/interactive 和 video predictor 片段传播。SAM 3 桥接源码保留,但前端入口和后端 registry 已禁用
模板库 部分落地 分类、颜色、maskid 和拖拽排序能存储和编辑右侧语义分类树也可拖拽调整内部覆盖顺序PNG mask 导出时会按内部优先级做语义融合裁决,前端预览裁决尚未落地
标注持久化 部分落地 后端有 Annotation前端已接入新增、回显、分类更新、传播链前后帧同目标同步换类、当前帧删除、手工绘制、GT mask 导入、seed point 编辑、polygon 顶点拖动/删除、边中点插点和多 polygon 子区域编辑;复杂洞结构编辑未落地
COCO / Mask 导出 已落地基础能力 backend/routers/export.pyCOCO JSON、兼容 PNG mask ZIP 和统一分割结果 ZIP 均已接入;统一 ZIP 包含 maskid/GT 像素值映射、原始图片、按帧/类别合并的分开 mask、GT_label 黑白图、Pro_label 彩色图和 Mix_label 原图叠加图GT_label 像素值使用类别真实 maskid缺失 maskid 的旧标注才补下一个可用正整数

当前代码尚未落地的目标

  • SAM 3sam3_engine.pysam3_external_worker.pysetup_sam3_env.sh 作为历史实现保留;由于当前系统不给文本提示,前端不再展示 SAM 3后端 registry 也不暴露 sam3。官方没有 SAM 3 tiny/small 权重,当前可选最小真实 SAM 权重仍是 SAM 2.1 tiny。
  • Celery 异步任务队列:已注册 Celery app 和拆帧 worker task/api/media/parse 会创建任务表记录并入队。
  • GT mask 导入:当前已支持二值 mask、灰度/16-bit GT_label 图和 RGB 三通道完全相同的 [X,X,X] maskid 图导入,后端会按 maskid 拆分区域,生成 polygon 标注和距离变换 seed point超出现有类别的 maskid 可舍弃或导入为未定义类别普通彩色类别图会被拒绝尺寸不一致会自动最近邻拉伸到当前帧骨架提取、HDBSCAN 和更复杂的模板自动映射尚未实现。
  • Mask 到点区域的拓扑降维:当前完成 distance transform seed point 和前端 seed point 拖拽编辑骨架提取、HDBSCAN 等增强尚未实现。
  • 类别优先级融合PNG mask 导出时已按内部优先级生成语义融合 mask前端裁决预览尚未实现。
  • 撤销/重做:当前已有全局 mask 历史栈。
  • 保存状态按钮:工作区按钮按待保存数量显示“保存 X 个改动”或“已全部保存”,并调用 POST /api/ai/annotate 保存当前未归档 mask通过 PATCH /api/ai/annotations/{id} 更新 dirty mask。

结论

当前项目已经从 UI 原型推进到“可上传、可异步拆帧、可取消/重试任务、可查看失败详情、可实时查看任务进度、可浏览项目帧、可维护模板、可手工绘制、可逐点编辑 polygon、可边中点插点、可多 polygon 子区域编辑、可区域合并/去除、可用可选 SAM 2.1 做点/框 AI 推理、可对点/框 prompt 做裁剪推理和背景过滤、可用 SAM 2.1 进行视频片段传播、可导入多类别 GT mask、可编辑 seed point、可保存标注、可导出 COCO/语义 mask ZIP、可查看 Dashboard 后端概览”的全栈雏形。下一阶段最重要的是继续补齐复杂洞结构编辑、GT mask 骨架/聚类增强和传播任务异步化。