将 platform + CVAT 合并为单文件 docker-compose.yml,完善 .env 与 init/dev_up 脚本; 新增 docs/DEPLOY.md 与更新 README 以支持新机器部署;含数据湖示例、车队地图、 紧凑表格 UI、ADAS det_7cls 路径与批次台账等近期改动。 Co-authored-by: Cursor <cursoragent@cursor.com>
9.7 KiB
DMS 2 图端到端测试手册(上下文备忘)
更新:2026-06-16
用途:避免多轮对话丢失状态;记录 E2E 批次、脚本、已知问题与后续待测项。
1. 测试目标
验证 QA 门禁完整链路(DMS / ADDW):
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 |
数据路径
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 入口
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 campaignrun— 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.shscripts/smoke_labeling_api.sh已接入上述测试
离线测试(均已 PASS)
bash scripts/smoke_labeling_api.sh # 含 API(platform :8787)
bash scripts/smoke_adas_promote.sh
python3 platform/as_platform/tests/test_unified_ingest_sdk.py
5. 已知问题与修复记录
5.1 「立即同步」点击无反馈(UI)
现象:用户点「立即同步」似乎没反应。
根因(已确认):
- 后端正常:
POST /api/v1/labeling/cvat/sync/{campaign_id}返回 200,saved=2, shapes=2。 - 前端 UX:
- 自动同步每 45s 跑时
syncInFlight=true,手动点击被 静默丢弃(无提示)。 shapes=0时(CVAT 未 Ctrl+S 保存)仅更新顶栏灰色小字,无 alert,易被误认为无效。
- 自动同步每 45s 跑时
修复(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(非 200),E2E 脚本已修正。
5.5 get_batch_export_stats ORM
已在 session 外读 camp.project 修为先提取 project(commit 0b8ade0)。
6. 平台复现步骤(协调员)
- 送标工作台 → 待送标 →
e2e_2img_20260616→ 开始标注(若已开 Campaign 则跳过) - 标注画布 → CVAT 画框 → Ctrl+S → 立即同步(或等 45s 自动同步)
- 标注进度 → 提交质检
- 标注质检 → 逐张 Good(或跑脚本自动全 Good)
- 导出与入库 → 待导出 → 执行导出 → 待 build → 提交 build
- 审核队列 → 批准
build_dms - 数据目录 → 训练包
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)。
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 同名账号),需另分配或改用飞书账号登录。
# 再次分配(协调员 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]}'
- 跑通 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 |
| CVAT(iframe) | http://127.0.0.1:8080 |
| API 健康 | GET /api/v1/health |
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。