Files
HSAP/docs/DEVELOPMENT_ROADMAP.md
Chengfang Lu e72bc061c5 feat: HSAP platform v2 — modular navigation, quality review, audit log, world model simulation
Major changes:
- New frontend (platform/web/): Vite + React 18 + TypeScript + Tailwind
- 4-module navigation: 数据送标 / 模型管理 / 车队管理 / 系统管理
- Data catalog with charts (DMS/ADAS/Lane 3-tab view)
- Quality review workflow (标注质检): Good/Fine/Bad scoring with auto-advance
- Audit enhancements: batch operations, rejection categories, Feishu notifications
- Operation audit log (操作日志)
- World model simulation studio (仿真工坊)
- Dataset version management with snapshots and diff
- ADAS 7-class dataset integration (138K images organized + compressed)
- User management with Feishu integration and pagination
- CRUD/search/filter on all pages, card layout redesign
- PIL-optimized image overlay rendering
- Auto-snapshot on build, in_review workflow stage
- Removed embedded algorithm code (now in workspace)
2026-06-03 11:40:21 +08:00

262 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HSAP 开发计划2026 Q2
本文是 HSAPHuaxu Sentinel Active Safety Platform的**分期开发路线图**,与现有文档对齐:
- 标注验收:[PHASE_ROLLOUT_DMS.md](./PHASE_ROLLOUT_DMS.md)
- 送标 SOP[LABELING_SOP.md](./LABELING_SOP.md)
- 缺口跟踪:[QA_GAP_REPORT.md](./QA_GAP_REPORT.md)、[DATA_LAKE_GAP.md](./DATA_LAKE_GAP.md)
- 本地开发:[DEVELOPMENT_GUIDE.md](./DEVELOPMENT_GUIDE.md)
---
## 1. 架构原则(维持当前技术栈)
**结论:现阶段不引入 RabbitMQ / KafkaDB + thread/worker + Redis 足够。**
| 层级 | 选型 | 用途 |
|------|------|------|
| API | FastAPI + Label Studio Editor 壳 | 送标 / 标注 / 审核 / 训练 / 车队 |
| 持久化 | PostgreSQL生产/ SQLite本机 | Job、Campaign、用户、审批 |
| 异步 Job | `thread`(本机)/ `worker`Docker | 导出、build、训练、入湖分析 |
| Redis | List 队列 + Pub/Sub + 标注锁 | 仅 worker 模式强依赖;本机可跳过 |
| 训练/数据 | `as.py` + DMS/Lane registry | inbox → pack → train |
```mermaid
flowchart TB
subgraph dev [本机开发 thread 模式]
RunLocal[run_local.sh]
ThreadExec[daemon Thread 跑 Job]
RunLocal --> ThreadExec
end
subgraph prod [生产 Docker worker 模式]
Platform[platform :8787]
RedisQ[Redis as:job_queue]
Worker[worker.py]
Platform -->|push_job| RedisQ
RedisQ -->|brpop| Worker
end
subgraph future [未来可选 触发条件见 §6]
MQ[RabbitMQ / Kafka]
MQ -.->|替换 Redis List| RedisQ
end
```
**环境对照**
| 场景 | 启动方式 | Job 执行 | Redis |
|------|----------|----------|-------|
| 本机快速开发 | `bash scripts/run_local.sh` | 进程内 thread | 可选(锁回退 memory |
| 联调 / 演示 | `docker compose up -d platform worker redis postgres` | 独立 worker | 必须 |
| 训练机 | 仅 `worker.py` + Redis | GPU 节点消费队列 | 必须 |
---
## 2. 阶段总览
| 阶段 | 时间盒 | 目标 | 退出标准 |
|------|--------|------|----------|
| **A** 标注闭环 | 12 周 | dam/addw/addw_face 画布→导出→入库可 E2E | P0+P1 清单全绿 |
| **B** 生产运行态 | 1 周 | Docker worker + Redis 稳定跑导出/训练 Job | smoke + Jobs 页成功 |
| **C** 数据入湖 | 2 周 | 批次台账、飞书、MinIO 主路径打通 | DATA_LAKE checklist AE |
| **D** 扩展任务 | 23 周 | forward / lane 画布 + 导出 | P2 清单 |
| **E** 体验与治理 | 持续 | 关键点 UX、审计、权限、文档 | 标注员可独立操作 |
| **F** 架构演进 | 按需 | MQ / 多 worker / 监控 | 见 §6 触发条件 |
---
## 3. 阶段 A标注闭环当前最高优先级
### A.1 已完成(代码侧)
- [x] `dms_pose.xml`face + 37 关键点)
- [x] `export_ls_to_yolo.py`detect 5 字段 / pose 116 字段)
- [x] `runner.py` 导出前转换 + `as.py build`
- [x] `batch_stage.py` 有 txt 才设 `returned`
- [x] `test_export_ls_to_yolo.py` 单元测试
- [x] `run_local.sh` / `wait_for_db.py` thread 模式跳过 Redis 等待
### A.2 待完成(验收)
| # | 任务 | 负责人建议 | 验收 |
|---|------|------------|------|
| A2.1 | inbox 放入样例图dam/addw_face 各 ≥3 张) | 数据/协调员 | `GET .../tasks` 非空 |
| A2.2 | 浏览器dam 检测框标注保存 | 标注员 | `labels/ls_annotations/*.json` |
| A2.3 | 浏览器addw_face 框 + 关键点保存 | 标注员 | JSON 含 `rectanglelabels` + `keypointlabels` |
| A2.4 | 导出 Job → `labels/train/*.txt` | 协调员 | dam 5 字段addw_face 116 字段 |
| A2.5 | 提交入库审核 → build 进 pack | 工程师 | 数据目录可见新 sources |
| A2.6 | 审核预览叠加框 + 关键点 | 审核员 | preview 缩略图正确 |
| A2.7 | 更新 QA_GAPexport 已对接) | 开发 | 文档与代码一致 |
**命令**
```bash
# 离线
python3 /home/chengfanglu/DATA/HSAP/datasets/dms/scripts/test_export_ls_to_yolo.py
# 本机平台
cd /home/chengfanglu/DATA/HSAP && bash scripts/run_local.sh
# API 冒烟(平台起来后)
bash /home/chengfanglu/DATA/HSAP/scripts/smoke_labeling_api.sh
```
### A.3 addw_face 专项增强可选A 通过后)
| 任务 | 说明 |
|------|------|
| 关键点语义名 | 在 `addw_face_37.yaml``display_name`(若有外协规范) |
| 标注进度 | 进度 API 增加「已标 kpt 数/37」 |
| 多脸策略 | 文档化 bbox-关键点分配规则;必要时 UI 约束单脸 |
---
## 4. 阶段 B生产运行态worker + Redis
### B.1 基础设施
```bash
cd /home/chengfanglu/DATA/HSAP
docker compose up -d postgres redis platform worker
# .env: AS_REDIS_PORT=6380 → run_local 已自动对齐
```
| 任务 | 说明 |
|------|------|
| B1.1 | 确认 `AS_JOB_EXECUTOR=worker` 在 compose 内生效 |
| B1.2 | 导出/训练 Job 仅 worker 消费platform 不阻塞 |
| B1.3 | `/api/v1/health``redis_connected=true` |
| B1.4 | 标注锁走 Redis多标注员并行时不抢标 |
### B.2 可观测性(轻量)
| 任务 | 说明 |
|------|------|
| B2.1 | Jobs 页failed Job 展示 `export_convert` / stderr 摘要 |
| B2.2 | `manifests/trace_log.jsonl` 关键 span 文档化 |
| B2.3 | worker 日志:`执行 Job job-xxx` 与 platform 对齐 |
### B.3 本机 vs Docker 文档
在 [DEVELOPMENT_GUIDE.md](./DEVELOPMENT_GUIDE.md) 增加一节:
- 日常改代码 → `run_local.sh`thread无 Redis
- 验证导出/训练链路 → `docker compose up worker`
- 禁止混用thread 模式提交的 Job 不会被 Docker worker 消费(同一 Redis 时可消费,但 DB 需一致)
---
## 5. 阶段 CE数据入湖与任务扩展
### C. 数据入湖(见 DATA_LAKE_GAP.md
- 批次台账 → 审批入湖 → inbox 出现在送标工作台
- 飞书多维表格同步(可选,`FEISHU_BITABLE_SYNC_ENABLED=0` 可关)
- MinIO staging`docker compose --profile minio up`
- 上传 ZIP → 分析 → promote inbox
### D. forward / laneP2
| 任务 | 文件/动作 |
|------|-----------|
| `forward_4cls.xml` / `forward_cls.xml` | 补 label_studio 模板 |
| `lane_ufld_mask.xml` + `export_ls_to_lane_gt.py` | **已实现**BrushLabels → PNG + train_gt.txt |
| registry profile `lane__lane_v1` | 导出 `lane_gt_txt` + `build lane` |
### E. 体验与治理
- 37 关键点侧栏分组Header 分块)
- 角色权限:`internal_labeler` / `labeler` / `reviewer` 回归
- 外协 ZIP`import-vendor` 与平台标注双轨说明([VENDOR_RETURN.md](./VENDOR_RETURN.md)
- 前端变更后:`bash scripts/build_hsap_ls_ui.sh` + 强刷
---
## 6. 阶段 F何时引入 MQ暂不实施
**当前不引入。** 满足以下 **任意 2 条** 时再立项:
1. Job 入队 > 10/s sustained或 Redis List 延迟明显
2. 需要优先级队列(训练插队、导出低优先级)
3. 需要死信队列 + 自动重试(现仅靠 Job 表 failed + 人工重跑)
4. 多机房 / 多 worker 池Redis 单点成为瓶颈
5. 消息审计与回放成为合规要求
**迁移策略(预留,不改 API**
- 保持 `enqueue_job` / `Job` 表不变
-`redis/bus.py``push_job` / `pop_job` 抽象为 `JobTransport` 接口
- 实现 `RedisListTransport`(现逻辑)与 `RabbitMQTransport`(新)
- 事件 Pub/Sub 可迁至 MQ fanout或保留 Redis
---
## 7. 里程碑与依赖
```mermaid
gantt
title HSAP 开发里程碑(示意)
dateFormat YYYY-MM-DD
section 标注闭环
A_inbox样例与浏览器E2E :a1, 2026-05-27, 7d
A_export_build验收 :a2, after a1, 5d
section 生产态
B_docker_worker稳定 :b1, after a2, 5d
section 入湖
C_批次台账与promote :c1, after a1, 14d
section 扩展
D_forward_lane :d1, after a2, 14d
```
**硬依赖**
- A 完成前:不启动 forward/lane 大改
- B 与 A 可并行Docker 环境给工程师,标注 E2E 给协调员
- C 依赖 A 至少 dam 一条链路通
---
## 8. 风险与对策
| 风险 | 对策 |
|------|------|
| inbox 无图tasks 为空 | A2.1 放样例PILOT_BATCH 文档 |
| 本机无 Redis误以为平台坏了 | 已改 thread 跳过等待;文档说明 |
| Redis 端口 6379 vs 6380 | `run_local.sh``.env` AS_REDIS_PORT |
| 37 点 UX 差、漏标 | maxUsages=1后续进度 KPI |
| 关键点顺序与历史 pack 不一致 | 严格 `addw_face_37.yaml`;导出单测 |
| thread 与 worker 混用同一 DB | 开发指南写明一种 Job 执行器 |
| QA_GAP 过时 | A2.7 同步更新 |
---
## 9. 近期两周行动清单(可执行)
**第 1 周**
1. 协调员dam/batch_0516、addw_face inbox 各放样例图
2. 标注员:各标 2 张,确认保存 JSON
3. 开发:`run_local.sh` 或 compose 起 platform跑通 export → build
4. 全员:勾选 [BROWSER_QA_CHECKLIST.md](./BROWSER_QA_CHECKLIST.md)
**第 2 周**
1. compose 起 worker + redis重复 export 验证 Job 在 worker 日志出现
2. addw_face 导出 txt 抽 1 条对照 `dms_v1/addw_face` 历史样本116 字段)
3. 提交入库审核 → 数据目录刷新
4. 更新 QA_GAP / PHASE_ROLLOUT 勾选状态
---
## 10. 文档维护
| 文档 | 更新时机 |
|------|----------|
| PHASE_ROLLOUT_DMS.md | 每完成一个 pilot 勾选 |
| QA_GAP_REPORT.md | export/ML/入湖状态变化时 |
| DEVELOPMENT_ROADMAP.md本文 | 阶段切换或 MQ 触发条件变化时 |
| LABELING_SOP.md | 标注流程或格式变更时 |
---
*版本2026-05-27 · 与关键点接入、thread/worker 架构讨论对齐*