feat: Add support for ADAS project in labeling and export processes

- Implemented class name loading for ADAS campaigns in `_class_names_for_campaign`.
- Enhanced annotation parsing to support cuboid and 2D rectangle labels in `_parse_ls_annotations`.
- Updated catalog building to include ADAS packs and batches in `build_catalog_signature`.
- Added ADAS cuboid promotion logic in `adas_cuboid.py`, supporting both quaternion_json and YOLO HBB formats.
- Introduced validation for ADAS batches to check for YOLO HBB labels in `adas_cuboid.py`.
- Modified delivery scanning to include ADAS project deliveries in `scan.py`.
- Extended job execution to handle ADAS exports for YOLO format in `runner.py`.
- Updated labeling export logic to accommodate ADAS project in `export_cuboid_batch.py`.
- Enhanced format conversion to support rectangle labels in `format_converter.py`.
- Improved CVAT task handling in `service.py` to ensure task ID updates on each labeling job.
- Updated web API endpoints to reflect ADAS project changes in `hsap-api.ts`.
- Added ADAS catalog types and UI components for displaying ADAS packs and batches in `dmsCatalog.ts`, `CatalogPage.tsx`, and `ExportPage.tsx`.
- Adjusted workflow registry to align with new ADAS project structure.
This commit is contained in:
2026-07-16 16:03:04 +08:00
parent be8a885b07
commit 1bde0fe430
23 changed files with 472 additions and 83 deletions

View File

@@ -34,7 +34,13 @@ def _scan_project_inbox(project: str, wf: dict | None = None) -> list[dict[str,
with session_scope() as db:
deliveries = {
(r.project, r.task or "", r.mode or "", r.batch_name): r
(r.project, r.task or "", r.mode or "", r.batch_name): {
"id": r.id,
"status": r.status,
"collection_start": r.collection_start,
"collection_end": r.collection_end,
"created_at": r.created_at,
}
for r in db.query(BatchDelivery).filter(BatchDelivery.project == project).all()
}
indexed = {
@@ -78,13 +84,13 @@ def _scan_project_inbox(project: str, wf: dict | None = None) -> list[dict[str,
"has_labels": has_labels,
"stage_hint": stage_hint,
"source_type": "inbox_scan",
"delivery_id": delivery.id if delivery else None,
"delivery_status": delivery.status if delivery else None,
"delivery_id": delivery["id"] if delivery else None,
"delivery_status": delivery["status"] if delivery else None,
"in_ledger": delivery is not None,
"in_workbench": in_index,
"collection_start": delivery.collection_start if delivery else _dir_mtime_iso(batch_dir),
"collection_end": delivery.collection_end if delivery else None,
"created_at": delivery.created_at.isoformat() if delivery and delivery.created_at else None,
"collection_start": delivery["collection_start"] if delivery else _dir_mtime_iso(batch_dir),
"collection_end": delivery["collection_end"] if delivery else None,
"created_at": delivery["created_at"].isoformat() if delivery and delivery["created_at"] else None,
"needs_ledger": delivery is None,
"needs_workbench": not in_index,
})