Files
HSAP/README.md
Chengfang Lu 7f3b84faf0 docs: DEPLOY 增加接手人环境差异清单(均可本机自行解决)
说明勿拷贝开发者 .env/feishu.env、常见排障与部署前自检,明确不绑定单机环境。

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

338 lines
11 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 — Huaxu Sentinel Active Safety Platform
**华胥 Sentinel 主动安全算法迭代平台**HSAP卡车主动安全DMS / Lane / ADAS算法迭代平台**Web UI + API + 审核 + Job 队列 + CVAT 标注 + 算法适配器 + 车队地图**
克隆本仓库即可运行;**算法源码与数据集脚手架已内嵌**。大文件(图像、训练权重)通过外部 `workspace`**送标数据湖** 挂载,不进入 Git。
**新机器 3 步部署 → 见下方 [快速部署到其他机器](#快速部署到其他机器)** · 详细文档 [docs/DEPLOY.md](docs/DEPLOY.md)
---
## 快速部署到其他机器
在目标 Linux 机器上执行(需 Docker + Node 18+
```bash
# 1. 克隆HTTPS 需 Gitea 用户名 + Access Token 作密码;或配置 SSH 公钥)
git clone https://git.sanyele.com/ChengFang.LU/HSAP.git
cd HSAP
# 2. 初始化:.env、feishu.env、前端构建、lake_example 样例植入
bash scripts/init_after_clone.sh
# 3. 启动平台 + CVAT
bash scripts/dev_up.sh
```
浏览器打开 http://127.0.0.1:8787 → 开发登录 → **批次台账 → 扫描数据湖 → 登记 → 送标工作台开标**(样例已自动就位)。
| 检查项 | 命令 / 地址 |
|--------|-------------|
| 平台健康 | `make health` |
| 容器状态 | `docker compose ps` |
| 样例批次 | `lake/lake_example/datasets/manifest.yaml` |
| 局域网访问 | 改 `.env``AS_FRONTEND_URL``CVAT_PUBLIC_URL``http://<IP>:8787` / `:8080` |
**目录布局(推荐与仓库平级):**
```text
/opt/DATA/
├── HSAP/ ← git clone
└── data/ ← AS_DATA_LAKE_HOSTinit 自动创建 送标/adas/inbox
```
`AS_WORKSPACE_ROOT`DMS 训练大图)**验收送标流程不必配置**;有外部 workspace 时再在 `.env` 填写。
**环境差异说明:** 路径、端口、Docker 权限、前端构建等项因机器而异,但**均可在本机按 [docs/DEPLOY.md §9](docs/DEPLOY.md#9-开发机-vs-接手人环境均可本机自行解决) 自行解决**,不依赖开发者个人目录。
**推送代码到远端:**
```bash
git push origin main
# 用户名 Chengfang.LU密码填 Gitea Access Token设置 → 应用 → 生成令牌)
```
---
## 仓库结构
```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、构建前端、植入 lake_example 样例
bash scripts/dev_up.sh # 或: make up
```
按上面两步即可 **启动平台**`init_after_clone.sh` 会自动把 [`lake/lake_example`](lake/lake_example/) 里的示例送标批次复制到数据湖 inbox接手人无需再手动拷文件。
| 服务 | 地址 | 说明 |
|------|------|------|
| 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`,详见 [docs/DEPLOY.md](docs/DEPLOY.md)。
---
## 接手走通送标流程lake_example
仓库内 [`lake/lake_example/`](lake/lake_example/) 含 **DMS / ADAS 2D / ADAS 3D / Lane** 各一条样例批次(含少量图片),用于验收全流程。
### 一键植入(部署时自动执行)
```bash
bash scripts/init_after_clone.sh # 已包含 seed
# 或单独执行:
bash scripts/seed_lake_example.sh
```
样例落盘位置:
| 业务 | 路径 | 样例批次 |
|------|------|----------|
| ADAS 2D | `data/送标/adas/inbox/det_7cls/` | `20260616_adas2d_pilot` |
| ADAS 3D | `data/送标/adas/inbox/cuboid_7cls/` | `20260616_3d_pilot` |
| DMS | `datasets/dms/inbox/addw/` 等 | `20260616_addw_pilot` 等 |
| Lane | `datasets/lane/inbox/` | `20260616_lane_pilot` |
默认 `AS_DATA_LAKE_HOST=../data`(与 HSAP 仓库平级)。完整清单见 [`lake/lake_example/datasets/manifest.yaml`](lake/lake_example/datasets/manifest.yaml)。
### UI 操作顺序
1. 打开 http://127.0.0.1:8787 → 开发登录
2. **批次台账****扫描数据湖** → 勾选样例批次 → **登记到台账**
3. **送标工作台** → 选批次(建议先试 `adas / det_7cls / 20260616_adas2d_pilot`)→ **开标**
4. **标注进度****分配任务** → 标注员进入 **我的标注** → CVAT 画框保存
5. 协调员 **提交批次** → 审核员 **审核队列** 通过 → 导出入库
清空标注记录重来:`bash scripts/reset_labeling.sh`(不删 inbox 文件,可再次扫描登记)。
---
## 标注与送标
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/`。登记:**批次台账 → 扫描数据湖 → 登记**。
部署时执行 `bash scripts/seed_lake_example.sh`(已包含在 `init_after_clone.sh`)可自动植入样例批次。
清空送标/标注 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) | **新机器部署**(含 §9 环境差异清单) |
| [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 进程内线程 |