feat(lidar): admit and benchmark GOOSE baseline
This commit is contained in:
@@ -20,7 +20,15 @@ from k1link.compute import (
|
||||
lidar_pack_catalog_item,
|
||||
lidar_pack_detail,
|
||||
)
|
||||
from k1link.datasets import dataset_gateway_catalog
|
||||
from k1link.datasets import (
|
||||
DatasetAdmissionError,
|
||||
configured_dataset_admission_manifest,
|
||||
configured_dataset_ground_preview,
|
||||
configured_dataset_preview,
|
||||
dataset_gateway_catalog,
|
||||
read_dataset_ground_preview,
|
||||
read_dataset_native_scan_preview,
|
||||
)
|
||||
|
||||
LIDAR_CATALOG_SCHEMA: Final = "missioncore.lidar-replay-pack-catalog/v1"
|
||||
LIDAR_GROUND_CATALOG_SCHEMA: Final = "missioncore.lidar-ground-benchmark-catalog/v1"
|
||||
@@ -29,6 +37,7 @@ _PACK_ID = re.compile(r"^lidar-replay-pack-[a-f0-9]{64}$")
|
||||
_BENCHMARK_ID = re.compile(r"^ground-benchmark-[a-f0-9]{64}$")
|
||||
_FIELD_REVIEW_ID = re.compile(r"^lidar-field-review-[a-f0-9]{64}$")
|
||||
RootProvider = Callable[[], Path | None]
|
||||
DatasetArtifactProvider = Callable[[], Path | None]
|
||||
|
||||
|
||||
def configured_lidar_replay_root() -> Path | None:
|
||||
@@ -51,12 +60,49 @@ def build_lidar_router(
|
||||
root_provider: RootProvider = configured_lidar_replay_root,
|
||||
ground_root_provider: RootProvider = configured_lidar_ground_root,
|
||||
field_review_root_provider: RootProvider = configured_lidar_field_review_root,
|
||||
dataset_admission_provider: DatasetArtifactProvider = configured_dataset_admission_manifest,
|
||||
dataset_preview_provider: DatasetArtifactProvider = configured_dataset_preview,
|
||||
dataset_ground_preview_provider: DatasetArtifactProvider = configured_dataset_ground_preview,
|
||||
) -> APIRouter:
|
||||
router = APIRouter(prefix="/api/v1/lidar", tags=["lidar"])
|
||||
|
||||
@router.get("/dataset-gateway")
|
||||
def get_dataset_gateway() -> dict[str, object]:
|
||||
return dataset_gateway_catalog()
|
||||
return dataset_gateway_catalog(
|
||||
admission_manifest_path=dataset_admission_provider(),
|
||||
)
|
||||
|
||||
@router.get("/dataset-gateway/preview")
|
||||
def get_dataset_gateway_preview() -> dict[str, Any]:
|
||||
path = dataset_preview_provider()
|
||||
if path is None or not path.is_file():
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail="Первый размеченный native scan ещё не импортирован.",
|
||||
)
|
||||
try:
|
||||
return read_dataset_native_scan_preview(path)
|
||||
except DatasetAdmissionError as exc:
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail="Preview датасета не прошло проверку целостности.",
|
||||
) from exc
|
||||
|
||||
@router.get("/dataset-gateway/ground-comparison")
|
||||
def get_dataset_gateway_ground_comparison() -> dict[str, Any]:
|
||||
path = dataset_ground_preview_provider()
|
||||
if path is None or not path.is_file():
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail="Ground baseline ещё не сравнивался с GOOSE-разметкой.",
|
||||
)
|
||||
try:
|
||||
return read_dataset_ground_preview(path)
|
||||
except DatasetAdmissionError as exc:
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail="Ground comparison не прошло проверку целостности.",
|
||||
) from exc
|
||||
|
||||
@router.get("/replay-packs")
|
||||
def list_lidar_replay_packs(
|
||||
|
||||
Reference in New Issue
Block a user