feat: CVAT 标注引擎、我的标注收件箱与 ADAS Cuboid 送标
- 统一标注引擎为 CVAT:客户端/配置/格式转换、iframe 标注页、docker-compose.cvat.yml 与 no_auth 补丁 - 移除 Label Studio 相关配置与构建脚本,清理 embedded.bak 备份与误提交的 node_modules - 新增「我的标注」:跨 Campaign 收件箱、逐张清单、CVAT frame 跳转 - 飞书任务分配:通讯录同步选人、按量分配、分配后 DM 通知(含 my-tasks 链接) - ADAS cuboid_7cls 数据湖接入:workflow 路径、register-batch、开标上传与标注同步 - 数据湖挂载 AS_DATA_LAKE_ROOT、datasets/adas 符号链接、reset_labeling 运维脚本 - 补充 docs/HANDOVER.md 项目交接文档 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# HSAP 前端构建(已迁移至 platform/web/ Vite 独立项目)
|
||||
# 本脚本保留作为向后兼容入口,实际构建委托给 build_web.sh
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
echo "[build] 使用新构建系统 platform/web/ (Vite)..."
|
||||
exec bash "$ROOT/scripts/build_web.sh"
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build HSAP standalone frontend from platform/web/ and deploy to platform/ui-hsap/dist/
|
||||
# Build HSAP frontend from platform/web/ → platform/ui-hsap/dist/
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
@@ -11,50 +11,7 @@ echo "[web] Building..."
|
||||
npm run build
|
||||
|
||||
DIST="$ROOT/platform/ui-hsap/dist"
|
||||
|
||||
# Copy Label Studio Editor legacy build for /annotate/
|
||||
EDITOR_SRC="${LABEL_STUDIO_DIST:-${ROOT}/../workspace/BK2/label-studio/web/dist/apps/hsap-platform}"
|
||||
if [ -d "$EDITOR_SRC" ]; then
|
||||
mkdir -p "$DIST/annotate"
|
||||
cp -r "$EDITOR_SRC"/* "$DIST/annotate/"
|
||||
|
||||
# Copy webpack chunks to dist root (webpack publicPath="/" loads them from root)
|
||||
for f in editor.js 849.js 710.js 408.js 63.js main.css editor.css; do
|
||||
[ -f "$DIST/annotate/$f" ] && cp "$DIST/annotate/$f" "$DIST/$f"
|
||||
done
|
||||
|
||||
# Custom annotate index.html
|
||||
cat > "$DIST/annotate/index.html" << 'HTMLEOF'
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>HSAP · 标注编辑器</title>
|
||||
<base href="/" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="/annotate/main.css" />
|
||||
<link rel="stylesheet" href="/annotate/editor.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script>
|
||||
(function() {
|
||||
var p = new URLSearchParams(location.search);
|
||||
var cid = p.get('c');
|
||||
if (cid) {
|
||||
history.replaceState(null, '', '/labeling/campaigns/' + cid + '/annotate');
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script src="/annotate/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
HTMLEOF
|
||||
echo "[web] Annotate editor (legacy LS) deployed from $EDITOR_SRC"
|
||||
else
|
||||
echo "[web] ⚠ annotate editor source not found at $EDITOR_SRC"
|
||||
fi
|
||||
rm -rf "$DIST/annotate"
|
||||
|
||||
echo "[web] Build complete → $DIST"
|
||||
echo "[web] Files:"
|
||||
ls -lh "$DIST/index.html" "$DIST/assets/" | head -8
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
# 一键启动完整开发环境:postgres + redis + platform + worker
|
||||
# 一键启动 HSAP 平台 + 内置 CVAT 标注引擎
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
COMPOSE_FILES=(-f docker-compose.yml -f docker-compose.cvat.yml)
|
||||
|
||||
if [[ ! -f .env ]]; then
|
||||
cp .env.example .env
|
||||
echo "已创建 .env(默认挂载本仓库;大文件数据可设置 AS_WORKSPACE_ROOT)"
|
||||
@@ -14,20 +16,27 @@ if [[ -d "$DEFAULT_WS/DMS" ]] && ! grep -q '^AS_WORKSPACE_ROOT=' .env 2>/dev/nul
|
||||
echo "已写入 AS_WORKSPACE_ROOT=$DEFAULT_WS"
|
||||
fi
|
||||
|
||||
if ! grep -q '^CVAT_HOST=' .env 2>/dev/null; then
|
||||
echo "CVAT_HOST=http://hsap-cvat-server:8080" >> .env
|
||||
fi
|
||||
if ! grep -q '^CVAT_PUBLIC_URL=' .env 2>/dev/null; then
|
||||
echo "CVAT_PUBLIC_URL=http://127.0.0.1:8080" >> .env
|
||||
fi
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "未安装 Docker。Ubuntu: sudo apt install docker.io docker-compose-v2"
|
||||
echo "或: https://docs.docker.com/engine/install/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker compose up -d --build "$@"
|
||||
docker compose "${COMPOSE_FILES[@]}" up -d --build "$@"
|
||||
|
||||
echo ""
|
||||
echo "服务:"
|
||||
echo " 平台 UI+API http://127.0.0.1:${AS_PLATFORM_PORT:-8787}"
|
||||
echo " PostgreSQL localhost:${AS_DB_PORT:-5432}"
|
||||
echo " Redis localhost:${AS_REDIS_PORT:-6379}"
|
||||
echo " HSAP 平台 http://127.0.0.1:${AS_PLATFORM_PORT:-8787}"
|
||||
echo " CVAT 标注画布 http://127.0.0.1:${CVAT_PORT:-8080} (由 HSAP 嵌入,无需单独登录)"
|
||||
echo " PostgreSQL localhost:${AS_DB_PORT:-5432}"
|
||||
echo " Redis localhost:${AS_REDIS_PORT:-6379}"
|
||||
echo ""
|
||||
echo "React 热更新: docker compose --profile dev up -d web-dev → :5173"
|
||||
echo "日志: docker compose logs -f platform worker"
|
||||
echo "停止: docker compose down"
|
||||
echo "日志: docker compose ${COMPOSE_FILES[*]} logs -f platform worker cvat_server"
|
||||
echo "停止: docker compose ${COMPOSE_FILES[*]} down"
|
||||
|
||||
38
scripts/reset_labeling.sh
Executable file
38
scripts/reset_labeling.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
# 清空送标/标注相关记录,保留平台账号与配置
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
echo "==> 清空 PostgreSQL 送标/标注表"
|
||||
docker exec hsap-postgres psql -U as_platform -d as_platform <<'SQL'
|
||||
TRUNCATE labeling_reviews, labeling_export_jobs, labeling_task_assignments, labeling_campaign_access, labeling_campaigns CASCADE;
|
||||
TRUNCATE dataset_candidates, batch_deliveries CASCADE;
|
||||
SQL
|
||||
|
||||
if curl -sf http://127.0.0.1:8080/api/tasks?page_size=100 -H 'Accept: application/vnd.cvat+json; version=2.0' >/dev/null 2>&1; then
|
||||
echo "==> 清空 CVAT Task"
|
||||
python3 - <<'PY'
|
||||
import json, urllib.request
|
||||
req = urllib.request.Request(
|
||||
"http://127.0.0.1:8080/api/tasks?page_size=100",
|
||||
headers={"Accept": "application/vnd.cvat+json; version=2.0"},
|
||||
)
|
||||
with urllib.request.urlopen(req) as r:
|
||||
data = json.load(r)
|
||||
for t in data.get("results", []):
|
||||
tid = t["id"]
|
||||
del_req = urllib.request.Request(
|
||||
f"http://127.0.0.1:8080/api/tasks/{tid}",
|
||||
method="DELETE",
|
||||
headers={"Accept": "application/vnd.cvat+json; version=2.0"},
|
||||
)
|
||||
try:
|
||||
urllib.request.urlopen(del_req)
|
||||
print(f" deleted CVAT task #{tid} {t.get('name')}")
|
||||
except Exception as e:
|
||||
print(f" skip task #{tid}: {e}")
|
||||
PY
|
||||
fi
|
||||
|
||||
echo "==> 完成。数据湖目录: ${AS_DATA_LAKE:-$ROOT/../data/送标}"
|
||||
Reference in New Issue
Block a user