Files
HSAP/docs/DMS_E2E_2IMG_TEST.md

282 lines
9.7 KiB
Markdown
Raw Permalink Normal View History

# DMS 2 图端到端测试手册(上下文备忘)
> 更新2026-06-16
> 用途:避免多轮对话丢失状态;记录 E2E 批次、脚本、已知问题与后续待测项。
---
## 1. 测试目标
验证 **QA 门禁完整链路**DMS / ADDW
```text
raw_pool → 开 Campaign 标注 → 提交质检 → 质检通过 → 导出 YOLO → 提交 build → 审核批准 → ingested进训练包
```
与已完成的 **Unified Ingest SDK**、**ADAS MOON-3D** smoke 并列,本手册专指 **2 张图 DMS 小批次 E2E**
---
## 2. 当前测试批次(已创建)
| 字段 | 值 |
|------|-----|
| project | `dms` |
| task | `addw`ADDW 分心检测4 类 bbox |
| batch | `e2e_2img_20260616` |
| pack入库目标 | `dms_v1``workflow.registry.yaml` active_packs |
| campaign_id | `59f7c8fd8402c072bbbf` |
| cvat_task_id | `7` |
| cvat_job_id | `7` |
| cvat_job_url | `http://127.0.0.1:8080/tasks/7/jobs/7` |
### 数据路径
```text
HSAP/datasets/dms/inbox/addw/e2e_2img_20260616/
images/train/
eye_open__001_snap_dam_0416_cloudy_5_109.jpg
eye_open__002_snap_dam_0522_smoke_phone_484.jpg
labels/ls_annotations/ # CVAT 同步后写入
labels/yolo/ # 同步时顺带写(可选)
batch.meta.yaml # stage 随流程推进更新
```
宿主机 inbox 目录为 **root 所有**docker 创建);标注/同步由 **hsap-platform 容器** 写入,属正常。
图片来源:从 `addw/20260525_pilot/images/train/` 复制前 2 张。
### 平台入口
- 标注画布:`http://127.0.0.1:8787/labeling/annotate/59f7c8fd8402c072bbbf`
- 标注进度:搜 `e2e_2img_20260616`
- 导出与入库:`/labeling/export`
- 审核队列:`/system/audit`
### 当前进度2026-06-16 实测)
| 项 | 状态 |
|----|------|
| 落盘 2 图 | ✅ |
| register-batch raw_pool | ✅ |
| open Campaign | ✅ `out_for_labeling` |
| CVAT 标注 + 同步 | ✅ API`saved=2, shapes=2``labeled=2/2` |
| 提交质检 | ✅ |
| 质检通过 | ✅ → `labeling_submitted` |
| 导出 YOLO | ✅ `written=2`(需 **重启 hsap-worker** 后 Job 才走新 runner |
| build + ingested | ✅ `packs/dms_v1/addw/` 含 2 条 labels`stage=ingested` |
**全流程结论**:数据已 merge 进 `datasets/dms/packs/dms_v1/addw/``labels/train` + `labels/val` 各 1 条);`stage=ingested`
---
## 3. 自动化脚本
### 3.1 Shell 入口
```bash
cd /home/chengfanglu/DATA/HSAP
# 查看状态
bash scripts/smoke_dms_e2e_2img.sh info
# 或
python3 platform/as_platform/tests/run_dms_e2e_pipeline.py info
# 标完后跑全流程提交→质检→导出→build→校验 ingested
bash scripts/smoke_dms_e2e_2img.sh run
# 等待标注(最多 600s再跑
DMS_E2E_WAIT_LABEL_SEC=600 bash scripts/smoke_dms_e2e_2img.sh run-wait
# 重新 setup会覆盖复制 2 图 + register + open campaign
bash scripts/smoke_dms_e2e_2img.sh setup
```
### 3.2 Python 实现
`platform/as_platform/tests/run_dms_e2e_pipeline.py`
- `info` — 打印 campaign_id、stage、labeled 数
- `setup` — 调 API open campaign
- `run` — API 驱动submit → review all good → export job → submit-build-batch → approve → 断言 `ingested` + pack sources
成功标志stdout 末尾 `DMS_E2E_PIPELINE_OK`
### 3.3 环境变量
| 变量 | 默认 |
|------|------|
| `HSAP_API` | `http://127.0.0.1:8787` |
| `DMS_E2E_BATCH` | `e2e_2img_20260616` |
| `DMS_E2E_TASK` | `addw` |
| `DMS_E2E_PACK` | `dms_v1` |
| `DMS_E2E_MIN_IMAGES` | `2` |
---
## 4. 相关已完成工作(同会话 / 前序 commit
### Commit `0b8ade0` — Unified Ingest SDK
- `platform/as_platform/data/promote/` — DMS/ADAS promote_batch
- ADAS cuboid export / fit / `adas_moon3d_v1`
- `platform/as_platform/tests/test_unified_ingest_sdk.py`7 项单元测试)
- `scripts/smoke_adas_promote.sh`
- `scripts/smoke_labeling_api.sh` 已接入上述测试
### 离线测试(均已 PASS
```bash
bash scripts/smoke_labeling_api.sh # 含 APIplatform :8787
bash scripts/smoke_adas_promote.sh
python3 platform/as_platform/tests/test_unified_ingest_sdk.py
```
---
## 5. 已知问题与修复记录
### 5.1 「立即同步」点击无反馈UI
**现象**:用户点「立即同步」似乎没反应。
**根因(已确认)**
1. **后端正常**`POST /api/v1/labeling/cvat/sync/{campaign_id}` 返回 200`saved=2, shapes=2`
2. **前端 UX**
- 自动同步每 45s 跑时 `syncInFlight=true`,手动点击被 **静默丢弃**(无提示)。
- `shapes=0`CVAT 未 Ctrl+S 保存)仅更新顶栏灰色小字,**无 alert**,易被误认为无效。
**修复**`AnnotationPage.tsx`,待 `build_web.sh` 后生效):
- 同步进行中再点 → 顶栏提示「同步进行中,请稍候…」
- 手动同步结束 → **始终 alert**(含「暂无新标注,请先 CVAT 保存」说明)
**操作提示**CVAT 画框后必须 **Ctrl+S 保存**,再点「立即同步」。
### 5.2 inbox 目录权限
`datasets/dms/inbox/addw/*` 由 docker 创建为 root宿主机直接写 `labels/` 会 Permission denied。应通过平台 API/容器操作。
### 5.3 `register-batch` 计数
`images=4` 偶发(扫描逻辑);实际仅 2 张 jpg`progress total_tasks=2` 为准。
### 5.4 API `labeling/batches` limit
查询 `limit` 最大 **100**(非 200E2E 脚本已修正。
### 5.5 `get_batch_export_stats` ORM
已在 session 外读 `camp.project` 修为先提取 `project`commit `0b8ade0`)。
---
## 6. 平台复现步骤(协调员)
1. **送标工作台** → 待送标 → `e2e_2img_20260616` → 开始标注(若已开 Campaign 则跳过)
2. **标注画布** → CVAT 画框 → **Ctrl+S****立即同步**(或等 45s 自动同步)
3. **标注进度****提交质检**
4. **标注质检** → 逐张 Good或跑脚本自动全 Good
5. **导出与入库** → 待导出 → **执行导出** → 待 build → **提交 build**
6. **审核队列** → 批准 `build_dms`
7. **数据目录** → 训练包 `dms_v1``addw` → 见 `sources/e2e_2img_20260616`
---
### 5.10 质检详情看不到图 / 框(已修)
**原因 1主因**`<img src="/api/.../review-image">` **不会带 Bearer Token** → 401页面显示「图片加载失败」或空白。
**修复**`QualityReviewPage` 改为 `fetchReviewImageBlob` + `URL.createObjectURL` 带鉴权加载。
**原因 2**:质检 overlay 只读 `labels/{stem}.txt`CVAT 同步写在 `labels/yolo/``labels/ls_annotations/`
**修复**`review.py` 多路径解析 + 支持 ls_annotations JSON 画框。
**原因 3**:图片列表 `rglob *.jpg` 重复(大小写扩展名)→ 质检队列显示 4 张实为 2 张。
**修复**:改用 `_iter_batch_images` 去重。
**注意**:若 CVAT 框未保存或宽高为 0底栏仍显示「标注: 无」——需画布内画有效框并 Ctrl+S。
---
`AS_JOB_EXECUTOR=worker`Job 在 **hsap-worker** 进程执行。容器若长期未重启,可能仍跑旧版 `labeling_export`(误调 `as.py build`)。
```bash
docker restart hsap-worker hsap-platform
bash scripts/build_web.sh && docker restart hsap-platform # UI 变更后
```
### 5.7 `build_dms` 校验过严(已修)
**原问题**`validate_dms_task()` 要求整个 `packs/dms_v1/addw` 已存在(且常指向损坏的 workspace 软链)。
**修复**`validate_dms_inbox_batch(batch_dir)` 只校验 inbox 批次已有 YOLO labels。
### 5.8 `dms_v1` 损坏软链(已修)
`datasets/dms/packs/dms_v1` 曾指向不存在的 `/data/workspace/DMS/DATASET/...``mkdir``File exists`
**修复**`pack_registry.resolve_pack_dir` / `DmsYoloPromoteAdapter` 检测断链并回退为 HSAP 内真实目录。
### 5.9 `refresh_yaml` 拖垮 build Job已修
**原问题**`promote_inbox_batch``run_refresh(root)``--task`,因其他任务(如 ddaw无 pack 目录而 exit 1导致 Job 失败(数据其实已 promote
**修复**`run_refresh(root, task=task)`;单批次 promote 只刷新对应任务 yaml。
### 分包给本人走「我的标注」2026-06-16
已用代码将 2 张均分给 **卢承方user_id=5飞书登录**
- `assigned=2``pending=2``completed=0`
- Campaign 已重置为 `in_progress` / `out_for_labeling`,原标注 JSON 已清空,可重新画框
**我的标注入口**http://127.0.0.1:8787/labeling/my-tasks?campaign=59f7c8fd8402c072bbbf
若用 **dev 登录**user_id=9 同名账号),需另分配或改用飞书账号登录。
```bash
# 再次分配(协调员 API
curl -X POST -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
http://127.0.0.1:8787/api/v1/labeling/campaigns/59f7c8fd8402c072bbbf/assign-tasks \
-d '{"mode":"even","user_ids":[5]}'
```
---
- [x] 跑通 submit → 质检 → 导出 → build → `ingested`
- [ ] 前端 rebuild 后复测「立即同步」反馈(已改 `AnnotationPage.tsx`
- [ ] UI 手工与脚本结果对照
- [ ]`smoke_dms_e2e_2img.sh run` 接入 `smoke_labeling_api.sh`
- [ ] 提交上述 bugfix commit
---
## 8. 服务与端口
| 服务 | 地址 |
|------|------|
| HSAP 平台 | `http://127.0.0.1:8787` |
| CVATiframe | `http://127.0.0.1:8080` |
| API 健康 | `GET /api/v1/health` |
```bash
docker compose up -d platform worker
docker compose -f docker-compose.yml -f docker-compose.cvat.yml up -d # CVAT
bash scripts/build_web.sh && docker restart hsap-platform # UI 更新后
```
---
## 9. 其他参考批次(非本 E2E
| batch | campaign_id | 说明 |
|-------|-------------|------|
| `addw/20260525_pilot` | `149329641efe128c00f2` | 24 图,曾 in_review |
| ADAS `val_front6mm_pilot` | — | `smoke_adas_promote.sh` CLI 已 PASS |
ADAS registry 在 **HSAP 仓库外**`data/送标/adas/adas.registry.yaml`