# 后续实施建议 目标是把当前“能看、能上传、能拆帧”的系统推进到“能真实完成标注闭环”的系统。 ## 阶段 1:先修接口契约(已完成基础对齐) 优先级最高。AI 点/框推理和 COCO 导出的基础契约已经按当前代码完成对齐。 已完成: 1. `src/lib/api.ts` 的 `updateProject()` 已改为 `PATCH`。 2. `exportCoco()` 路径已改为 `/api/export/{projectId}/coco`。 3. Canvas 调 AI 时已使用当前帧真实 `frame.id` 作为 `image_id`。 4. Canvas 点/框坐标已转成后端需要的归一化坐标。 5. 后端 `polygons` 已转成前端可渲染的 Konva path。 剩余边界: 1. SAM 3 真实推理需要独立满足官方 Python 3.12+、PyTorch 2.7+、CUDA 12.6+ 环境。 2. 标注删除/更新接口已打通基础能力;逐点几何编辑器尚未实现。 ## 阶段 2:打通标注保存(已完成基础闭环) 当前工作区可将未保存 mask 写入后端标注表,并在加载项目帧后回显。 已完成: 1. 前端根据 `Mask.segmentation` 构造后端需要的 normalized `mask_data.polygons`。 2. 用户点击“结构化归档保存”后,未保存 mask 调用 `POST /api/ai/annotate`,dirty mask 调用 `PATCH /api/ai/annotations/{annotation_id}`。 3. 后端保存或更新 `project_id`、`frame_id`、`template_id`、`mask_data`、`bbox`;具体分类写入 `mask_data.class`。 4. 工作区加载帧后调用 `GET /api/ai/annotations` 回显已保存标注。 5. 工作区“清空遮罩”调用 `DELETE /api/ai/annotations/{annotation_id}` 删除当前帧已保存标注。 剩余建议: 1. 加入保存冲突处理和批量保存错误提示。 2. 增加逐点几何编辑器,让已保存 mask 的 polygon 本身可以被修改后 PATCH。 ## 阶段 3:接入导出按钮(已完成 COCO JSON) 当前工作区“导出 JSON 标注集”会先保存未归档 mask,再调用 COCO 导出接口。 建议: 1. 增加“导出 PNG Mask ZIP”按钮,调用 `/api/export/{projectId}/masks`。 2. 无标注时给出更明确的空导出提示。 ## 阶段 4:替换 Dashboard mock 当前 Dashboard 已通过 `GET /api/dashboard/overview` 读取后端聚合快照,不再使用硬编码初始统计、队列或活动日志。 已完成: - 聚合项目、帧、标注、模板数量和主机 load average。 - 按 `processing_tasks` queued/running 任务生成解析队列。 - 按最近任务、项目、标注、模板记录生成活动流。 剩余建议: 1. 为任务增加取消、重试和失败详情 UI。 2. 为 Dashboard 增加任务历史筛选和失败详情入口。 ## 阶段 5:异步拆帧和进度 Word 方案中提到 Celery + Redis。当前已经有 Celery app、worker task 和 `processing_tasks` 表。 已完成: 1. 新建 Celery app。 2. `POST /api/media/parse` 只创建任务并立即返回 task id。 3. worker 执行 FFmpeg/OpenCV/pydicom。 4. worker 写 PostgreSQL 任务进度。 5. worker 发布 Redis `seg:progress`,FastAPI 广播到 `/ws/progress`。 剩余建议: 1. 为任务增加取消、重试和失败详情接口。 2. 前端 Dashboard 保留轮询兜底,并补充失败详情 UI。 Dashboard 的解析队列现在已经从“项目状态派生”升级为任务表驱动,实时推送也已通过 Redis/WebSocket 打通;剩余重点是任务控制。 ## 阶段 6:GT 导入与点区域 这是 Word 方案中最复杂的部分,当前完全未实现。 建议拆成小步: 1. 先支持上传二值/多类别 mask。 2. 后端按类别提取 connected components。 3. 用 OpenCV distance transform 找正向点。 4. 暂时不做骨架/HDBSCAN,先生成最小可用点集。 5. 前端以可拖拽点显示并保存。 6. 后续再做骨架和聚类增强。 ## 阶段 7:模板优先级融合 当前模板有 z-index,但没有真正用于语义冲突裁决。 建议: 1. 标注保存时记录 template class id / name / zIndex。 2. 导出 mask 时按 zIndex 从低到高覆盖。 3. 同类 mask 做 union。 4. 跨类重叠由高 zIndex 覆盖低 zIndex。 这一步完成后,系统才真正符合“语义分割一个像素一个类别”的目标。 ## 阶段 8:清理 UI 文案与 Mock 建议统一这些文案和真实能力: - SAM/GPU 状态已改为 `GET /api/ai/models/status` 驱动。 - 撤销/重做按钮接历史栈,否则隐藏。 - “重新提取内侧中轴树骨架”接真实接口,否则标为未实现。 - AI 独立页不要固定 Unsplash 图,应从当前项目帧或上传文件进入。