feat: HSAP platform v2 — modular navigation, quality review, audit log, world model simulation
Major changes: - New frontend (platform/web/): Vite + React 18 + TypeScript + Tailwind - 4-module navigation: 数据送标 / 模型管理 / 车队管理 / 系统管理 - Data catalog with charts (DMS/ADAS/Lane 3-tab view) - Quality review workflow (标注质检): Good/Fine/Bad scoring with auto-advance - Audit enhancements: batch operations, rejection categories, Feishu notifications - Operation audit log (操作日志) - World model simulation studio (仿真工坊) - Dataset version management with snapshots and diff - ADAS 7-class dataset integration (138K images organized + compressed) - User management with Feishu integration and pagination - CRUD/search/filter on all pages, card layout redesign - PIL-optimized image overlay rendering - Auto-snapshot on build, in_review workflow stage - Removed embedded algorithm code (now in workspace)
This commit is contained in:
57
datasets/dms/scripts/migrate_forward_layout.py
Normal file
57
datasets/dms/scripts/migrate_forward_layout.py
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env python3
|
||||
"""将 isa / isa_class 目录迁入 forward/detect、forward/classify(默认符号链接,保留原数据)。"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def link_or_move(src: Path, dst: Path, *, move: bool) -> None:
|
||||
if not src.is_dir():
|
||||
print(f" skip(不存在): {src}")
|
||||
return
|
||||
if dst.exists():
|
||||
print(f" 已存在: {dst}")
|
||||
return
|
||||
dst.parent.mkdir(parents=True, exist_ok=True)
|
||||
if move:
|
||||
shutil.move(str(src), str(dst))
|
||||
print(f" moved {src} -> {dst}")
|
||||
else:
|
||||
dst.symlink_to(src.resolve())
|
||||
print(f" symlink {dst} -> {src.resolve()}")
|
||||
|
||||
|
||||
def migrate_pack(pack_dir: Path, *, move: bool) -> None:
|
||||
forward = pack_dir / "forward"
|
||||
forward.mkdir(parents=True, exist_ok=True)
|
||||
link_or_move(pack_dir / "isa", forward / "detect", move=move)
|
||||
link_or_move(pack_dir / "isa_class", forward / "classify", move=move)
|
||||
|
||||
|
||||
def migrate_inbox(dms_root: Path, *, move: bool) -> None:
|
||||
for old, new in (
|
||||
("isa", "forward/detect"),
|
||||
("isa_class", "forward/classify"),
|
||||
):
|
||||
src = dms_root / "inbox" / old
|
||||
dst = dms_root / "inbox" / new
|
||||
if src.is_dir():
|
||||
link_or_move(src, dst, move=move)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--pack-dir", type=Path, required=True, help="如 .../packs/dms_v1")
|
||||
p.add_argument("--dms-root", type=Path, help="datasets/dms 根,迁移 inbox")
|
||||
p.add_argument("--move", action="store_true", help="移动而非符号链接")
|
||||
args = p.parse_args()
|
||||
migrate_pack(args.pack_dir.resolve(), move=args.move)
|
||||
if args.dms_root:
|
||||
migrate_inbox(args.dms_root.resolve(), move=args.move)
|
||||
print("完成。请运行 refresh_yaml.py 并刷新平台 catalog。")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user