Add Mol multi-zone operational validation
This commit is contained in:
@@ -17,6 +17,9 @@ Required inputs:
|
||||
|
||||
Optional environment:
|
||||
REAL_PROJECT_NAME Project name for the validation run.
|
||||
REAL_PROJECT_REGION Persisted project region, default: Kempen.
|
||||
REAL_AREA_NAME Persisted AOI name when REAL_AREA_BBOX is set.
|
||||
REAL_AREA_BBOX Optional EPSG:4326 minx,miny,maxx,maxy AOI bounds.
|
||||
REAL_MODEL_ASSET_ID Specific /api/v1/detection/model-assets id to use.
|
||||
REAL_TILE_SIZE Raster tile size, default 640.
|
||||
REAL_TILE_OVERLAP Raster tile overlap, default 64.
|
||||
@@ -29,6 +32,9 @@ BASE_URL="${1:-${GE_INTEL_BASE_URL:-http://localhost:1202}}"
|
||||
REAL_RASTER_PATH="${2:-${REAL_RASTER_PATH:-}}"
|
||||
REAL_REFERENCE_VECTOR_PATH="${3:-${REAL_REFERENCE_VECTOR_PATH:-}}"
|
||||
REAL_PROJECT_NAME="${REAL_PROJECT_NAME:-GeoIntel Real Data Validation}"
|
||||
REAL_PROJECT_REGION="${REAL_PROJECT_REGION:-Kempen}"
|
||||
REAL_AREA_NAME="${REAL_AREA_NAME:-${REAL_PROJECT_NAME} AOI}"
|
||||
REAL_AREA_BBOX="${REAL_AREA_BBOX:-}"
|
||||
REAL_TILE_SIZE="${REAL_TILE_SIZE:-640}"
|
||||
REAL_TILE_OVERLAP="${REAL_TILE_OVERLAP:-64}"
|
||||
REAL_CONFIDENCE_THRESHOLD="${REAL_CONFIDENCE_THRESHOLD:-0.5}"
|
||||
@@ -130,17 +136,17 @@ echo "Base URL: ${BASE_URL}"
|
||||
echo "Raster: ${REAL_RASTER_PATH}"
|
||||
echo "Reference vector: ${REAL_REFERENCE_VECTOR_PATH}"
|
||||
|
||||
"${PYTHON_BIN}" - "${TMP_DIR}/project_request.json" "${REAL_PROJECT_NAME}" <<'PY'
|
||||
"${PYTHON_BIN}" - "${TMP_DIR}/project_request.json" "${REAL_PROJECT_NAME}" "${REAL_PROJECT_REGION}" <<'PY'
|
||||
import json
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
|
||||
path, project_name = sys.argv[1], sys.argv[2]
|
||||
path, project_name, project_region = sys.argv[1:4]
|
||||
stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
|
||||
payload = {
|
||||
"name": f"{project_name} {stamp}",
|
||||
"description": "Operator-provided real data validation: raster upload, reference vector upload, configured YOLO detection, QA/QC and GeoJSON export.",
|
||||
"region": "Kempen",
|
||||
"region": project_region,
|
||||
}
|
||||
with open(path, "w", encoding="utf-8") as handle:
|
||||
json.dump(payload, handle)
|
||||
@@ -156,6 +162,41 @@ if [ -z "${project_id}" ] || [ "${project_id}" = "None" ] || [ "${project_id}" =
|
||||
exit 1
|
||||
fi
|
||||
|
||||
area_id=""
|
||||
if [ -n "${REAL_AREA_BBOX}" ]; then
|
||||
"${PYTHON_BIN}" - "${TMP_DIR}/area_request.json" "${REAL_AREA_NAME}" "${REAL_AREA_BBOX}" <<'PY'
|
||||
import json
|
||||
import sys
|
||||
|
||||
path, area_name, bbox_raw = sys.argv[1:4]
|
||||
try:
|
||||
minx, miny, maxx, maxy = [float(value.strip()) for value in bbox_raw.split(",")]
|
||||
except (TypeError, ValueError) as exc:
|
||||
raise SystemExit("REAL_AREA_BBOX must contain four numeric EPSG:4326 values: minx,miny,maxx,maxy") from exc
|
||||
if minx >= maxx or miny >= maxy:
|
||||
raise SystemExit("REAL_AREA_BBOX minimum values must be smaller than maximum values")
|
||||
if not (-180 <= minx <= 180 and -180 <= maxx <= 180 and -90 <= miny <= 90 and -90 <= maxy <= 90):
|
||||
raise SystemExit("REAL_AREA_BBOX is outside EPSG:4326 longitude/latitude bounds")
|
||||
ring = [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy], [minx, miny]]
|
||||
payload = {
|
||||
"name": area_name,
|
||||
"crs": "EPSG:4326",
|
||||
"geometry": {"type": "MultiPolygon", "coordinates": [[ring]]},
|
||||
}
|
||||
with open(path, "w", encoding="utf-8") as handle:
|
||||
json.dump(payload, handle)
|
||||
PY
|
||||
curl -fsS -X POST "${BASE_URL%/}/api/v1/projects/${project_id}/areas" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data-binary "@${TMP_DIR}/area_request.json" > "${TMP_DIR}/area.json"
|
||||
require_json_data "${TMP_DIR}/area.json"
|
||||
area_id="$(json_field "${TMP_DIR}/area.json" "data.id")"
|
||||
if [ -z "${area_id}" ] || [ "${area_id}" = "None" ] || [ "${area_id}" = "null" ]; then
|
||||
echo "Area creation did not return an area id" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
curl -fsS -X POST "${BASE_URL%/}/api/v1/projects/${project_id}/datasets/upload" \
|
||||
-F "file=@${REAL_RASTER_PATH}" \
|
||||
-F "dataset_type=raster" \
|
||||
@@ -494,6 +535,7 @@ PY
|
||||
|
||||
echo "Real data detection + QA workflow verification passed"
|
||||
echo "Project: ${project_id}"
|
||||
echo "Area: ${area_id}"
|
||||
echo "Raster dataset: ${raster_dataset_id}"
|
||||
echo "Reference dataset: ${reference_dataset_id}"
|
||||
echo "Model asset: ${model_asset_id}"
|
||||
|
||||
Reference in New Issue
Block a user