Files
Pre_Seg_Server/doc/02-current-implementation-map.md
admin 689a9ba283 feat: 建立 SAM2 标注闭环基线
- 打通工作区真实标注闭环:支持手工多边形、矩形、圆形、点区域和线段生成 mask,并可保存、回显、更新和删除后端 annotation。

- 增强 polygon 编辑器:支持顶点拖动、顶点删除、边中点插入、多 polygon 子区域选择编辑,以及区域合并和区域去除。

- 接入 GT mask 导入:后端支持二值/多类别 mask 拆分、contour 转 polygon、distance transform seed point,前端支持导入、回显和 seed point 拖动编辑。

- 完善导出能力:COCO JSON 导出对齐前端,PNG mask ZIP 同时包含单标注 mask、按 zIndex 融合的 semantic_frame 和 semantic_classes.json。

- 打通异步任务管理:新增任务取消、重试、失败详情接口与 Dashboard 控件,worker 支持取消状态检查并通过 Redis/WebSocket 推送 cancelled 事件。

- 对接 Dashboard 后端数据:概览统计、解析队列和实时流转记录从 FastAPI 聚合接口与 WebSocket 更新。

- 增强 AI 推理参数:前端发送 crop_to_prompt、auto_filter_background 和 min_score,后端支持点/框 prompt 局部裁剪推理、结果回映射和负向点/低分过滤。

- 接入 SAM3 基础设施:新增独立 Python 3.12 sam3 环境安装脚本、外部 worker helper、后端桥接和真实 Python/CUDA/包/HF checkpoint access 状态检测。

- 保留 SAM3 授权边界:当前官方 facebook/sam3 gated 权重未授权时状态接口会返回不可用,不伪装成可推理。

- 增强前端状态管理:新增 mask undo/redo 历史栈、AI 模型选择状态、保存状态 dirty/draft/saved 流转和项目状态归一化。

- 更新前端 API 封装:补充 annotation CRUD、GT mask import、mask ZIP export、task cancel/retry/detail、AI runtime status 和 prediction options。

- 更新 UI 控件:ToolsPalette、AISegmentation、VideoWorkspace 和 CanvasArea 接入真实操作、导入导出、撤销重做、任务控制和模型状态。

- 新增 polygon-clipping 依赖,用于前端区域 union/difference 几何运算。

- 完善后端 schemas/status/progress:补充 AI 模型外部状态字段、任务 cancelled 状态和进度事件 payload。

- 补充测试覆盖:新增后端任务控制、SAM3 桥接、GT mask、导出融合、AI options 测试;补充前端 Canvas、Dashboard、VideoWorkspace、ToolsPalette、API 和 store 测试。

- 更新 README、AGENTS 和 doc 文档:冻结当前需求/设计/测试计划,标注真实功能、剩余 Mock、SAM3 授权边界和后续实施顺序。
2026-05-01 15:26:25 +08:00

4.8 KiB
Raw Blame History

当前实现地图

运行入口

前端入口

  • React 挂载:src/main.tsx
  • 根组件:src/App.tsx
  • 前端服务:server.ts
  • 默认访问:http://localhost:3000

server.ts 的角色比较特殊:它既负责在开发模式下创建 Vite middleware也在生产模式下服务 dist/。同时它还保留了旧版 mock API/api/login/api/projects/api/templates。当前前端业务 API 主要不走这些 mock而是走 src/lib/api.ts 指向的 FastAPI。

后端入口

  • FastAPI 应用:backend/main.py
  • 默认访问:http://localhost:8000
  • API 文档:http://localhost:8000/docs
  • 健康检查:GET /health

后端启动时会通过 lifespan 执行:

  • 创建数据库表。
  • 检查 MinIO bucket。
  • 测试 Redis。
  • Seed 默认模板。
  • 如果存在 Data_MyVideo_1.mp4,创建默认项目并拆前 100 帧。

前端模块切换

App.tsx 使用 Zustand 中的 activeModule 做模块切换,没有使用路由库。

activeModule 组件 页面
dashboard Dashboard 系统概况
projects ProjectLibrary 项目库
workspace VideoWorkspace 分割工作区
ai AISegmentation AI 智能分割页
templates TemplateRegistry 模板库

未登录时,App.tsx 直接渲染 Login

全局状态

全局状态在 src/store/useStore.ts 中,主要包括:

  • 登录状态:isAuthenticatedtoken
  • 项目:projectscurrentProject
  • 工作区:activeModuleactiveToolframescurrentFrameIndex
  • 标注与 maskannotationsmasks
  • 模板:templatesactiveTemplateId
  • UIisLoadingerror

当前状态管理是前端内存状态,没有持久化到 localStorage除了登录 token。

数据流

登录

  1. Login.tsx 调用 login()
  2. src/lib/api.ts 请求 POST /api/auth/login
  3. FastAPI backend/routers/auth.py 校验 admin / 123456
  4. 前端把返回 token 写入 localStorage。

项目与拆帧

  1. ProjectLibrary.tsx 调用 getProjects() 获取项目。
  2. 上传视频时先 createProject(),再 uploadMedia(),再 parseMedia()
  3. 后端 media.py 把原始文件上传到 MinIO。
  4. parseMedia() 创建 processing_tasks 记录并投递 Celery worker。
  5. Celery worker 下载 MinIO 文件,调用 frame_parser.py 拆帧。
  6. worker 把拆出的帧重新上传 MinIO写入 frames 表,并更新任务状态。
  7. 工作区通过 GET /api/tasks/{id} 等待任务完成,再通过 GET /api/projects/{id}/frames 获取预签名图片 URL。
  8. Dashboard 可通过 POST /api/tasks/{id}/cancel 取消 queued/running 任务,通过 POST /api/tasks/{id}/retry 重试 failed/cancelled 任务,并用 GET /api/tasks/{id} 查看失败详情。

工作区浏览

  1. VideoWorkspace.tsx 根据 currentProject.id 加载帧。
  2. CanvasArea.tsx 用当前帧 URL 加载底图。
  3. FrameTimeline.tsx 显示缩略图和当前帧索引。
  4. 播放按钮会推进 currentFrameIndex,从而更新画布底图。

模板管理

  1. TemplateRegistry.tsx 调用模板 API。
  2. 后端 templates.pyclassesrules 打包进 mapping_rules JSON 字段。
  3. OntologyInspector.tsx 读取全局 templatesactiveTemplateId 展示分类树。

后端数据模型

模型 用途
Project projects 项目元数据包含视频路径、缩略图、状态、fps
Frame frames 拆帧后的图片记录
Template templates 模板、本体类别、颜色、z-index、mapping_rules
Annotation annotations 标注数据、点、bbox、mask_data
Mask masks mask 文件元数据

当前主要风险点

  • 前端 API/WS 地址虽然已支持环境变量和 hostname 推导,但部署时仍需要确认浏览器可访问 :8000 后端。
  • AI 语义文本提示在选择 SAM 3 且运行环境满足官方依赖、并具备 Hugging Face gated 权重访问时走 SAM 3当前状态接口会分别暴露外部 Python 环境、CUDA、包导入和 checkpoint access 是否满足。
  • 工作区顶部“导出 JSON 标注集”“导出 PNG Mask ZIP”“导入 GT Mask”和“结构化归档保存”已接入导出、GT 多类别导入、seed point 回显/编辑、标注新增和 dirty 标注更新清空当前帧遮罩会删除对应后端标注。手工绘制、polygon 顶点拖动/删除、区域合并/去除和撤销重做已经落到前端 mask 数据结构。
  • Dashboard 初始统计、队列和活动日志来自后端聚合接口;解析队列来自 processing_tasksworker 进度通过 Redis seg:progress 转发到 WebSocket。任务取消、重试和失败详情已接入前后端。
  • 后端路由大多未做真实鉴权。