Files
HSAP/README.md
Chengfang Lu 483e027482 feat: 合并 Docker Compose、标注表格优化与部署文档
将 platform + CVAT 合并为单文件 docker-compose.yml,完善 .env 与 init/dev_up 脚本;
新增 docs/DEPLOY.md 与更新 README 以支持新机器部署;含数据湖示例、车队地图、
紧凑表格 UI、ADAS det_7cls 路径与批次台账等近期改动。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 17:06:31 +08:00

256 lines
7.9 KiB
Markdown
Raw 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 — Huaxu Sentinel Active Safety Platform
**华胥 Sentinel 主动安全算法迭代平台**HSAP卡车主动安全DMS / Lane / ADAS算法迭代平台**Web UI + API + 审核 + Job 队列 + CVAT 标注 + 算法适配器 + 车队地图**
克隆本仓库即可运行;**算法源码与数据集脚手架已内嵌**。大文件(图像、训练权重)通过外部 `workspace`**送标数据湖** 挂载,不进入 Git。
**新机器部署请直接看 → [docs/DEPLOY.md](docs/DEPLOY.md)**
---
## 仓库结构
```text
HSAP/
├── as.py / workflow.registry.yaml
├── platform/
│ ├── as_platform/ # FastAPI 后端
│ │ └── labeling/ # CVAT 客户端、格式转换、任务分配
│ └── web/ # React (Vite) 前端 → build 到 ui-hsap/dist
├── algorithms/
│ ├── dms_yolo/code/ # DMS YOLO
│ └── lane_ufld/code/ # Lane UFLD
├── datasets/
│ ├── dms/ # DMS 配置/脚本
│ ├── lane/
│ ├── adas -> ../../data/送标/adas # ADAS 送标数据湖符号链接clone 后可手动创建)
│ └── labeling.registry.yaml
├── lake/lake_example/ # 数据湖 inbox 目录示例与 manifest
├── vendor/cvat/patches/ # CVAT no_auth + iframe 补丁
├── scripts/ # dev_up、build_web、init_after_clone 等
├── docs/DEPLOY.md # 新机器部署(推荐阅读)
├── docs/HANDOVER.md # 详细交接文档
├── docker-compose.yml # 平台 + CVAT单文件已合并
└── manifests/
├── feishu.env.example
└── feishu.env # 本地生成,不入 Git
```
| 内容 | 是否在 Git 中 | 说明 |
|------|---------------|------|
| 平台 + 前端源码 + 适配器 | ✅ | 直接提交 |
| CVAT 补丁 / compose | ✅ | `vendor/cvat/patches/` |
| 前端构建产物 `ui-hsap/dist` | ❌ | `bash scripts/build_web.sh` 生成 |
| 算法 Python 源码 | ✅ | `scripts/vendor_workspace.sh` 可同步 |
| 送标图像 / 标定 / 标注 | ❌ | 数据湖挂载 |
| 图像 / 视频 / 权重 | ❌ | `.gitignore` |
---
## 快速开始Docker推荐
**依赖:** Docker 20+、Docker Compose v2、Node 18+(仅构建前端)
```bash
git clone https://git.sanyele.com/ChengFang.LU/HSAP.git
cd HSAP
bash scripts/init_after_clone.sh # 生成 .env / feishu.env构建前端
# 编辑 .envAS_WORKSPACE_ROOT、AS_DATA_LAKE_HOST、AS_FRONTEND_URL
bash scripts/dev_up.sh # 或: make up
```
`make up` / `dev_up.sh` 一次启动 **HSAP 平台 + 内置 CVAT**(无需单独部署 CVAT无需 CVAT 账号登录)。
| 服务 | 地址 | 说明 |
|------|------|------|
| HSAP 平台 UI + API | http://127.0.0.1:8787 | 登录、送标、标注、审核、车队地图 |
| CVAT 标注画布 | http://127.0.0.1:8080 | HSAP iframe 嵌入;内部 no_auth |
| PostgreSQL | localhost:5433 | 见 `.env` `AS_DB_PORT` |
| Redis | localhost:6380 | Job 队列 |
```bash
make logs # platform / worker / cvat 日志
make down # 停止全部服务
make health # API 健康检查
```
**开发登录:** `manifests/feishu.env``AS_DEV_AUTH=true` 时无需飞书即可登录。
**改前端后:**`bash scripts/build_web.sh``docker compose restart platform`
**部署到他人电脑 / 局域网:** 修改 `.env``AS_FRONTEND_URL``CVAT_PUBLIC_URL``FEISHU_REDIRECT_URI` 为实际访问地址,详见 [docs/DEPLOY.md](docs/DEPLOY.md)。
---
## 标注与送标
HSAP 统一使用 **CVAT** 作为标注画布;账号、任务分配、权限在 HSAP 管理CVAT 仅作内部引擎。
### 流程概览
```text
数据湖登记批次 → 协调员「开标」→ CVAT 自动建 Task / 上传图片
→ 协调员分配任务(飞书通讯录 + 可选 DM
→ 标注员「我的标注」→ CVAT 画框 / Cuboid → 保存 → 同步回数据湖
→ 协调员提交批次 → 质检 → 导出入库
```
### 角色与页面
| 角色 | 典型页面 |
|------|----------|
| 协调员 (engineer) | 送标工作台、标注进度、任务分配 |
| 标注员 (labeler) | **我的标注**、标注页 |
| 审核员 (reviewer) | 审核队列 |
### 支持的标注类型
| Profile | 范围 | CVAT 工具 |
|---------|------|-----------|
| `ddaw` / `addw` 等 | DMS 2D 检测 | Rectangle |
| `lane__lane_v1` | 车道线 | Polyline |
| `det_7cls` | ADAS 2D 七类检测 | Rectangle |
| `cuboid_7cls` | ADAS 单目 3D Cuboid | Cuboid |
ADAS 7 类:`car`, `pedestrian`, `truck`, `bus`, `motorcycle`, `tricycle`, `traffic cone`
### 送标数据湖路径
宿主机(默认 `AS_DATA_LAKE_HOST` = 仓库上级 `../data`
| 类型 | inbox 路径 | project | task |
|------|----------|---------|------|
| ADAS 2D | `送标/adas/inbox/det_7cls/<batch>/` | `adas` | `det_7cls` |
| ADAS 3D | `送标/adas/inbox/cuboid_7cls/<batch>/` | `adas` | `cuboid_7cls` |
| DMS | `送标/dms/inbox/<profile>/<batch>/` | `dms` | 见 profile |
批次目录示例见 `lake/lake_example/`。登记:**批次台账 → 扫描数据湖 → 登记**。
清空送标/标注 DB保留账号`bash scripts/reset_labeling.sh`
---
## 环境变量(`.env`
| 变量 | 默认 | 说明 |
|------|------|------|
| `AS_PLATFORM_PORT` | 8787 | HSAP 端口 |
| `CVAT_PORT` | 8080 | CVAT Traefik 端口 |
| `AS_DB_PORT` | 5433 | PostgreSQL 宿主机端口 |
| `AS_REDIS_PORT` | 6380 | Redis 宿主机端口 |
| `AS_WORKSPACE_ROOT` | 占位目录 | DMS/Lane 大文件 |
| `AS_DATA_LAKE_HOST` | `../data` | 送标数据湖根 |
| `AS_FRONTEND_URL` | `http://127.0.0.1:8787` | 浏览器访问 HSAP |
| `CVAT_PUBLIC_URL` | `http://127.0.0.1:8080` | 浏览器访问 CVAT |
完整列表见 [.env.example](.env.example)。
---
## 数据挂载
```bash
# .env
AS_WORKSPACE_ROOT=/path/to/DATA/workspace
AS_DATA_LAKE_HOST=/path/to/DATA/data
bash scripts/setup_links.sh # 可选:切换为 workspace 软链模式
docker compose up -d --build
```
确保 `datasets/adas` 指向数据湖(若缺失):
```bash
ln -sfn ../../data/送标/adas datasets/adas
```
---
## 本机直跑(不用 Docker 跑 Platform
```bash
pip install -r requirements.txt
bash scripts/init_after_clone.sh
bash scripts/run_local.sh
```
- Job 默认 `AS_JOB_EXECUTOR=thread`
- 无 PostgreSQL 时回退 SQLite
- 标注需 CVAT 可达
仅基础设施用 Docker`docker compose up -d postgres redis cvat_traefik cvat_server ...`
---
## 认证(飞书 + PostgreSQL
```bash
cp manifests/feishu.env.example manifests/feishu.env
```
| 角色 | 权限 |
|------|------|
| admin | 全部 + 用户管理 |
| reviewer | 审核 |
| engineer | 送标开标、任务分配、build/train |
| labeler | 我的标注、CVAT 保存 |
| viewer | 只读 |
---
## CLI 示例
```bash
python as.py pending
python as.py add dms dam --src /path/to/batch ...
python as.py train dms dam --track local
```
---
## 维护者
### 从 workspace 刷新内嵌代码
```bash
bash scripts/vendor_workspace.sh
git add algorithms/ datasets/ manifests/repo_layout.json
git commit -m "chore: refresh vendored algorithm scaffolds"
```
### 同步到训练服务器
```bash
bash scripts/sync_to_server.sh user@host:/opt/HSAP
```
### 推送到 Git 远端
```bash
git status # 确认无 .env、feishu.env、*.pt、送标图像
git push origin main
```
远端:`https://git.sanyele.com/ChengFang.LU/HSAP.git`
---
## 更多文档
| 文档 | 说明 |
|------|------|
| [docs/DEPLOY.md](docs/DEPLOY.md) | **新机器部署** |
| [docs/HANDOVER.md](docs/HANDOVER.md) | 架构、API、运维、排障 |
| [docs/DEVELOPMENT_GUIDE.md](docs/DEVELOPMENT_GUIDE.md) | 开发指南 |
| [lake/lake_example/README.md](lake/lake_example/README.md) | 数据湖 inbox 示例 |
---
## Job 执行模式
| `AS_JOB_EXECUTOR` | 行为 |
|-------------------|------|
| `worker` | Docker 默认Redis 队列 + worker |
| `thread` | 本机调试API 进程内线程 |