Files
Pre_Seg_Server/doc/09-test-plan.md
admin 5ab4602535 feat: 完善视频传播、标注编辑和拆帧闭环
- 接入 SAM2 视频传播能力:新增 /api/ai/propagate,支持用当前帧 mask/polygon/bbox 作为 seed,通过 SAM2 video predictor 向前、向后或双向传播,并可保存为真实 annotation。
- 接入 SAM3 video tracker:通过独立 Python 3.12 external worker 调用 SAM3 video predictor/tracker,使用本地 checkpoint 与 bbox seed 执行视频级跟踪,并在模型状态中标记 video_track 能力。
- 完善 SAM 模型分发:sam_registry 按 model_id 明确区分 sam2 propagation 与 sam3 video_track,避免两个模型链路混用。
- 打通前端“传播片段”:VideoWorkspace 使用当前选中 mask 和当前 AI 模型调用后端传播接口,传播结果回写并刷新工作区已保存标注。
- 增强 SAM3 本地 checkpoint 配置:新增 sam3_checkpoint_path 配置和 .env.example 示例,状态检查改为基于本地 checkpoint/独立环境/模型包可用性。
- 完善视频拆帧参数:/api/media/parse 支持 parse_fps、max_frames、target_width,后端任务保存帧时间戳、源帧号和 frame_sequence 元数据。
- 增加运行时 schema 兼容处理:启动时为旧 frames 表补充 timestamp_ms 和 source_frame_number 列,避免旧库升级后缺字段。
- 强化 Canvas 标注编辑:补齐多边形闭合、点工具、顶点拖拽、边中点插入、Delete/Backspace 删除、区域合并和重叠去除等交互。
- 增强语义分类联动:选中 mask 后可通过右侧语义分类树更新标签、颜色和 class metadata,并同步到保存/导出链路。
- 增加关键帧时间轴体验:FrameTimeline 显示具体时间信息,并支持键盘左右方向键切换关键帧。
- 完善 AI 交互分割参数:前端保留正向点、反向点、框选和 interactive prompt 的调用状态,支持 SAM2 细化候选区域与 SAM3 bbox 入口。
- 扩展后端/前端 API 类型:新增 propagateMasks、传播请求/响应 schema,并补齐 annotation、导出、模型状态和任务接口的测试覆盖。
- 更新项目文档:同步 README、AGENTS、接口契约、需求冻结、设计冻结、前端元素审计、实施计划和测试计划,标明真实功能边界与剩余风险。
- 增加测试覆盖:补充 SAM2/SAM3 传播、SAM3 状态、媒体拆帧参数、Canvas 编辑、语义标签切换、时间轴、工作区传播和 API 合约测试。
- 加强仓库安全边界:将 sam3权重/ 加入 .gitignore,避免本地模型权重被误提交。

验证:npm run test:run;pytest backend/tests;npm run lint;npm run build;python -m py_compile;git diff --check。
2026-05-01 20:27:33 +08:00

9.0 KiB
Raw Blame History

当前测试计划

本文档把 doc/07-current-requirements-freeze.md 中的冻结需求映射到测试。测试目标是覆盖当前真实行为和明确占位行为。

测试分层

层级 工具 覆盖范围
前端单元/组件 Vitest + Testing Library API 封装、store、组件交互、Mock/UI-only 状态
后端路由 pytest + FastAPI TestClient Auth、Projects、Templates、AI、Export、Media 的接口契约
静态契约 TypeScript / py_compile 类型和 Python 语法

覆盖矩阵

需求 测试文件 覆盖点
R1 登录与会话 src/components/Login.test.tsx, backend/tests/test_auth.py 成功登录、失败提示、后端 401
R2 项目管理 src/lib/api.test.ts, backend/tests/test_projects.py 前端字段映射、PATCH 更新、后端 CRUD、帧列表
R3 媒体上传与拆帧 backend/tests/test_media.py, backend/tests/test_tasks.py 扩展名校验、自动建项目、关联项目、创建异步任务、标准帧序列参数、帧时间戳/源帧号、任务序列元数据、worker 注册帧、取消任务、重试任务、取消后 worker 停止
R4 工作区与帧浏览 src/components/VideoWorkspace.test.tsx, src/components/FrameTimeline.test.tsx 加载帧、无帧触发解析、缩略图/range/左右方向键切帧、播放、按项目 FPS 显示当前/总时长
R5 工具栏 src/components/ToolsPalette.test.tsx, src/components/CanvasArea.test.tsx, src/store/useStore.test.ts 工具切换、AI 跳转、矩形/圆/线/点/多边形手工 mask 绘制、点工具在已有 mask 上落点、多边形 Enter/首节点闭合、polygon 顶点拖动/删除、整块 mask 删除、区域合并/去除、内含去除 hole 渲染、合并模式隐藏编辑手柄、撤销/重做历史栈
R6 AI 推理 src/lib/api.test.ts, src/components/CanvasArea.test.tsx, src/components/AISegmentation.test.tsx, src/components/VideoWorkspace.test.tsx, src/components/ModelStatusBadge.test.tsx, backend/tests/test_ai.py, backend/tests/test_sam3_engine.py 点/框/interactive/semantic 契约、SAM 2 框选后正负点细化同一候选 mask、SAM 2 视频传播、SAM 3 语义文本前端执行路径、SAM 3 工作区框选、SAM 3 video tracker 外部桥接、SAM 3 点交互不支持提示、空文本/空结果反馈、模型选择、GPU/SAM 状态、SAM 3 外部 worker 桥接、AI 参数 options、局部裁剪推理、背景过滤、状态徽标、坐标归一化、正负点 labels、polygons 转 path、后端 fake registry
R7 标注保存 src/components/VideoWorkspace.test.tsx, src/components/CanvasArea.test.tsx, src/lib/api.test.ts, backend/tests/test_ai.py 保存标注、加载回显、更新 dirty 标注、清空删除已保存标注、GT mask 多类别导入、seed point 回显/归一化、项目不存在、帧不存在
R8 模板库 src/components/TemplateRegistry.test.tsx, src/lib/api.test.ts, backend/tests/test_templates.py 前端模板加载/新建/编辑/删除、JSON 分类导入、mapping_rules 解包/打包、后端模板 CRUD
R9 本体检查面板 src/components/OntologyInspector.test.tsx, src/components/CanvasArea.test.tsx, src/store/useStore.test.ts 模板选择、分类展示、具体分类选择、Canvas 选区同步、点击分类给已选 mask 换标签、自定义分类本地添加
R10 Dashboard 与 WebSocket src/lib/api.test.ts, src/lib/websocket.test.ts, src/components/Dashboard.test.tsx, backend/tests/test_dashboard.py, backend/tests/test_main.py, backend/tests/test_progress_events.py, backend/tests/test_tasks.py 后端概览接口、任务表驱动队列、任务取消/重试/详情、cancelled 事件、Redis 进度事件 payload/发布、地址推导、消息订阅、队列更新、heartbeat
R11 导出 src/components/VideoWorkspace.test.tsx, src/lib/api.test.ts, backend/tests/test_export.py COCO/PNG 按钮下载、导出前自动保存、导出路径、JSON 结构、mask ZIP、zIndex 语义融合
R12 配置 src/lib/config.test.ts env 优先、hostname 推导、WS 推导
R13 文档与测试 doc/09-test-plan.md 测试覆盖矩阵

逐功能点追踪

需求 功能点 对应测试 当前状态
R1 登录页、默认开发凭证、token 写入、失败提示、后端 401 Login.test.tsx, test_auth.py 已覆盖
R2 项目列表/创建/选择、视频导入、DICOM 导入、后端项目和帧 CRUD ProjectLibrary.test.tsx, api.test.ts, test_projects.py 已覆盖
R3 文件类型校验、自动/指定项目上传、视频/DICOM 拆帧任务、parse_fps/max_frames/target_width、标准帧序列 metadata、任务查询、取消、重试、worker 取消停止 test_media.py, test_tasks.py 已覆盖
R4 工作区加载帧、无帧自动解析、Canvas 底图、缩略图/range/左右方向键切帧、播放、按 FPS 显示时间 VideoWorkspace.test.tsx, FrameTimeline.test.tsx, CanvasArea.test.tsx 已覆盖
R5 工具切换、AI 跳转、矩形/圆/线/点/多边形绘制、已有 mask 上继续绘制 ToolsPalette.test.tsx, CanvasArea.test.tsx 已覆盖
R5 顶点编辑、顶点删除、整块删除、撤销/重做、区域合并、区域去除、hole even-odd 渲染 CanvasArea.test.tsx, useStore.test.ts 已覆盖
R6 SAM 2 点/框/interactive、SAM 2 视频传播、SAM 3 semantic、SAM 3 box、SAM 3 video tracker、SAM 3 不支持点交互时的前端反馈、模型选择、GPU/模型状态、参数 options、polygons 转 mask api.test.ts, CanvasArea.test.tsx, AISegmentation.test.tsx, VideoWorkspace.test.tsx, ModelStatusBadge.test.tsx, test_ai.py, test_sam3_engine.py 已覆盖
R7 保存、查询、更新、删除标注、工作区回显、清空已保存标注、GT mask 导入和 seed point 回写 VideoWorkspace.test.tsx, CanvasArea.test.tsx, api.test.ts, test_ai.py 已覆盖
R8 模板加载、新建、编辑、删除、JSON 分类导入、mapping_rules 映射、后端 CRUD TemplateRegistry.test.tsx, api.test.ts, test_templates.py 已覆盖
R9 模板选择、分类展示、分类选择、已选 mask 换标签、自定义本地分类、占位状态 OntologyInspector.test.tsx, CanvasArea.test.tsx, useStore.test.ts 已覆盖
R10 Dashboard 概览、队列、活动日志、WebSocket progress/complete/error/status/cancelled、取消/重试/详情、heartbeat Dashboard.test.tsx, websocket.test.ts, test_dashboard.py, test_main.py, test_progress_events.py, test_tasks.py 已覆盖
R11 COCO/PNG ZIP 导出、导出前保存、路径和 JSON/ZIP 结构、zIndex 融合 VideoWorkspace.test.tsx, api.test.ts, test_export.py 已覆盖
R12 API/WS 地址 env 优先和 hostname 推导 config.test.ts 已覆盖
R13 文档测试矩阵与功能点追踪 doc/09-test-plan.md 已覆盖

本轮补齐记录

  • R5补充 CanvasArea.test.tsx 中圆形和线段手工绘制测试,明确验证 metadata、segmentation、bbox/area 和草稿状态。
  • R6补充 AISegmentation.test.tsx 中 SAM 3 semantic 文本推理测试,验证前端传参和返回 mask 绑定当前语义类别。
  • R6补充 SAM 3 空文本、空结果和工作区点交互不支持提示测试,避免前端静默失败。
  • R6补充 SAM 3 工作区 box prompt 测试和外部 worker box prompt 测试,验证官方 add_geometric_prompt() 正框链路。
  • R6补充 POST /api/ai/propagate 后端测试,验证 seed mask 传播结果会保存为后续帧标注并保留 class 元数据。
  • R6补充 propagateMasks() API 封装和 VideoWorkspace 传播按钮测试,验证当前选中区域会发送到后端视频传播接口。
  • R6补充 SAM 3 external video tracker 请求测试验证主后端会把帧目录、源帧索引、seed bbox 和方向传给独立 Python helper。
  • R3补充 parseMedia() 查询参数和后端拆帧任务 payload 测试,验证 parse_fpsmax_framestarget_width 会进入任务。
  • R3补充 worker 注册标准帧序列测试,验证帧 timestamp_mssource_frame_numberresult.frame_sequence 元数据。
  • R8补充 TemplateRegistry.test.tsx 中模板编辑、删除测试,验证前端调用真实 API 封装并更新全局 store。
  • R9补充 Canvas 选中 mask id 全局同步、本体树点击分类给已选 mask 换标签的测试,验证已保存 mask 会进入 dirty 状态。

运行命令

npm run test
npm run test:run
npm run lint
npm run build

pip install -r backend/requirements-dev.txt
pytest backend/tests
python -m py_compile backend/routers/ai.py backend/routers/templates.py backend/schemas.py

当前不做的测试

  • 不启动真实 PostgreSQL、MinIO、Redis 或 SAM 模型。
  • 不做真实视频大文件拆帧性能测试。
  • 不用浏览器 E2E 验证视觉细节。
  • 不把当前明确 Mock/UI-only 的按钮当成真实业务成功路径测试。