From fb1b9a10ec819384d2fc2a863c68eb16bc884eb5 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Wed, 26 Aug 2026 11:35:40 +0200 Subject: [PATCH 01/17] fix identifiers to match the same rule create workflow for publishing all apps --- .github/ci/publish_oakapp/README.md | 23 ++- .github/ci/publish_oakapp/publish_oakapp.sh | 35 +++- .github/publish_oakapps.txt | 16 ++ .github/workflows/publish_oakapp.yaml | 2 +- .github/workflows/publish_oakapps.yaml | 194 ++++++++++++++++++ apps/object-volume-measurement-3d/oakapp.toml | 2 +- camera-controls/lossless-zooming/oakapp.toml | 2 +- .../oakapp.toml | 8 +- .../face-detection/age-gender/oakapp.toml | 2 +- .../spatial-detections/oakapp.toml | 2 +- neural-networks/ocr/general-ocr/oakapp.toml | 2 +- .../pose-estimation/hand-pose/oakapp.toml | 2 +- .../segmentation/depth-crop/oakapp.toml | 2 +- 13 files changed, 272 insertions(+), 20 deletions(-) create mode 100644 .github/publish_oakapps.txt create mode 100644 .github/workflows/publish_oakapps.yaml diff --git a/.github/ci/publish_oakapp/README.md b/.github/ci/publish_oakapp/README.md index 16f2f1eaa..1b9955975 100644 --- a/.github/ci/publish_oakapp/README.md +++ b/.github/ci/publish_oakapp/README.md @@ -18,10 +18,11 @@ OAKCTL_HUB_TOKEN="your_token_here" \ Optional environment variables: -- `LUXONIS_OFFICIAL=true` to replace `com.example` with `com.luxonis` - on the `identifier` line. Defaults to `true`. +- `LUXONIS_OFFICIAL_IDENTIFIER=true` to replace + `com.example.` with `com.luxonis` on the `identifier` + line. Defaults to `true`. - `NEW_IDENTIFIER="com.luxonis.myapp"` to override the `identifier` - line (takes precedence over `LUXONIS_OFFICIAL`). + line (takes precedence over `LUXONIS_OFFICIAL_IDENTIFIER`). Notes: @@ -30,3 +31,19 @@ Notes: file on exit, even if the run fails. - This performs a real publish; consider using a temp copy of an example if you want to avoid touching your working tree. + +## Bulk publishing + +The `Publish OAK Apps` workflow publishes the curated list in +`.github/publish_oakapps.txt`. Run it from GitHub Actions with an optional +comma-separated `exclude_apps` input. Set `dry_run` to validate the list and +show the identifier plan without reserving a testbed or publishing. + +For example, from the repository root: + +```bash +gh workflow run publish_oakapps.yaml \ + --repo luxonis/oak-examples \ + --ref main \ + -f exclude_apps=apps/dino-tracking,neural-networks/ocr/general-ocr +``` diff --git a/.github/ci/publish_oakapp/publish_oakapp.sh b/.github/ci/publish_oakapp/publish_oakapp.sh index 369c05605..a1ffd73e9 100755 --- a/.github/ci/publish_oakapp/publish_oakapp.sh +++ b/.github/ci/publish_oakapp/publish_oakapp.sh @@ -29,9 +29,19 @@ fi cd "$ROOT_DIR" +ROOT_DIR_FOR_IDENTIFIER="${ROOT_DIR#./}" +TOP_LEVEL_FOLDER="${ROOT_DIR_FOR_IDENTIFIER%%/*}" + OAKAPP_TOML="oakapp.toml" OAKAPP_BACKUP="$(mktemp)" OAKAPP_FILE="" +OAKAPP_EDITED_TMP="${OAKAPP_TOML}.tmp" + +replace_identifier() { + local target_identifier="$1" + sed -E "s|^[[:space:]]*identifier[[:space:]]*=.*|identifier = \"${target_identifier}\"|" "$OAKAPP_TOML" > "$OAKAPP_EDITED_TMP" + mv "$OAKAPP_EDITED_TMP" "$OAKAPP_TOML" +} cleanup() { set +e @@ -42,6 +52,9 @@ cleanup() { if [[ -n "$OAKAPP_FILE" && -f "$OAKAPP_FILE" ]]; then rm -f "$OAKAPP_FILE" fi + if [[ -f "$OAKAPP_EDITED_TMP" ]]; then + rm -f "$OAKAPP_EDITED_TMP" + fi } trap cleanup EXIT @@ -49,17 +62,31 @@ trap cleanup EXIT cp "$OAKAPP_TOML" "$OAKAPP_BACKUP" if [[ -n "$NEW_IDENTIFIER" ]]; then - if ! grep -qE '^identifier\s*=' "$OAKAPP_TOML"; then + if [[ ! "$NEW_IDENTIFIER" =~ ^[A-Za-z0-9][A-Za-z0-9._-]*$ ]]; then + echo "Invalid identifier: $NEW_IDENTIFIER" >&2 + exit 1 + fi + if ! grep -qE '^identifier[[:space:]]*=' "$OAKAPP_TOML"; then echo "identifier not found in $OAKAPP_TOML" >&2 exit 1 fi - sed -i -E "s/^identifier\\s*=.*/identifier = \"${NEW_IDENTIFIER}\"/" "$OAKAPP_TOML" + replace_identifier "$NEW_IDENTIFIER" elif [[ "$LUXONIS_OFFICIAL_IDENTIFIER" == "true" ]]; then - if ! grep -qE '^identifier\s*=' "$OAKAPP_TOML"; then + if ! grep -qE '^identifier[[:space:]]*=' "$OAKAPP_TOML"; then echo "identifier not found in $OAKAPP_TOML" >&2 exit 1 fi - sed -i -E '/^identifier\s*=/{s/com\.example/com.luxonis/}' "$OAKAPP_TOML" + CURRENT_IDENTIFIER=$(sed -n -E 's/^[[:space:]]*identifier[[:space:]]*=[[:space:]]*"([^"]*)".*$/\1/p' "$OAKAPP_TOML" | head -n 1) + IDENTIFIER_PREFIX="com.example.${TOP_LEVEL_FOLDER}." + if [[ "$CURRENT_IDENTIFIER" == com.luxonis.* ]]; then + echo "Identifier is already in the com.luxonis namespace; leaving it unchanged: ${CURRENT_IDENTIFIER}" + elif [[ "$CURRENT_IDENTIFIER" == "$IDENTIFIER_PREFIX"* ]]; then + TARGET_IDENTIFIER="com.luxonis.${CURRENT_IDENTIFIER#"$IDENTIFIER_PREFIX"}" + replace_identifier "$TARGET_IDENTIFIER" + else + echo "Identifier does not use the expected '${IDENTIFIER_PREFIX}' prefix: ${CURRENT_IDENTIFIER}" >&2 + exit 1 + fi fi if ! command -v oakctl >/dev/null 2>&1; then diff --git a/.github/publish_oakapps.txt b/.github/publish_oakapps.txt new file mode 100644 index 000000000..a2baef432 --- /dev/null +++ b/.github/publish_oakapps.txt @@ -0,0 +1,16 @@ +# Curated set of OAK Apps published by the bulk release workflow. +# Paths are relative to the repository root. Keep one app per line. +apps/object-volume-measurement-3d +apps/people-demographics-and-sentiment-analysis +apps/qr-tiling +apps/dino-tracking +apps/data-collection +apps/focused-vision +apps/p2p-measurement +custom-frontend/open-vocabulary-object-detection +camera-controls/lossless-zooming +neural-networks/ocr/general-ocr +neural-networks/face-detection/age-gender +neural-networks/segmentation/depth-crop +neural-networks/pose-estimation/hand-pose +neural-networks/object-detection/spatial-detections diff --git a/.github/workflows/publish_oakapp.yaml b/.github/workflows/publish_oakapp.yaml index 40bc8d25f..87a30b427 100644 --- a/.github/workflows/publish_oakapp.yaml +++ b/.github/workflows/publish_oakapp.yaml @@ -8,7 +8,7 @@ on: type: string required: true new_identifier: - description: "Override whole identifier value in oakapp.toml. By default only `com.example` will be replaced by `com.luxonis`" + description: "Override identifier. Otherwise com.example. becomes com.luxonis" type: string required: false diff --git a/.github/workflows/publish_oakapps.yaml b/.github/workflows/publish_oakapps.yaml new file mode 100644 index 000000000..9b1a43629 --- /dev/null +++ b/.github/workflows/publish_oakapps.yaml @@ -0,0 +1,194 @@ +name: Publish OAK Apps + +on: + workflow_dispatch: + inputs: + exclude_apps: + description: "Comma-separated app paths to exclude from the curated publish list." + type: string + required: false + dry_run: + description: "Validate and show the publish plan without reserving a testbed or publishing." + type: boolean + default: false + required: false + +concurrency: + group: publish-oakapps + cancel-in-progress: false + +permissions: + contents: read + +jobs: + select: + name: Select apps + runs-on: ubuntu-latest + outputs: + apps: ${{ steps.select.outputs.apps }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Resolve publish list + id: select + env: + EXCLUDE_APPS: ${{ inputs.exclude_apps }} + run: | + set -euo pipefail + + manifest=".github/publish_oakapps.txt" + if [[ ! -f "$manifest" ]]; then + echo "Publish manifest not found: $manifest" >&2 + exit 1 + fi + + mapfile -t manifest_apps < <( + sed -E 's/[[:space:]]*#.*$//' "$manifest" | + sed -E 's/^[[:space:]]+|[[:space:]]+$//g' | + sed '/^$/d' + ) + + if [[ "${#manifest_apps[@]}" -eq 0 ]]; then + echo "Publish manifest is empty." >&2 + exit 1 + fi + + contains_app() { + local needle="$1" + local candidate + for candidate in "${manifest_apps[@]}"; do + if [[ "$candidate" == "$needle" ]]; then + return 0 + fi + done + return 1 + } + + declare -A excluded=() + if [[ -n "${EXCLUDE_APPS:-}" ]]; then + IFS=',' read -ra requested_exclusions <<< "$EXCLUDE_APPS" + for raw_app in "${requested_exclusions[@]}"; do + app=$(printf '%s' "$raw_app" | sed -E 's/^[[:space:]]+|[[:space:]]+$//g') + if [[ -z "$app" ]]; then + echo "Empty app path in exclude_apps: '$EXCLUDE_APPS'" >&2 + exit 1 + fi + if ! contains_app "$app"; then + echo "Excluded app is not in the publish manifest: $app" >&2 + exit 1 + fi + if [[ -n "${excluded[$app]+x}" ]]; then + echo "Duplicate app in exclude_apps: $app" >&2 + exit 1 + fi + excluded["$app"]=1 + done + fi + + declare -A target_identifiers=() + selected_apps=() + for app in "${manifest_apps[@]}"; do + if [[ -n "${excluded[$app]+x}" ]]; then + continue + fi + if [[ ! -d "$app" || ! -f "$app/oakapp.toml" ]]; then + echo "Manifest app is missing its directory or oakapp.toml: $app" >&2 + exit 1 + fi + selected_apps+=("$app") + + identifier=$(sed -n -E 's/^[[:space:]]*identifier[[:space:]]*=[[:space:]]*"([^"]*)".*/\1/p' "$app/oakapp.toml" | head -n 1) + top_level="${app%%/*}" + prefix="com.example.${top_level}." + if [[ "$identifier" != "$prefix"* ]]; then + echo "App identifier does not use the expected '${prefix}' prefix: $app ($identifier)" >&2 + exit 1 + fi + target_identifier="com.luxonis.${identifier#"$prefix"}" + if [[ -n "${target_identifiers[$target_identifier]+x}" ]]; then + echo "Duplicate target identifier '${target_identifier}' for app: $app" >&2 + exit 1 + fi + target_identifiers["$target_identifier"]="$app" + done + + if [[ "${#selected_apps[@]}" -eq 0 ]]; then + echo "No apps remain after applying exclude_apps." >&2 + exit 1 + fi + + echo "Publish plan:" + for app in "${selected_apps[@]}"; do + identifier=$(sed -n -E 's/^[[:space:]]*identifier[[:space:]]*=[[:space:]]*"([^"]*)".*/\1/p' "$app/oakapp.toml" | head -n 1) + app_version=$(sed -n -E 's/^[[:space:]]*app_version[[:space:]]*=[[:space:]]*"([^"]*)".*/\1/p' "$app/oakapp.toml" | head -n 1) + if [[ -z "$app_version" ]]; then + echo "App version is missing: $app" >&2 + exit 1 + fi + top_level="${app%%/*}" + prefix="com.example.${top_level}." + target_identifier="com.luxonis.${identifier#"$prefix"}" + printf ' %s (version %s): %s -> %s\n' "$app" "$app_version" "$identifier" "$target_identifier" + done + + matrix_json=$(printf '%s\n' "${selected_apps[@]}" | jq -Rsc 'split("\n") | map(select(length > 0))') + echo "apps=$matrix_json" >> "$GITHUB_OUTPUT" + + { + echo "### OAK App publish plan" + echo + echo '```text' + printf '%s\n' "${selected_apps[@]}" + echo '```' + } >> "$GITHUB_STEP_SUMMARY" + + publish: + name: Publish ${{ matrix.app }} + needs: select + if: ${{ inputs.dry_run == false }} + runs-on: ['self-hosted', 'testbed-runner'] + strategy: + fail-fast: false + max-parallel: 3 + matrix: + app: ${{ fromJSON(needs.select.outputs.apps) }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + cache: pip + + - name: Install HIL + run: | + pip install hil_framework --upgrade --index-url https://__token__:${{ secrets.GITLAB_TOKEN }}@gitlab.luxonis.com/api/v4/projects/213/packages/pypi/simple + + - name: Publish app via HIL runner + env: + ROOT_DIR: ${{ matrix.app }} + OAKCTL_HUB_TOKEN: ${{ secrets.OAKCTL_HUB_TOKEN }} + run: | + set -euo pipefail + app_slug="${ROOT_DIR//\//-}" + reservation_name="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}#publish-oakapp-${app_slug}" + + ENV_VARS="\ + --env ROOT_DIR=$ROOT_DIR \ + --env OAKCTL_HUB_TOKEN=$OAKCTL_HUB_TOKEN" + + exec hil_runner --models "oak4_pro or oak4_d" --reservation-name "$reservation_name" --wait --oakctl --sync-workspace \ + --dockerfile ./.github/ci/publish_oakapp/Dockerfile \ + --docker-run-args "$ENV_VARS" + + - name: Record result + if: ${{ always() }} + run: | + { + echo "### ${{ matrix.app }}" + echo + echo "Result: ${{ job.status }}" + } >> "$GITHUB_STEP_SUMMARY" diff --git a/apps/object-volume-measurement-3d/oakapp.toml b/apps/object-volume-measurement-3d/oakapp.toml index 10d85ae2f..13340aae2 100644 --- a/apps/object-volume-measurement-3d/oakapp.toml +++ b/apps/object-volume-measurement-3d/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.apps.object-volume-measurement-3d" +identifier = "com.example.apps.extended-3d-measurement" entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] app_version = "1.1.0" diff --git a/camera-controls/lossless-zooming/oakapp.toml b/camera-controls/lossless-zooming/oakapp.toml index bc649bd4b..990f9633c 100644 --- a/camera-controls/lossless-zooming/oakapp.toml +++ b/camera-controls/lossless-zooming/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.camere-controls.lossless-zooming" +identifier = "com.example.camera-controls.lossless-zooming" entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] app_version = "1.1.0" assign_frontend_port = true diff --git a/custom-frontend/open-vocabulary-object-detection/oakapp.toml b/custom-frontend/open-vocabulary-object-detection/oakapp.toml index b3712714f..745705329 100644 --- a/custom-frontend/open-vocabulary-object-detection/oakapp.toml +++ b/custom-frontend/open-vocabulary-object-detection/oakapp.toml @@ -1,8 +1,6 @@ -identifier = "com.luxonis.custom-frontend.open-vocabulary-object-detection" -# /entrypoint.sh starts runsvdir for /etc/service, including our backend service. -# Keep PID 1 alive without starting a competing supervisor. -entrypoint = ["/entrypoint.sh", "tail", "-f", "/dev/null"] -app_version = "1.0.3" +identifier = "com.example.custom-frontend.open-vocabulary-object-detection" +entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +app_version = "1.1.0" prepare_container = [ { type = "COPY", source = "./backend/requirements.txt", target = "./backend/requirements.txt" }, diff --git a/neural-networks/face-detection/age-gender/oakapp.toml b/neural-networks/face-detection/age-gender/oakapp.toml index e074b39e9..1bd73b376 100644 --- a/neural-networks/face-detection/age-gender/oakapp.toml +++ b/neural-networks/face-detection/age-gender/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.face-detection.age-gender" +identifier = "com.example.neural-networks.face-detection.age-gender" entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] app_version = "1.1.0" assign_frontend_port = true diff --git a/neural-networks/object-detection/spatial-detections/oakapp.toml b/neural-networks/object-detection/spatial-detections/oakapp.toml index 08cbf368c..60d356b93 100644 --- a/neural-networks/object-detection/spatial-detections/oakapp.toml +++ b/neural-networks/object-detection/spatial-detections/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.spatial-detections" +identifier = "com.example.neural-networks.object-detection.spatial-detections" entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] app_version = "1.1.0" assign_frontend_port = true diff --git a/neural-networks/ocr/general-ocr/oakapp.toml b/neural-networks/ocr/general-ocr/oakapp.toml index 22adb4b8c..677457801 100644 --- a/neural-networks/ocr/general-ocr/oakapp.toml +++ b/neural-networks/ocr/general-ocr/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.ocr.general-ocr" +identifier = "com.example.neural-networks.ocr.general-ocr" entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] app_version = "1.1.0" assign_frontend_port = true diff --git a/neural-networks/pose-estimation/hand-pose/oakapp.toml b/neural-networks/pose-estimation/hand-pose/oakapp.toml index f84220acc..a8d5e074a 100644 --- a/neural-networks/pose-estimation/hand-pose/oakapp.toml +++ b/neural-networks/pose-estimation/hand-pose/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.pose-estimation.hand-pose" +identifier = "com.example.neural-networks.pose-estimation.hand-pose" entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] app_version = "1.1.0" assign_frontend_port = true diff --git a/neural-networks/segmentation/depth-crop/oakapp.toml b/neural-networks/segmentation/depth-crop/oakapp.toml index 75411270d..fc38716ea 100644 --- a/neural-networks/segmentation/depth-crop/oakapp.toml +++ b/neural-networks/segmentation/depth-crop/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.segmentation.depth-crop" +identifier = "com.example.neural-networks.segmentation.depth-crop" entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] app_version = "1.1.0" assign_frontend_port = true From 4d74655c72d7f3e8cda0e26af19a3678b16e954e Mon Sep 17 00:00:00 2001 From: petrnovota Date: Wed, 26 Aug 2026 12:58:05 +0200 Subject: [PATCH 02/17] update how oakapps are run to match the base image way of handling that --- .../rgb-depth-connections/backend-run.sh | 3 --- .../rgb-depth-connections/oakapp.toml | 9 +-------- apps/data-collection/backend-run.sh | 3 --- apps/data-collection/oakapp.toml | 11 ++--------- apps/default-app/AGENTS.md | 1 - apps/default-app/backend-run.sh | 3 --- apps/default-app/oakapp.toml | 9 +-------- apps/dino-tracking/backend-run.sh | 3 --- apps/dino-tracking/oakapp.toml | 10 ++-------- apps/focused-vision/backend-run.sh | 3 --- apps/focused-vision/oakapp.toml | 7 +------ apps/object-volume-measurement-3d/backend-run.sh | 3 --- apps/object-volume-measurement-3d/oakapp.toml | 10 ++-------- apps/p2p-measurement/backend-run.sh | 3 --- apps/p2p-measurement/oakapp.toml | 7 +------ .../backend-run.sh | 3 --- .../oakapp.toml | 9 ++------- apps/qr-tiling/backend-run.sh | 3 --- apps/qr-tiling/oakapp.toml | 9 ++------- camera-controls/lossless-zooming/AGENTS.md | 1 - camera-controls/lossless-zooming/backend-run.sh | 3 --- camera-controls/lossless-zooming/oakapp.toml | 9 +-------- cpp/camera_stream/AGENTS.md | 3 +-- cpp/camera_stream/backend-run.sh | 3 --- cpp/camera_stream/oakapp.toml | 6 +----- .../open-vocabulary-object-detection/README.md | 6 +++--- .../open-vocabulary-object-detection/backend-run.sh | 3 --- .../open-vocabulary-object-detection/oakapp.toml | 7 +------ depth-measurement/calc-spatial-on-host/oakapp.toml | 6 ++---- .../stereo-runtime-configuration/oakapp.toml | 6 ++---- depth-measurement/triangulation/AGENTS.md | 5 ++--- depth-measurement/triangulation/backend-run.sh | 3 --- depth-measurement/triangulation/oakapp.toml | 9 +-------- integrations/hub-snaps-events/oakapp.toml | 6 ++---- integrations/roboflow-workflow/AGENTS.md | 2 +- integrations/roboflow-workflow/backend-run.sh | 6 ------ integrations/roboflow-workflow/oakapp.toml | 8 ++++---- .../crestereo-depth-matching/oakapp.toml | 6 ++---- .../depth-estimation/neural-depth/oakapp.toml | 6 ++---- neural-networks/face-detection/age-gender/AGENTS.md | 2 +- .../face-detection/age-gender/backend-run.sh | 3 --- neural-networks/face-detection/age-gender/oakapp.toml | 9 +-------- .../object-detection/spatial-detections/AGENTS.md | 2 +- .../spatial-detections/backend-run.sh | 3 --- .../object-detection/spatial-detections/oakapp.toml | 9 +-------- neural-networks/ocr/general-ocr/AGENTS.md | 2 +- neural-networks/ocr/general-ocr/backend-run.sh | 3 --- neural-networks/ocr/general-ocr/oakapp.toml | 9 +-------- neural-networks/pose-estimation/hand-pose/AGENTS.md | 2 +- .../pose-estimation/hand-pose/backend-run.sh | 3 --- neural-networks/pose-estimation/hand-pose/oakapp.toml | 9 +-------- neural-networks/segmentation/depth-crop/AGENTS.md | 2 +- .../segmentation/depth-crop/backend-run.sh | 3 --- neural-networks/segmentation/depth-crop/oakapp.toml | 9 +-------- streaming/on-device-encoding/AGENTS.md | 3 +-- streaming/on-device-encoding/backend-run.sh | 3 --- streaming/on-device-encoding/oakapp.toml | 11 ++--------- streaming/rtsp-streaming/AGENTS.md | 3 +-- streaming/rtsp-streaming/backend-run.sh | 3 --- streaming/rtsp-streaming/oakapp.toml | 11 ++--------- tutorials/camera-demo/AGENTS.md | 3 +-- tutorials/camera-demo/backend-run.sh | 3 --- tutorials/camera-demo/oakapp.toml | 9 +-------- tutorials/camera-depth/AGENTS.md | 3 +-- tutorials/camera-depth/backend-run.sh | 3 --- tutorials/camera-depth/oakapp.toml | 11 ++--------- tutorials/play-encoded-stream/AGENTS.md | 2 +- tutorials/play-encoded-stream/backend-run.sh | 3 --- tutorials/play-encoded-stream/oakapp.toml | 9 +-------- 69 files changed, 62 insertions(+), 301 deletions(-) delete mode 100644 apps/conference-demos/rgb-depth-connections/backend-run.sh delete mode 100644 apps/default-app/backend-run.sh delete mode 100644 apps/dino-tracking/backend-run.sh delete mode 100644 apps/focused-vision/backend-run.sh delete mode 100644 apps/object-volume-measurement-3d/backend-run.sh delete mode 100644 apps/people-demographics-and-sentiment-analysis/backend-run.sh delete mode 100644 apps/qr-tiling/backend-run.sh delete mode 100644 camera-controls/lossless-zooming/backend-run.sh delete mode 100644 cpp/camera_stream/backend-run.sh delete mode 100644 depth-measurement/triangulation/backend-run.sh delete mode 100644 neural-networks/face-detection/age-gender/backend-run.sh delete mode 100644 neural-networks/object-detection/spatial-detections/backend-run.sh delete mode 100644 neural-networks/ocr/general-ocr/backend-run.sh delete mode 100644 neural-networks/pose-estimation/hand-pose/backend-run.sh delete mode 100644 neural-networks/segmentation/depth-crop/backend-run.sh delete mode 100644 streaming/on-device-encoding/backend-run.sh delete mode 100644 streaming/rtsp-streaming/backend-run.sh delete mode 100644 tutorials/camera-demo/backend-run.sh delete mode 100644 tutorials/play-encoded-stream/backend-run.sh diff --git a/apps/conference-demos/rgb-depth-connections/backend-run.sh b/apps/conference-demos/rgb-depth-connections/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/apps/conference-demos/rgb-depth-connections/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/apps/conference-demos/rgb-depth-connections/oakapp.toml b/apps/conference-demos/rgb-depth-connections/oakapp.toml index b8646aa31..c049e1c8c 100644 --- a/apps/conference-demos/rgb-depth-connections/oakapp.toml +++ b/apps/conference-demos/rgb-depth-connections/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.conference-demos.rgb-depth-connections" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/apps/data-collection/backend-run.sh b/apps/data-collection/backend-run.sh index 050049bfc..e69de29bb 100644 --- a/apps/data-collection/backend-run.sh +++ b/apps/data-collection/backend-run.sh @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3 /app/backend/src/main.py \ No newline at end of file diff --git a/apps/data-collection/oakapp.toml b/apps/data-collection/oakapp.toml index b5af1cce4..6f0333440 100644 --- a/apps/data-collection/oakapp.toml +++ b/apps/data-collection/oakapp.toml @@ -1,8 +1,6 @@ identifier = "com.example.apps.data-collection" -# /entrypoint.sh starts runsvdir for /etc/service, including our backend service. -# Keep PID 1 alive without starting a competing supervisor. -entrypoint = ["/entrypoint.sh", "tail", "-f", "/dev/null"] -app_version = "1.0.0" +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] +app_version = "1.1.0" prepare_container = [ { type = "COPY", source = "./backend/requirements.txt", target = "./backend/requirements.txt" }, @@ -10,11 +8,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] depthai_models = { yaml_path = "./backend/src/depthai_models" } diff --git a/apps/default-app/AGENTS.md b/apps/default-app/AGENTS.md index 265dec289..68a41b3f0 100644 --- a/apps/default-app/AGENTS.md +++ b/apps/default-app/AGENTS.md @@ -39,7 +39,6 @@ This is the baseline packaged application in the repository. It is the best refe - [utils/arguments.py](utils/arguments.py): CLI surface - [depthai_models/yolov6_nano_r2_coco.RVC2.yaml](depthai_models/yolov6_nano_r2_coco.RVC2.yaml): default RVC2 model descriptor - [depthai_models/yolov6_nano_r2_coco.RVC4.yaml](depthai_models/yolov6_nano_r2_coco.RVC4.yaml): default RVC4 model descriptor -- [backend-run.sh](backend-run.sh): backend command used in standalone mode - [oakapp.toml](oakapp.toml): standalone packaging and model bundle wiring ## Architecture diff --git a/apps/default-app/backend-run.sh b/apps/default-app/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/apps/default-app/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/apps/default-app/oakapp.toml b/apps/default-app/oakapp.toml index 729f5f1c7..07b0c9456 100644 --- a/apps/default-app/oakapp.toml +++ b/apps/default-app/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.default-app" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/apps/dino-tracking/backend-run.sh b/apps/dino-tracking/backend-run.sh deleted file mode 100644 index dbbada4d4..000000000 --- a/apps/dino-tracking/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/backend/src/main.py \ No newline at end of file diff --git a/apps/dino-tracking/oakapp.toml b/apps/dino-tracking/oakapp.toml index c0390dd6d..ca74b804e 100644 --- a/apps/dino-tracking/oakapp.toml +++ b/apps/dino-tracking/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.dino-tracking" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" prepare_container = [ @@ -8,11 +8,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] [static_frontend] dist_path = "./frontend/dist" @@ -21,7 +16,6 @@ dist_path = "./frontend/dist" source_path = "./frontend" steps = ["bash -c 'cd /app/frontend/src && export NODE_OPTIONS=--max-old-space-size=4096 && . $HOME/.nvm/nvm.sh && npm install && npm run build'"] - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" @@ -29,4 +23,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/apps/focused-vision/backend-run.sh b/apps/focused-vision/backend-run.sh deleted file mode 100644 index dbbada4d4..000000000 --- a/apps/focused-vision/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/backend/src/main.py \ No newline at end of file diff --git a/apps/focused-vision/oakapp.toml b/apps/focused-vision/oakapp.toml index 3a85ed7af..f939a3efa 100644 --- a/apps/focused-vision/oakapp.toml +++ b/apps/focused-vision/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.focused-vision" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" prepare_container = [ @@ -8,11 +8,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] depthai_models = { yaml_path = "./backend/src/depthai_models" } diff --git a/apps/object-volume-measurement-3d/backend-run.sh b/apps/object-volume-measurement-3d/backend-run.sh deleted file mode 100644 index 71611722a..000000000 --- a/apps/object-volume-measurement-3d/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.11 /app/backend/src/main.py \ No newline at end of file diff --git a/apps/object-volume-measurement-3d/oakapp.toml b/apps/object-volume-measurement-3d/oakapp.toml index 13340aae2..a511e3833 100644 --- a/apps/object-volume-measurement-3d/oakapp.toml +++ b/apps/object-volume-measurement-3d/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.extended-3d-measurement" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" storage_dir_name = "storage" @@ -9,12 +9,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./backend/src/depthai_models" } [static_frontend] @@ -34,4 +28,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0-py311" \ No newline at end of file +image_tag = "1.3.0-py311" diff --git a/apps/p2p-measurement/backend-run.sh b/apps/p2p-measurement/backend-run.sh index 71611722a..e69de29bb 100644 --- a/apps/p2p-measurement/backend-run.sh +++ b/apps/p2p-measurement/backend-run.sh @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.11 /app/backend/src/main.py \ No newline at end of file diff --git a/apps/p2p-measurement/oakapp.toml b/apps/p2p-measurement/oakapp.toml index 3764e4344..7039379e8 100644 --- a/apps/p2p-measurement/oakapp.toml +++ b/apps/p2p-measurement/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.p2p-measurement" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" storage_dir_name = "storage" @@ -9,11 +9,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] [static_frontend] dist_path = "./frontend/dist" diff --git a/apps/people-demographics-and-sentiment-analysis/backend-run.sh b/apps/people-demographics-and-sentiment-analysis/backend-run.sh deleted file mode 100644 index 088d156f5..000000000 --- a/apps/people-demographics-and-sentiment-analysis/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/backend/src/main.py diff --git a/apps/people-demographics-and-sentiment-analysis/oakapp.toml b/apps/people-demographics-and-sentiment-analysis/oakapp.toml index 05d3c1b50..b429f154f 100644 --- a/apps/people-demographics-and-sentiment-analysis/oakapp.toml +++ b/apps/people-demographics-and-sentiment-analysis/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.people-demographic-sentiment-analysis" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" prepare_container = [ @@ -8,11 +8,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] [static_frontend] dist_path = "./frontend/dist" @@ -31,4 +26,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/apps/qr-tiling/backend-run.sh b/apps/qr-tiling/backend-run.sh deleted file mode 100644 index dbbada4d4..000000000 --- a/apps/qr-tiling/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/backend/src/main.py \ No newline at end of file diff --git a/apps/qr-tiling/oakapp.toml b/apps/qr-tiling/oakapp.toml index 0d5f2264d..528895cf2 100644 --- a/apps/qr-tiling/oakapp.toml +++ b/apps/qr-tiling/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.apps.qr-tiling" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" prepare_container = [ @@ -10,11 +10,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] depthai_models = { yaml_path = "./backend/src/depthai_models" } @@ -36,4 +31,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/camera-controls/lossless-zooming/AGENTS.md b/camera-controls/lossless-zooming/AGENTS.md index 9dfc41bf8..0b70fe27e 100644 --- a/camera-controls/lossless-zooming/AGENTS.md +++ b/camera-controls/lossless-zooming/AGENTS.md @@ -40,7 +40,6 @@ This is the best reference in the repo for lossless digital zoom implemented as - [utils/arguments.py](utils/arguments.py): CLI surface - [depthai_models/yunet.RVC2.yaml](depthai_models/yunet.RVC2.yaml): RVC2 model descriptor - [depthai_models/yunet.RVC4.yaml](depthai_models/yunet.RVC4.yaml): RVC4 model descriptor -- [backend-run.sh](backend-run.sh): standalone backend command - [oakapp.toml](oakapp.toml): standalone packaging path ## Architecture diff --git a/camera-controls/lossless-zooming/backend-run.sh b/camera-controls/lossless-zooming/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/camera-controls/lossless-zooming/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/camera-controls/lossless-zooming/oakapp.toml b/camera-controls/lossless-zooming/oakapp.toml index 990f9633c..196f2df81 100644 --- a/camera-controls/lossless-zooming/oakapp.toml +++ b/camera-controls/lossless-zooming/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.camera-controls.lossless-zooming" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/cpp/camera_stream/AGENTS.md b/cpp/camera_stream/AGENTS.md index 2037629e6..c82618085 100644 --- a/cpp/camera_stream/AGENTS.md +++ b/cpp/camera_stream/AGENTS.md @@ -38,7 +38,6 @@ This is the smallest C++ example in the repository. It is the best reference whe - [src/main.cpp](src/main.cpp): entire runtime pipeline - [CMakeLists.txt](CMakeLists.txt): host build shape and `depthai::core` linkage - [oakapp.toml](oakapp.toml): standalone build steps and `cpp` base image -- [backend-run.sh](backend-run.sh): packaged app startup command - [README.md](README.md): host and standalone run instructions ## Architecture @@ -64,7 +63,7 @@ This is the smallest C++ example in the repository. It is the best reference whe - `To add another topic:` request another output and register it in [src/main.cpp](src/main.cpp) - `To change resolution or frame type:` edit the `requestOutput(...)` call in [src/main.cpp](src/main.cpp) -- `To use this as a packaged C++ baseline:` keep [CMakeLists.txt](CMakeLists.txt), [oakapp.toml](oakapp.toml), and [backend-run.sh](backend-run.sh), then expand only [src/main.cpp](src/main.cpp) +- `To use this as a packaged C++ baseline:` keep [CMakeLists.txt](CMakeLists.txt) and [oakapp.toml](oakapp.toml), then expand only [src/main.cpp](src/main.cpp) - `To move toward device-only USB streaming:` compare against [cpp/uvc](https://github.com/luxonis/oak-examples/tree/main/cpp/uvc) ## Constraints diff --git a/cpp/camera_stream/backend-run.sh b/cpp/camera_stream/backend-run.sh deleted file mode 100644 index 502cbf616..000000000 --- a/cpp/camera_stream/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -/app/build/main diff --git a/cpp/camera_stream/oakapp.toml b/cpp/camera_stream/oakapp.toml index 43e680ca0..745a36e5c 100644 --- a/cpp/camera_stream/oakapp.toml +++ b/cpp/camera_stream/oakapp.toml @@ -1,18 +1,14 @@ identifier = "com.example.cpp.camera_stream" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "/app/build/main"] app_version = "1.1.0" build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", "cmake -S /app -B /app/build", "cmake --build /app/build", ] assign_frontend_port = true - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/custom-frontend/open-vocabulary-object-detection/README.md b/custom-frontend/open-vocabulary-object-detection/README.md index accd64994..797104efe 100644 --- a/custom-frontend/open-vocabulary-object-detection/README.md +++ b/custom-frontend/open-vocabulary-object-detection/README.md @@ -56,10 +56,10 @@ oakctl app run . Once the app is built and running you can access the DepthAI Viewer locally by opening `https://:9000/` in your browser (the exact URL will be shown in the terminal output). -This will run the example with default argument values (YOLOE model). If you want to change these values you need to edit the `backend-run.sh` file to pass the arguments to the backend. Example: +This will run the example with default argument values (YOLOE model). If you want to change these values, edit the `entrypoint` in `oakapp.toml` to pass the arguments to the backend. Example: -```bash -python3.12 /app/backend/src/main.py --model yoloe --fps_limit 10 --semantic_seg +```toml +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py", "--model", "yoloe", "--fps_limit", "10", "--semantic_seg"] ``` ### Remote access diff --git a/custom-frontend/open-vocabulary-object-detection/backend-run.sh b/custom-frontend/open-vocabulary-object-detection/backend-run.sh index 050049bfc..e69de29bb 100644 --- a/custom-frontend/open-vocabulary-object-detection/backend-run.sh +++ b/custom-frontend/open-vocabulary-object-detection/backend-run.sh @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3 /app/backend/src/main.py \ No newline at end of file diff --git a/custom-frontend/open-vocabulary-object-detection/oakapp.toml b/custom-frontend/open-vocabulary-object-detection/oakapp.toml index 745705329..e313015ed 100644 --- a/custom-frontend/open-vocabulary-object-detection/oakapp.toml +++ b/custom-frontend/open-vocabulary-object-detection/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.custom-frontend.open-vocabulary-object-detection" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" prepare_container = [ @@ -9,11 +9,6 @@ prepare_container = [ ] prepare_build_container = [{type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'"}] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] depthai_models = { yaml_path = "./backend/src/depthai_models" } diff --git a/depth-measurement/calc-spatial-on-host/oakapp.toml b/depth-measurement/calc-spatial-on-host/oakapp.toml index 153491b7e..0c877150d 100644 --- a/depth-measurement/calc-spatial-on-host/oakapp.toml +++ b/depth-measurement/calc-spatial-on-host/oakapp.toml @@ -10,9 +10,7 @@ prepare_container = [ prepare_build_container = [] -build_steps = [] - -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] [base_image] api_url = "https://registry-1.docker.io" @@ -21,4 +19,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/depth-measurement/stereo-runtime-configuration/oakapp.toml b/depth-measurement/stereo-runtime-configuration/oakapp.toml index 8aab84042..5b9a0e3de 100644 --- a/depth-measurement/stereo-runtime-configuration/oakapp.toml +++ b/depth-measurement/stereo-runtime-configuration/oakapp.toml @@ -10,9 +10,7 @@ prepare_container = [ prepare_build_container = [] -build_steps = [] - -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] [base_image] api_url = "https://registry-1.docker.io" @@ -21,4 +19,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/depth-measurement/triangulation/AGENTS.md b/depth-measurement/triangulation/AGENTS.md index 6bc364fd5..3eac3a1be 100644 --- a/depth-measurement/triangulation/AGENTS.md +++ b/depth-measurement/triangulation/AGENTS.md @@ -24,7 +24,7 @@ This is the repo reference for stereo neural inference followed by host-side 3D - `Shape:` `script+standalone` - `Primary task:` run face detection on both stereo cameras and estimate 3D coordinates by triangulation - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` stereo-capable devices with `CAM_B` and `CAM_C` - `Requires:` stereo mono pair, calibration, and the platform-specific YuNet model bundle @@ -40,7 +40,6 @@ This is the repo reference for stereo neural inference followed by host-side 3D - [utils/host_triangulation.py](utils/host_triangulation.py): host node that draws overlays and computes triangulated outputs - [utils/stereo_inference.py](utils/stereo_inference.py): depth/disparity math used by the host node - [utils/arguments.py](utils/arguments.py): CLI surface -- [backend-run.sh](backend-run.sh): backend command for packaged runs - [oakapp.toml](oakapp.toml): standalone service packaging and model path ## Architecture @@ -79,7 +78,7 @@ This is the repo reference for stereo neural inference followed by host-side 3D - `To swap face detection for another keypoint-capable model:` replace the YuNet YAML/model and keep the same parsed-output contract - `To reuse only the combined overlay view:` keep [utils/host_triangulation.py](utils/host_triangulation.py) and simplify the side-specific topics - `To move back to depth-map-based spatial data:` use [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host) or [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) -- `To make the packaged run path your baseline:` start with [oakapp.toml](oakapp.toml) and [backend-run.sh](backend-run.sh) +- `To make the packaged run path your baseline:` start with [oakapp.toml](oakapp.toml) and [main.py](main.py) ## Constraints diff --git a/depth-measurement/triangulation/backend-run.sh b/depth-measurement/triangulation/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/depth-measurement/triangulation/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/depth-measurement/triangulation/oakapp.toml b/depth-measurement/triangulation/oakapp.toml index 598463b6e..0fa097305 100644 --- a/depth-measurement/triangulation/oakapp.toml +++ b/depth-measurement/triangulation/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.depth-measurement.triangulation" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/integrations/hub-snaps-events/oakapp.toml b/integrations/hub-snaps-events/oakapp.toml index 620a5d032..67430fdba 100644 --- a/integrations/hub-snaps-events/oakapp.toml +++ b/integrations/hub-snaps-events/oakapp.toml @@ -10,11 +10,9 @@ prepare_container = [ prepare_build_container = [] -build_steps = [] - depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py --api_key "] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py", "--api_key", ""] [base_image] api_url = "https://registry-1.docker.io" @@ -23,4 +21,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/integrations/roboflow-workflow/AGENTS.md b/integrations/roboflow-workflow/AGENTS.md index df89c4b76..da4c9d8fd 100644 --- a/integrations/roboflow-workflow/AGENTS.md +++ b/integrations/roboflow-workflow/AGENTS.md @@ -23,7 +23,7 @@ This is the strongest integration reference in the repository for running Robofl - `Shape:` `frontend` - `Primary task:` run Roboflow Workflow inference on live DepthAI frames and surface outputs in a custom frontend - `Entrypoint:` [backend/src/main.py](backend/src/main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` [frontend/src/App.tsx](frontend/src/App.tsx) - `Runs on:` documented as RVC4 standalone only - `Requires:` RVC4 device running Luxonis OS 1.40 or newer; valid Roboflow workflow config in [backend/src/config/yaml_configs/config.yaml](backend/src/config/yaml_configs/config.yaml); the `inference` package; and static frontend assets diff --git a/integrations/roboflow-workflow/backend-run.sh b/integrations/roboflow-workflow/backend-run.sh index 0db26f158..e69de29bb 100644 --- a/integrations/roboflow-workflow/backend-run.sh +++ b/integrations/roboflow-workflow/backend-run.sh @@ -1,6 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -# Use the classic ONNX Runtime execution path of `inference` - the default -# (torch-based `inference-models` backend) is significantly slower on ARM CPU. -export USE_INFERENCE_MODELS=False -exec python3.12 /app/backend/src/main.py diff --git a/integrations/roboflow-workflow/oakapp.toml b/integrations/roboflow-workflow/oakapp.toml index 0420d62b3..e4ef03d0c 100644 --- a/integrations/roboflow-workflow/oakapp.toml +++ b/integrations/roboflow-workflow/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.integrations.roboflow-workflow" -entrypoint = ["/entrypoint.sh", "bash", "/app/backend-run.sh"] +entrypoint = ["/entrypoint.sh", "python3.11", "-u", "/app/backend/src/main.py"] app_version = "3.1.0" # NPU (Hexagon DSP) passthrough for the released QNN runtime. @@ -32,12 +32,13 @@ prepare_build_container = [ { type = "RUN", command = "bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && . \"$HOME/.nvm/nvm.sh\" && nvm install 24'" } ] -build_steps = [] - [env] # Set EP=cpu to disable DSP acceleration; STRICT=1 makes QNN setup failures fatal. EP = "dsp" STRICT = "0" +# Use the classic ONNX Runtime execution path of `inference` - the default +# (torch-based `inference-models` backend) is significantly slower on ARM CPU. +USE_INFERENCE_MODELS = false [static_frontend] dist_path = "./frontend/dist" @@ -48,7 +49,6 @@ steps = [ "bash -c 'ulimit -n $(ulimit -Hn); cd /app/frontend && export NODE_OPTIONS=--max-old-space-size=4096 && . $HOME/.nvm/nvm.sh && npm install && npm run build'" ] - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml b/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml index e734cfc67..8e2e32b20 100644 --- a/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml +++ b/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml @@ -10,11 +10,9 @@ prepare_container = [ prepare_build_container = [] -build_steps = [] - depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] [base_image] api_url = "https://registry-1.docker.io" @@ -23,4 +21,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/neural-networks/depth-estimation/neural-depth/oakapp.toml b/neural-networks/depth-estimation/neural-depth/oakapp.toml index 1be081ce5..a9ae0d2be 100644 --- a/neural-networks/depth-estimation/neural-depth/oakapp.toml +++ b/neural-networks/depth-estimation/neural-depth/oakapp.toml @@ -10,9 +10,7 @@ prepare_container = [ prepare_build_container = [] -build_steps = [] - -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] [base_image] api_url = "https://registry-1.docker.io" @@ -21,4 +19,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/neural-networks/face-detection/age-gender/AGENTS.md b/neural-networks/face-detection/age-gender/AGENTS.md index 7245a56ab..58ba1a20b 100644 --- a/neural-networks/face-detection/age-gender/AGENTS.md +++ b/neural-networks/face-detection/age-gender/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for two-stage face analytics with age and gende - `Shape:` `script+standalone` - `Primary task:` face detection plus age/gender recognition - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` YuNet face detector and age/gender recognition models diff --git a/neural-networks/face-detection/age-gender/backend-run.sh b/neural-networks/face-detection/age-gender/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/neural-networks/face-detection/age-gender/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/neural-networks/face-detection/age-gender/oakapp.toml b/neural-networks/face-detection/age-gender/oakapp.toml index 1bd73b376..404927879 100644 --- a/neural-networks/face-detection/age-gender/oakapp.toml +++ b/neural-networks/face-detection/age-gender/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.neural-networks.face-detection.age-gender" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/neural-networks/object-detection/spatial-detections/AGENTS.md b/neural-networks/object-detection/spatial-detections/AGENTS.md index f6105aa31..d8d09d788 100644 --- a/neural-networks/object-detection/spatial-detections/AGENTS.md +++ b/neural-networks/object-detection/spatial-detections/AGENTS.md @@ -22,7 +22,7 @@ This is the repository’s standard reference for real-time object detections wi - `Shape:` `script+standalone` - `Primary task:` object detection with stereo spatial coordinates - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` devices with `CAM_A`, `CAM_B`, and `CAM_C`; RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` depth, calibration, and a compatible detection model diff --git a/neural-networks/object-detection/spatial-detections/backend-run.sh b/neural-networks/object-detection/spatial-detections/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/neural-networks/object-detection/spatial-detections/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/neural-networks/object-detection/spatial-detections/oakapp.toml b/neural-networks/object-detection/spatial-detections/oakapp.toml index 60d356b93..ef9fb116a 100644 --- a/neural-networks/object-detection/spatial-detections/oakapp.toml +++ b/neural-networks/object-detection/spatial-detections/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.neural-networks.object-detection.spatial-detections" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/neural-networks/ocr/general-ocr/AGENTS.md b/neural-networks/ocr/general-ocr/AGENTS.md index 33c41a619..c9b2db007 100644 --- a/neural-networks/ocr/general-ocr/AGENTS.md +++ b/neural-networks/ocr/general-ocr/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for a two-stage OCR pipeline: text detection fo - `Shape:` `script+standalone` - `Primary task:` general text detection and recognition - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` Paddle text-detection and text-recognition models diff --git a/neural-networks/ocr/general-ocr/backend-run.sh b/neural-networks/ocr/general-ocr/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/neural-networks/ocr/general-ocr/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/neural-networks/ocr/general-ocr/oakapp.toml b/neural-networks/ocr/general-ocr/oakapp.toml index 677457801..e42791542 100644 --- a/neural-networks/ocr/general-ocr/oakapp.toml +++ b/neural-networks/ocr/general-ocr/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.neural-networks.ocr.general-ocr" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/neural-networks/pose-estimation/hand-pose/AGENTS.md b/neural-networks/pose-estimation/hand-pose/AGENTS.md index acaa0d67b..c4f00b510 100644 --- a/neural-networks/pose-estimation/hand-pose/AGENTS.md +++ b/neural-networks/pose-estimation/hand-pose/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for hand pose plus gesture recognition. Use it - `Shape:` `script+standalone` - `Primary task:` palm detection plus hand landmark estimation and gesture recognition - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` MediaPipe palm-detection and hand-landmarker models diff --git a/neural-networks/pose-estimation/hand-pose/backend-run.sh b/neural-networks/pose-estimation/hand-pose/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/neural-networks/pose-estimation/hand-pose/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/neural-networks/pose-estimation/hand-pose/oakapp.toml b/neural-networks/pose-estimation/hand-pose/oakapp.toml index a8d5e074a..1f86bcd64 100644 --- a/neural-networks/pose-estimation/hand-pose/oakapp.toml +++ b/neural-networks/pose-estimation/hand-pose/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.neural-networks.pose-estimation.hand-pose" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/neural-networks/segmentation/depth-crop/AGENTS.md b/neural-networks/segmentation/depth-crop/AGENTS.md index c61348f28..3417100c9 100644 --- a/neural-networks/segmentation/depth-crop/AGENTS.md +++ b/neural-networks/segmentation/depth-crop/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for combining segmentation with unified depth a - `Shape:` `script+standalone` - `Primary task:` crop depth by semantic segmentation mask - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` devices with `CAM_A`, `CAM_B`, and `CAM_C`; RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` depth, calibration, and DeepLabV3+ segmentation model diff --git a/neural-networks/segmentation/depth-crop/backend-run.sh b/neural-networks/segmentation/depth-crop/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/neural-networks/segmentation/depth-crop/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/neural-networks/segmentation/depth-crop/oakapp.toml b/neural-networks/segmentation/depth-crop/oakapp.toml index fc38716ea..c1da10224 100644 --- a/neural-networks/segmentation/depth-crop/oakapp.toml +++ b/neural-networks/segmentation/depth-crop/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.neural-networks.segmentation.depth-crop" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,15 +8,8 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - depthai_models = { yaml_path = "./depthai_models" } - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/streaming/on-device-encoding/AGENTS.md b/streaming/on-device-encoding/AGENTS.md index 6075b3adf..1d83c4491 100644 --- a/streaming/on-device-encoding/AGENTS.md +++ b/streaming/on-device-encoding/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for encoding video on the OAK device and muxing - `Shape:` `script+standalone-service` - `Primary task:` encode live camera frames on-device and mux them into a file - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` `CAM_A`, PyAV on the runtime side, and filesystem access to the output path @@ -37,7 +37,6 @@ This is the repository reference for encoding video on the OAK device and muxing - [main.py](main.py) - [utils/video_saver.py](utils/video_saver.py) - [utils/arguments.py](utils/arguments.py) -- [backend-run.sh](backend-run.sh) - [oakapp.toml](oakapp.toml) ## Architecture diff --git a/streaming/on-device-encoding/backend-run.sh b/streaming/on-device-encoding/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/streaming/on-device-encoding/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/streaming/on-device-encoding/oakapp.toml b/streaming/on-device-encoding/oakapp.toml index c9a5e826c..d408a0b5b 100644 --- a/streaming/on-device-encoding/oakapp.toml +++ b/streaming/on-device-encoding/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.streaming.on-device-encoding" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,13 +8,6 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" @@ -22,4 +15,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/streaming/rtsp-streaming/AGENTS.md b/streaming/rtsp-streaming/AGENTS.md index 4d8491574..f9db53149 100644 --- a/streaming/rtsp-streaming/AGENTS.md +++ b/streaming/rtsp-streaming/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for serving a live H265 RTSP stream from an OAK - `Shape:` `script+standalone-service` - `Primary task:` expose a live camera feed as `rtsp://.../preview` - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` GStreamer RTSP server dependencies and live `CAM_A` input @@ -38,7 +38,6 @@ This is the repository reference for serving a live H265 RTSP stream from an OAK - [utils/host_stream_output.py](utils/host_stream_output.py) - [utils/rtsp_server.py](utils/rtsp_server.py) - [utils/arguments.py](utils/arguments.py) -- [backend-run.sh](backend-run.sh) - [oakapp.toml](oakapp.toml) ## Architecture diff --git a/streaming/rtsp-streaming/backend-run.sh b/streaming/rtsp-streaming/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/streaming/rtsp-streaming/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/streaming/rtsp-streaming/oakapp.toml b/streaming/rtsp-streaming/oakapp.toml index 5a9290892..2b5d222fc 100644 --- a/streaming/rtsp-streaming/oakapp.toml +++ b/streaming/rtsp-streaming/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.streaming.rtsp" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -10,13 +10,6 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" @@ -24,4 +17,4 @@ oauth_url = "https://auth.docker.io/token" auth_type = "repository" auth_name = "luxonis/oakapp-base" image_name = "luxonis/oakapp-base" -image_tag = "1.3.0" \ No newline at end of file +image_tag = "1.3.0" diff --git a/tutorials/camera-demo/AGENTS.md b/tutorials/camera-demo/AGENTS.md index 56efbc28b..4195c425b 100644 --- a/tutorials/camera-demo/AGENTS.md +++ b/tutorials/camera-demo/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for the simplest multi-sensor camera preview tu - `Shape:` `script+standalone-service` - `Primary task:` stream every connected camera sensor to the Visualizer - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` at least one connected camera sensor @@ -36,7 +36,6 @@ This is the repository reference for the simplest multi-sensor camera preview tu - [README.md](README.md) - [main.py](main.py) - [utils/arguments.py](utils/arguments.py) -- [backend-run.sh](backend-run.sh) - [oakapp.toml](oakapp.toml) ## Architecture diff --git a/tutorials/camera-demo/backend-run.sh b/tutorials/camera-demo/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/tutorials/camera-demo/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/tutorials/camera-demo/oakapp.toml b/tutorials/camera-demo/oakapp.toml index 2677b30b2..ef78f4184 100644 --- a/tutorials/camera-demo/oakapp.toml +++ b/tutorials/camera-demo/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.tutorials.camera-demo" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,13 +8,6 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/tutorials/camera-depth/AGENTS.md b/tutorials/camera-depth/AGENTS.md index 1964641d8..9e553442d 100644 --- a/tutorials/camera-depth/AGENTS.md +++ b/tutorials/camera-depth/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for the most minimal unified-depth tutorial in - `Shape:` `script+standalone-service` - `Primary task:` build a minimal unified-depth pipeline with visual outputs - `Entrypoint:` [main.py](main.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml) +- `Standalone path:` [oakapp.toml](oakapp.toml) - `Frontend:` none - `Runs on:` devices with `CAM_A`, `CAM_B`, and `CAM_C`; RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` stereo-capable hardware and calibration @@ -36,7 +36,6 @@ This is the repository reference for the most minimal unified-depth tutorial in - [README.md](README.md) - [main.py](main.py) - [utils/arguments.py](utils/arguments.py) -- [backend-run.sh](backend-run.sh) - [oakapp.toml](oakapp.toml) ## Architecture diff --git a/tutorials/camera-depth/backend-run.sh b/tutorials/camera-depth/backend-run.sh index 9d32d129b..e69de29bb 100644 --- a/tutorials/camera-depth/backend-run.sh +++ b/tutorials/camera-depth/backend-run.sh @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/tutorials/camera-depth/oakapp.toml b/tutorials/camera-depth/oakapp.toml index 6dea3e9cd..23c8e7642 100644 --- a/tutorials/camera-depth/oakapp.toml +++ b/tutorials/camera-depth/oakapp.toml @@ -1,5 +1,5 @@ -identifier = "com.example.tutorials.camera-depth" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +identifier = "com.example.tutorials.camera-stereo-depth" +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,13 +8,6 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" diff --git a/tutorials/play-encoded-stream/AGENTS.md b/tutorials/play-encoded-stream/AGENTS.md index d0c1da80b..c22f9c59b 100644 --- a/tutorials/play-encoded-stream/AGENTS.md +++ b/tutorials/play-encoded-stream/AGENTS.md @@ -22,7 +22,7 @@ This is the repository reference for comparing three host-side ways to view enco - `Shape:` `multi-entrypoint+standalone-service` - `Primary task:` play encoded camera or replay streams through different host decode paths - `Entrypoints:` [main.py](main.py), [pyav.py](pyav.py), and [opencv.py](opencv.py) -- `Standalone path:` [backend-run.sh](backend-run.sh) and [oakapp.toml](oakapp.toml), both running [main.py](main.py) +- `Standalone path:` [oakapp.toml](oakapp.toml), running [main.py](main.py) - `Frontend:` none - `Runs on:` RVC2 peripheral, RVC4 peripheral, and RVC4 standalone packaging - `Requires:` camera or replay media, and for the alternate paths, PyAV or OpenCV decode support diff --git a/tutorials/play-encoded-stream/backend-run.sh b/tutorials/play-encoded-stream/backend-run.sh deleted file mode 100644 index 9d32d129b..000000000 --- a/tutorials/play-encoded-stream/backend-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Starting Backend" -exec python3.12 /app/main.py \ No newline at end of file diff --git a/tutorials/play-encoded-stream/oakapp.toml b/tutorials/play-encoded-stream/oakapp.toml index cbd46d1fc..359b7be57 100644 --- a/tutorials/play-encoded-stream/oakapp.toml +++ b/tutorials/play-encoded-stream/oakapp.toml @@ -1,5 +1,5 @@ identifier = "com.example.tutorials.play-encoded-stream" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true @@ -8,13 +8,6 @@ prepare_container = [ { type = "RUN", command = "python3.12 -m pip install -r /app/requirements.txt --break-system-packages"} ] -build_steps = [ - "mkdir -p /etc/service/backend", - "cp /app/backend-run.sh /etc/service/backend/run", - "chmod +x /etc/service/backend/run", -] - - [base_image] api_url = "https://registry-1.docker.io" service = "registry.docker.io" From a9928c6806f18e81f428184902b2b912ef2cc3d0 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Wed, 26 Aug 2026 15:33:01 +0200 Subject: [PATCH 03/17] unify all app identifiers --- apps/object-volume-measurement-3d/oakapp.toml | 2 +- apps/people-demographics-and-sentiment-analysis/oakapp.toml | 2 +- apps/ros/ros-driver-basic/oakapp.toml | 2 +- apps/ros/ros-driver-custom-workspace/oakapp.toml | 2 +- apps/ros/ros-driver-rgb-pcl/oakapp.toml | 2 +- apps/ros/ros-driver-spatial-bb/oakapp.toml | 2 +- apps/ros/ros-follow-object/oakapp.toml | 2 +- camera-controls/manual-camera-control/oakapp.toml | 4 ++-- cpp/uvc/oakapp.toml | 2 +- depth-measurement/3d-measurement/box-measurement/oakapp.toml | 2 +- depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml | 2 +- depth-measurement/calc-spatial-on-host/oakapp.toml | 2 +- integrations/rerun/oakapp.toml | 2 +- neural-networks/3D-detection/objectron/oakapp.toml | 4 ++-- neural-networks/counting/crowdcounting/oakapp.toml | 4 ++-- .../counting/cumulative-object-counting/oakapp.toml | 4 ++-- neural-networks/counting/depth-people-counting/oakapp.toml | 4 ++-- neural-networks/counting/people-counter/oakapp.toml | 2 +- .../depth-estimation/crestereo-depth-matching/oakapp.toml | 2 +- neural-networks/depth-estimation/neural-depth/oakapp.toml | 2 +- neural-networks/face-detection/blur-faces/oakapp.toml | 4 ++-- .../face-detection/emotion-recognition/oakapp.toml | 4 ++-- .../face-detection/face-mask-detection/oakapp.toml | 4 ++-- neural-networks/face-detection/fatigue-detection/oakapp.toml | 2 +- neural-networks/face-detection/gaze-estimation/oakapp.toml | 4 ++-- .../face-detection/head-posture-detection/oakapp.toml | 4 ++-- neural-networks/feature-detection/xfeat/oakapp.toml | 4 ++-- neural-networks/generic-example/oakapp.toml | 4 ++-- .../barcode-detection-conveyor-belt/oakapp.toml | 4 ++-- .../object-detection/human-machine-safety/oakapp.toml | 2 +- .../object-detection/social-distancing/oakapp.toml | 4 ++-- neural-networks/object-detection/text-blur/oakapp.toml | 4 ++-- .../object-detection/yolo-host-decoding/oakapp.toml | 4 ++-- neural-networks/object-detection/yolo-p/oakapp.toml | 4 ++-- neural-networks/object-detection/yolo-world/oakapp.toml | 2 +- .../object-tracking/collision-avoidance/oakapp.toml | 4 ++-- neural-networks/object-tracking/deepsort-tracking/oakapp.toml | 4 ++-- neural-networks/object-tracking/kalman/oakapp.toml | 2 +- neural-networks/object-tracking/people-tracker/oakapp.toml | 2 +- neural-networks/ocr/license-plate-recognition/oakapp.toml | 4 ++-- neural-networks/pose-estimation/animal-pose/oakapp.toml | 4 ++-- neural-networks/pose-estimation/human-pose/oakapp.toml | 4 ++-- .../reidentification/human-reidentification/oakapp.toml | 4 ++-- neural-networks/segmentation/blur-background/oakapp.toml | 4 ++-- .../speech-recognition/whisper-tiny-en/oakapp.toml | 2 +- streaming/mjpeg-streaming/oakapp.toml | 4 ++-- streaming/rtsp-streaming/oakapp.toml | 2 +- streaming/webrtc-streaming/oakapp.toml | 2 +- 48 files changed, 73 insertions(+), 73 deletions(-) diff --git a/apps/object-volume-measurement-3d/oakapp.toml b/apps/object-volume-measurement-3d/oakapp.toml index a511e3833..24852d93b 100644 --- a/apps/object-volume-measurement-3d/oakapp.toml +++ b/apps/object-volume-measurement-3d/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.apps.extended-3d-measurement" +identifier = "com.example.apps.object-volume-measurement-3d" entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" diff --git a/apps/people-demographics-and-sentiment-analysis/oakapp.toml b/apps/people-demographics-and-sentiment-analysis/oakapp.toml index b429f154f..b93c416f4 100644 --- a/apps/people-demographics-and-sentiment-analysis/oakapp.toml +++ b/apps/people-demographics-and-sentiment-analysis/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.apps.people-demographic-sentiment-analysis" +identifier = "com.example.apps.people-demographics-and-sentiment-analysis" entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/backend/src/main.py"] app_version = "1.1.0" diff --git a/apps/ros/ros-driver-basic/oakapp.toml b/apps/ros/ros-driver-basic/oakapp.toml index 290495863..8cf9840d0 100644 --- a/apps/ros/ros-driver-basic/oakapp.toml +++ b/apps/ros/ros-driver-basic/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "example.apps.ros.ros-driver-basic" +identifier = "com.example.apps.ros.ros-driver-basic" app_version = "0.9.0" prepare_container = [ diff --git a/apps/ros/ros-driver-custom-workspace/oakapp.toml b/apps/ros/ros-driver-custom-workspace/oakapp.toml index fa08be642..65c3e8c45 100644 --- a/apps/ros/ros-driver-custom-workspace/oakapp.toml +++ b/apps/ros/ros-driver-custom-workspace/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "example.apps.ros.driver-custom_workspace" +identifier = "com.example.apps.ros.ros-driver-custom-workspace" app_version = "0.9.0" prepare_container = [ diff --git a/apps/ros/ros-driver-rgb-pcl/oakapp.toml b/apps/ros/ros-driver-rgb-pcl/oakapp.toml index 6aa01f9b1..e57f61074 100644 --- a/apps/ros/ros-driver-rgb-pcl/oakapp.toml +++ b/apps/ros/ros-driver-rgb-pcl/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "example.apps.ros.driver-rgb_pcl" +identifier = "com.example.apps.ros.ros-driver-rgb-pcl" app_version = "0.9.0" prepare_container = [ diff --git a/apps/ros/ros-driver-spatial-bb/oakapp.toml b/apps/ros/ros-driver-spatial-bb/oakapp.toml index ca523cbfc..4e7eba059 100644 --- a/apps/ros/ros-driver-spatial-bb/oakapp.toml +++ b/apps/ros/ros-driver-spatial-bb/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "example.apps.ros.driver-spatial-bb" +identifier = "com.example.apps.ros.ros-driver-spatial-bb" app_version = "0.9.0" prepare_container = [ diff --git a/apps/ros/ros-follow-object/oakapp.toml b/apps/ros/ros-follow-object/oakapp.toml index 4287a6281..154e9d923 100644 --- a/apps/ros/ros-follow-object/oakapp.toml +++ b/apps/ros/ros-follow-object/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "example.apps.ros.follow-object" +identifier = "com.example.apps.ros.ros-follow-object" app_version = "0.9.0" prepare_container = [ diff --git a/camera-controls/manual-camera-control/oakapp.toml b/camera-controls/manual-camera-control/oakapp.toml index e733e97d3..aa63428ed 100644 --- a/camera-controls/manual-camera-control/oakapp.toml +++ b/camera-controls/manual-camera-control/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.camere-controls.manual-camera-control" +identifier = "com.example.camera-controls.manual-camera-control" app_version = "1.0.0" prepare_container = [ @@ -12,4 +12,4 @@ prepare_build_container = [] build_steps = [] -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/cpp/uvc/oakapp.toml b/cpp/uvc/oakapp.toml index 8c0064f74..65a138f77 100644 --- a/cpp/uvc/oakapp.toml +++ b/cpp/uvc/oakapp.toml @@ -4,7 +4,7 @@ # Contact: # Application metadata -identifier = "com.example.streaming.uvc" +identifier = "com.example.cpp.uvc" app_version = "4.0.0" # Command to run when the container starts diff --git a/depth-measurement/3d-measurement/box-measurement/oakapp.toml b/depth-measurement/3d-measurement/box-measurement/oakapp.toml index ff69edd6d..872921dc3 100644 --- a/depth-measurement/3d-measurement/box-measurement/oakapp.toml +++ b/depth-measurement/3d-measurement/box-measurement/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.depth-measurement.measurement-3d.box-measurement" +identifier = "com.example.depth-measurement.3d-measurement.box-measurement" app_version = "0.1.0" prepare_container = [ diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml b/depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml index 27879164d..32b424772 100644 --- a/depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml +++ b/depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.depth-measurement.measurement-3d.rgbd-pointcloud" +identifier = "com.example.depth-measurement.3d-measurement.rgbd-pointcloud" app_version = "1.0.0" prepare_container = [ diff --git a/depth-measurement/calc-spatial-on-host/oakapp.toml b/depth-measurement/calc-spatial-on-host/oakapp.toml index 0c877150d..fe77a2d1f 100644 --- a/depth-measurement/calc-spatial-on-host/oakapp.toml +++ b/depth-measurement/calc-spatial-on-host/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.depth-measurement.spatial-calculation" +identifier = "com.example.depth-measurement.calc-spatial-on-host" app_version = "1.1.0" prepare_container = [ diff --git a/integrations/rerun/oakapp.toml b/integrations/rerun/oakapp.toml index d0b58f245..be966bda4 100644 --- a/integrations/rerun/oakapp.toml +++ b/integrations/rerun/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.integrations.rerun-integration" +identifier = "com.example.integrations.rerun" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/3D-detection/objectron/oakapp.toml b/neural-networks/3D-detection/objectron/oakapp.toml index ecc59092d..0bdc92b6a 100644 --- a/neural-networks/3D-detection/objectron/oakapp.toml +++ b/neural-networks/3D-detection/objectron/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.detection-3d.objectron" +identifier = "com.example.neural-networks.3D-detection.objectron" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/counting/crowdcounting/oakapp.toml b/neural-networks/counting/crowdcounting/oakapp.toml index 08c38ae7c..d1ac83dc7 100644 --- a/neural-networks/counting/crowdcounting/oakapp.toml +++ b/neural-networks/counting/crowdcounting/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.counting.crowdcounting" +identifier = "com.example.neural-networks.counting.crowdcounting" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/counting/cumulative-object-counting/oakapp.toml b/neural-networks/counting/cumulative-object-counting/oakapp.toml index eb71ed9e4..93da75acc 100644 --- a/neural-networks/counting/cumulative-object-counting/oakapp.toml +++ b/neural-networks/counting/cumulative-object-counting/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.counting.cumulative-object-counting" +identifier = "com.example.neural-networks.counting.cumulative-object-counting" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/counting/depth-people-counting/oakapp.toml b/neural-networks/counting/depth-people-counting/oakapp.toml index cc8892f24..c6b7aec70 100644 --- a/neural-networks/counting/depth-people-counting/oakapp.toml +++ b/neural-networks/counting/depth-people-counting/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.counting.depth-people-counting" +identifier = "com.example.neural-networks.counting.depth-people-counting" app_version = "1.0.0" prepare_container = [ @@ -12,4 +12,4 @@ prepare_build_container = [] build_steps = [] -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/counting/people-counter/oakapp.toml b/neural-networks/counting/people-counter/oakapp.toml index a01f24aa2..4bd0795eb 100644 --- a/neural-networks/counting/people-counter/oakapp.toml +++ b/neural-networks/counting/people-counter/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.people-counter" +identifier = "com.example.neural-networks.counting.people-counter" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml b/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml index 8e2e32b20..b6fd37921 100644 --- a/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml +++ b/neural-networks/depth-estimation/crestereo-depth-matching/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.depth-estimation.crestereo-depth-matching" +identifier = "com.example.neural-networks.depth-estimation.crestereo-stereo-matching" app_version="1.1.0" prepare_container = [ diff --git a/neural-networks/depth-estimation/neural-depth/oakapp.toml b/neural-networks/depth-estimation/neural-depth/oakapp.toml index a9ae0d2be..7a90b2f3c 100644 --- a/neural-networks/depth-estimation/neural-depth/oakapp.toml +++ b/neural-networks/depth-estimation/neural-depth/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.depth-estimation.neural-depth" +identifier = "com.example.neural-networks.depth-estimation.neural-depth" app_version="1.1.0" prepare_container = [ diff --git a/neural-networks/face-detection/blur-faces/oakapp.toml b/neural-networks/face-detection/blur-faces/oakapp.toml index 3aac635f5..e08e22fe2 100644 --- a/neural-networks/face-detection/blur-faces/oakapp.toml +++ b/neural-networks/face-detection/blur-faces/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.face-detection.blur-faces" +identifier = "com.example.neural-networks.face-detection.blur-faces" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/face-detection/emotion-recognition/oakapp.toml b/neural-networks/face-detection/emotion-recognition/oakapp.toml index 426354202..9bd494063 100644 --- a/neural-networks/face-detection/emotion-recognition/oakapp.toml +++ b/neural-networks/face-detection/emotion-recognition/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.face-detection.emotion-recognition" +identifier = "com.example.neural-networks.face-detection.emotion-recognition" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/face-detection/face-mask-detection/oakapp.toml b/neural-networks/face-detection/face-mask-detection/oakapp.toml index af142ecd0..5c9649d67 100644 --- a/neural-networks/face-detection/face-mask-detection/oakapp.toml +++ b/neural-networks/face-detection/face-mask-detection/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.face-detection.face-mask-detection" +identifier = "com.example.neural-networks.face-detection.face-mask-detection" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/face-detection/fatigue-detection/oakapp.toml b/neural-networks/face-detection/fatigue-detection/oakapp.toml index cc8746e39..71e79c7f5 100644 --- a/neural-networks/face-detection/fatigue-detection/oakapp.toml +++ b/neural-networks/face-detection/fatigue-detection/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.face-detection.fatigue-detection" +identifier = "com.example.neural-networks.face-detection.fatigue-detection" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/face-detection/gaze-estimation/oakapp.toml b/neural-networks/face-detection/gaze-estimation/oakapp.toml index 0218f95c4..c2a0bd393 100644 --- a/neural-networks/face-detection/gaze-estimation/oakapp.toml +++ b/neural-networks/face-detection/gaze-estimation/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.face-detection.gaze-estimation" +identifier = "com.example.neural-networks.face-detection.gaze-estimation" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/face-detection/head-posture-detection/oakapp.toml b/neural-networks/face-detection/head-posture-detection/oakapp.toml index 12d09c144..ace65c518 100644 --- a/neural-networks/face-detection/head-posture-detection/oakapp.toml +++ b/neural-networks/face-detection/head-posture-detection/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.pose-estimation.face-pose" +identifier = "com.example.neural-networks.face-detection.head-posture-detection" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/feature-detection/xfeat/oakapp.toml b/neural-networks/feature-detection/xfeat/oakapp.toml index ece0088f1..a5c9b4835 100644 --- a/neural-networks/feature-detection/xfeat/oakapp.toml +++ b/neural-networks/feature-detection/xfeat/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.feature-detection.xfeat" +identifier = "com.example.neural-networks.feature-detection.xfeat" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py -fps 20"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py -fps 20"] diff --git a/neural-networks/generic-example/oakapp.toml b/neural-networks/generic-example/oakapp.toml index 048ee636f..f43506be6 100644 --- a/neural-networks/generic-example/oakapp.toml +++ b/neural-networks/generic-example/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.generic-example" +identifier = "com.example.neural-networks.generic-example" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py --model luxonis/yolov6-nano:r2-coco-512x288"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py --model luxonis/yolov6-nano:r2-coco-512x288"] diff --git a/neural-networks/object-detection/barcode-detection-conveyor-belt/oakapp.toml b/neural-networks/object-detection/barcode-detection-conveyor-belt/oakapp.toml index 08a1c952c..ffbedc43a 100644 --- a/neural-networks/object-detection/barcode-detection-conveyor-belt/oakapp.toml +++ b/neural-networks/object-detection/barcode-detection-conveyor-belt/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.conveyor-application-barcodes" +identifier = "com.example.neural-networks.object-detection.barcode-detection-conveyor-belt" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/object-detection/human-machine-safety/oakapp.toml b/neural-networks/object-detection/human-machine-safety/oakapp.toml index efda482e9..570848bd9 100644 --- a/neural-networks/object-detection/human-machine-safety/oakapp.toml +++ b/neural-networks/object-detection/human-machine-safety/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.human-machine-safety" +identifier = "com.example.neural-networks.object-detection.human-machine-safety" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/object-detection/social-distancing/oakapp.toml b/neural-networks/object-detection/social-distancing/oakapp.toml index 134fcab82..11e384284 100644 --- a/neural-networks/object-detection/social-distancing/oakapp.toml +++ b/neural-networks/object-detection/social-distancing/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.social-distancing" +identifier = "com.example.neural-networks.object-detection.social-distancing" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/object-detection/text-blur/oakapp.toml b/neural-networks/object-detection/text-blur/oakapp.toml index 48b97c57a..632152a0b 100644 --- a/neural-networks/object-detection/text-blur/oakapp.toml +++ b/neural-networks/object-detection/text-blur/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.text-blur" +identifier = "com.example.neural-networks.object-detection.text-blur" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/object-detection/yolo-host-decoding/oakapp.toml b/neural-networks/object-detection/yolo-host-decoding/oakapp.toml index 7aa3c48be..af98086d1 100644 --- a/neural-networks/object-detection/yolo-host-decoding/oakapp.toml +++ b/neural-networks/object-detection/yolo-host-decoding/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.yolo-host-decoding" +identifier = "com.example.neural-networks.object-detection.yolo-host-decoding" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/object-detection/yolo-p/oakapp.toml b/neural-networks/object-detection/yolo-p/oakapp.toml index 099df527d..e26076c62 100644 --- a/neural-networks/object-detection/yolo-p/oakapp.toml +++ b/neural-networks/object-detection/yolo-p/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.yolop" +identifier = "com.example.neural-networks.object-detection.yolo-p" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/object-detection/yolo-world/oakapp.toml b/neural-networks/object-detection/yolo-world/oakapp.toml index d0f05a44a..29e481d7c 100644 --- a/neural-networks/object-detection/yolo-world/oakapp.toml +++ b/neural-networks/object-detection/yolo-world/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-detection.yolo-world" +identifier = "com.example.neural-networks.object-detection.yolo-world" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/object-tracking/collision-avoidance/oakapp.toml b/neural-networks/object-tracking/collision-avoidance/oakapp.toml index 70f38379a..d302569ea 100644 --- a/neural-networks/object-tracking/collision-avoidance/oakapp.toml +++ b/neural-networks/object-tracking/collision-avoidance/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-tracking.collision-avoidance" +identifier = "com.example.neural-networks.object-tracking.collision-avoidance" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/object-tracking/deepsort-tracking/oakapp.toml b/neural-networks/object-tracking/deepsort-tracking/oakapp.toml index defa45c38..6ca980e8f 100644 --- a/neural-networks/object-tracking/deepsort-tracking/oakapp.toml +++ b/neural-networks/object-tracking/deepsort-tracking/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-tracking.deepsort-tracking" +identifier = "com.example.neural-networks.object-tracking.deepsort-tracking" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/object-tracking/kalman/oakapp.toml b/neural-networks/object-tracking/kalman/oakapp.toml index 49a4cc263..ecfbd6417 100644 --- a/neural-networks/object-tracking/kalman/oakapp.toml +++ b/neural-networks/object-tracking/kalman/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.object-tracking.kalman-filter" +identifier = "com.example.neural-networks.object-tracking.kalman" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/object-tracking/people-tracker/oakapp.toml b/neural-networks/object-tracking/people-tracker/oakapp.toml index d7e8e04e0..8a3d55a84 100644 --- a/neural-networks/object-tracking/people-tracker/oakapp.toml +++ b/neural-networks/object-tracking/people-tracker/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.people-tracker" +identifier = "com.example.neural-networks.object-tracking.people-tracker" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/ocr/license-plate-recognition/oakapp.toml b/neural-networks/ocr/license-plate-recognition/oakapp.toml index ca3040643..a905ca9d0 100644 --- a/neural-networks/ocr/license-plate-recognition/oakapp.toml +++ b/neural-networks/ocr/license-plate-recognition/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.ocr.license-plate-recognition" +identifier = "com.example.neural-networks.ocr.license-plate-recognition" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/pose-estimation/animal-pose/oakapp.toml b/neural-networks/pose-estimation/animal-pose/oakapp.toml index 2348e9f3f..cae1b5b7c 100644 --- a/neural-networks/pose-estimation/animal-pose/oakapp.toml +++ b/neural-networks/pose-estimation/animal-pose/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.pose-estimation.animal-pose" +identifier = "com.example.neural-networks.pose-estimation.animal-pose" app_version = "1.0.0" prepare_container = [ @@ -13,4 +13,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/pose-estimation/human-pose/oakapp.toml b/neural-networks/pose-estimation/human-pose/oakapp.toml index d75abedff..f5a9e9a71 100644 --- a/neural-networks/pose-estimation/human-pose/oakapp.toml +++ b/neural-networks/pose-estimation/human-pose/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.pose-estimation.human-pose" +identifier = "com.example.neural-networks.pose-estimation.human-pose" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/reidentification/human-reidentification/oakapp.toml b/neural-networks/reidentification/human-reidentification/oakapp.toml index fc2efd365..ccb02080a 100644 --- a/neural-networks/reidentification/human-reidentification/oakapp.toml +++ b/neural-networks/reidentification/human-reidentification/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.reidentification.human-reidentification" +identifier = "com.example.neural-networks.reidentification.human-reidentification" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/segmentation/blur-background/oakapp.toml b/neural-networks/segmentation/blur-background/oakapp.toml index 1e3088a1e..1580dfdae 100644 --- a/neural-networks/segmentation/blur-background/oakapp.toml +++ b/neural-networks/segmentation/blur-background/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.segmentation.background-blur" +identifier = "com.example.neural-networks.segmentation.blur-background" app_version = "1.0.0" prepare_container = [ @@ -14,4 +14,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/neural-networks/speech-recognition/whisper-tiny-en/oakapp.toml b/neural-networks/speech-recognition/whisper-tiny-en/oakapp.toml index ade1b2173..af97f5b0f 100644 --- a/neural-networks/speech-recognition/whisper-tiny-en/oakapp.toml +++ b/neural-networks/speech-recognition/whisper-tiny-en/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.whisper" +identifier = "com.example.neural-networks.speech-recognition.whisper-tiny-en" app_version = "1.0.0" prepare_container = [ diff --git a/streaming/mjpeg-streaming/oakapp.toml b/streaming/mjpeg-streaming/oakapp.toml index 29bb6c708..f5b0c63f9 100644 --- a/streaming/mjpeg-streaming/oakapp.toml +++ b/streaming/mjpeg-streaming/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.streaming.mjpeg" +identifier = "com.example.streaming.mjpeg-streaming" app_version = "1.0.0" prepare_container = [ @@ -13,4 +13,4 @@ build_steps = [] depthai_models = { yaml_path = "./depthai_models" } -entrypoint = ["bash", "-c", "python3 -u /app/main.py"] \ No newline at end of file +entrypoint = ["bash", "-c", "python3 -u /app/main.py"] diff --git a/streaming/rtsp-streaming/oakapp.toml b/streaming/rtsp-streaming/oakapp.toml index 2b5d222fc..d0ca6bb8d 100644 --- a/streaming/rtsp-streaming/oakapp.toml +++ b/streaming/rtsp-streaming/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.streaming.rtsp" +identifier = "com.example.streaming.rtsp-streaming" entrypoint = ["/entrypoint.sh", "python3", "-u", "/app/main.py"] app_version = "1.1.0" assign_frontend_port = true diff --git a/streaming/webrtc-streaming/oakapp.toml b/streaming/webrtc-streaming/oakapp.toml index c0dba7b58..916df115e 100644 --- a/streaming/webrtc-streaming/oakapp.toml +++ b/streaming/webrtc-streaming/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.streaming.webrtc" +identifier = "com.example.streaming.webrtc-streaming" app_version = "1.0.0" prepare_container = [ From 7d684b1da16bd2a2a81d65918cf2352761dbfe2c Mon Sep 17 00:00:00 2001 From: petrnovota Date: Mon, 31 Aug 2026 10:31:11 +0200 Subject: [PATCH 04/17] change 3d-measurement/ dir to measurement-3d to allign the name with oakapp identifier convention --- INDEX.md | 8 ++++---- apps/object-volume-measurement-3d/AGENTS.md | 4 ++-- depth-measurement/README.md | 6 +++--- depth-measurement/calc-spatial-on-host/AGENTS.md | 2 +- .../box-measurement/AGENTS.md | 6 +++--- .../box-measurement/README.md | 0 .../box_instance_segmentation.RVC2.yaml | 0 .../box_instance_segmentation.RVC4.yaml | 0 .../box-measurement/main.py | 0 .../box-measurement/oakapp.toml | 2 +- .../box-measurement/requirements.txt | 0 .../box-measurement/utils/__init__.py | 0 .../box-measurement/utils/arguments.py | 0 .../box-measurement/utils/box_processing_node.py | 0 .../box-measurement/utils/cuboid_fitter.py | 0 .../box-measurement/utils/helper_functions.py | 0 .../rgbd-pointcloud/.oakappignore | 0 .../rgbd-pointcloud/AGENTS.md | 12 ++++++------ .../rgbd-pointcloud/README.md | 0 .../rgbd-pointcloud/main.py | 0 .../rgbd-pointcloud/oakapp.toml | 2 +- .../rgbd-pointcloud/requirements.txt | 0 .../rgbd-pointcloud/utils/__init__.py | 0 .../rgbd-pointcloud/utils/arguments.py | 0 .../tof-pointcloud/AGENTS.md | 6 +++--- .../tof-pointcloud/README.md | 0 .../tof-pointcloud/main.py | 0 .../tof-pointcloud/requirements.txt | 0 depth-measurement/stereo-on-host/AGENTS.md | 4 ++-- .../stereo-runtime-configuration/AGENTS.md | 2 +- depth-measurement/triangulation/AGENTS.md | 4 ++-- depth-measurement/wls-filter/AGENTS.md | 2 +- integrations/foxglove/AGENTS.md | 4 ++-- integrations/rerun/AGENTS.md | 4 ++-- .../object-detection/spatial-detections/AGENTS.md | 2 +- neural-networks/segmentation/depth-crop/AGENTS.md | 4 ++-- tests/constants.py | 4 ++-- 37 files changed, 39 insertions(+), 39 deletions(-) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/AGENTS.md (93%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/README.md (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/depthai_models/box_instance_segmentation.RVC2.yaml (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/depthai_models/box_instance_segmentation.RVC4.yaml (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/main.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/oakapp.toml (88%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/requirements.txt (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/utils/__init__.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/utils/arguments.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/utils/box_processing_node.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/utils/cuboid_fitter.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/box-measurement/utils/helper_functions.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/.oakappignore (100%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/AGENTS.md (88%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/README.md (100%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/main.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/oakapp.toml (87%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/requirements.txt (100%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/utils/__init__.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/rgbd-pointcloud/utils/arguments.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/tof-pointcloud/AGENTS.md (94%) rename depth-measurement/{3d-measurement => measurement-3d}/tof-pointcloud/README.md (100%) rename depth-measurement/{3d-measurement => measurement-3d}/tof-pointcloud/main.py (100%) rename depth-measurement/{3d-measurement => measurement-3d}/tof-pointcloud/requirements.txt (100%) diff --git a/INDEX.md b/INDEX.md index 72c3f1037..e013c091a 100644 --- a/INDEX.md +++ b/INDEX.md @@ -46,10 +46,10 @@ For shared vocabulary such as shapes, modes, platforms, and runtime files, read ### Depth Measurement -- [depth-measurement/3d-measurement/box-measurement](depth-measurement/3d-measurement/box-measurement/AGENTS.md): This is the strongest reference in the repo for RGBD box measurement with instance segmentation, point clouds, and host-side cuboid fitting. Use it when you need an app-shaped stereo+RGB measurement pipeline rather than... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `segmentation`, `stereo`. -- [depth-measurement/3d-measurement/rgbd-pointcloud](depth-measurement/3d-measurement/rgbd-pointcloud/AGENTS.md): This is the minimal RGBD point-cloud reference in the repo. Use it when you need the smallest example that aligns unified depth to a color stream and publishes a point cloud without adding custom host processing or... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `pointcloud`, `streaming`. -- [depth-measurement/3d-measurement/tof-pointcloud](depth-measurement/3d-measurement/tof-pointcloud/AGENTS.md): This is the ToF-specific depth and point-cloud tuning demo in the repo. Use it when you need interactive runtime control over ToF filters, side-by-side raw versus filtered point clouds, and a desktop GUI rather than a... Shape: `script`. Mode: `host`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `pointcloud`, `tof`. -- [depth-measurement/calc-spatial-on-host](depth-measurement/calc-spatial-on-host/AGENTS.md): This is the host-side spatial ROI measurement reference in the repo. Use it when you want to calculate X/Y/Z coordinates on the host from unified depth instead of using `SpatialLocationCalculator` on-device. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `spatial`. +- [depth-measurement/measurement-3d/box-measurement](depth-measurement/measurement-3d/box-measurement/AGENTS.md): This is the strongest reference in the repo for RGBD box measurement with instance segmentation, point clouds, and host-side cuboid fitting. Use it when you need an app-shaped stereo+RGB measurement pipeline rather than... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `segmentation`, `stereo`. +- [depth-measurement/measurement-3d/rgbd-pointcloud](depth-measurement/measurement-3d/rgbd-pointcloud/AGENTS.md): This is the minimal RGBD point-cloud reference in the repo. Use it when you need the smallest example that aligns stereo depth to a color stream and publishes a point cloud without adding custom host processing or neural... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `pointcloud`, `stereo`, `streaming`. +- [depth-measurement/measurement-3d/tof-pointcloud](depth-measurement/measurement-3d/tof-pointcloud/AGENTS.md): This is the ToF-specific depth and point-cloud tuning demo in the repo. Use it when you need interactive runtime control over ToF filters, side-by-side raw versus filtered point clouds, and a desktop GUI rather than a... Shape: `script`. Mode: `host`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `pointcloud`, `tof`. +- [depth-measurement/calc-spatial-on-host](depth-measurement/calc-spatial-on-host/AGENTS.md): This is the host-side spatial ROI measurement reference in the repo. Use it when you want to calculate X/Y/Z coordinates on the host from stereo depth instead of using `SpatialLocationCalculator` on-device. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `spatial`, `stereo`. - [depth-measurement/dynamic-calibration](depth-measurement/dynamic-calibration/AGENTS.md): This is the runtime stereo dynamic-calibration workflow reference in the repo. Use it when you need an interactive calibration HUD, coverage/quality feedback, and host-driven control over applying or flashing calibration... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `calibration`, `depth`, `host-processing`, `stereo`. - [depth-measurement/stereo-on-host](depth-measurement/stereo-on-host/AGENTS.md): Host-side stereo benchmark example. It compares device `StereoDepth` disparity against host-computed `cv2.StereoSGBM` disparity, including rectified mono previews and an SSIM annotation. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `disparity`, `host-processing`, `stereo`. - [depth-measurement/stereo-runtime-configuration](depth-measurement/stereo-runtime-configuration/AGENTS.md): This is the simplest runtime stereo-parameter tuning example in the repo. Use it when you need to change `StereoDepth` settings live from the host and visualize the effect immediately in the DepthAI Visualizer. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `stereo`. diff --git a/apps/object-volume-measurement-3d/AGENTS.md b/apps/object-volume-measurement-3d/AGENTS.md index 6628ad72a..4b9ce3830 100644 --- a/apps/object-volume-measurement-3d/AGENTS.md +++ b/apps/object-volume-measurement-3d/AGENTS.md @@ -75,7 +75,7 @@ This is the strongest standalone reference for interactive 3D object measurement - `To change the default classes:` edit `CLASS_NAMES` in [backend/src/main.py](backend/src/main.py) - `To change confidence behavior:` edit the parser threshold and [frontend/src/ConfidenceSlider.tsx](frontend/src/ConfidenceSlider.tsx) - `To reuse the pointcloud measurement backend:` keep [backend/src/utils/measurement_node.py](backend/src/utils/measurement_node.py) and feed it another segmented pointcloud source -- `To study a lighter RGBD reference:` compare against [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) +- `To study a lighter RGBD reference:` compare against [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) ## Constraints @@ -93,7 +93,7 @@ This is the strongest standalone reference for interactive 3D object measurement ## Related Examples - [apps/p2p-measurement](https://github.com/luxonis/oak-examples/tree/main/apps/p2p-measurement): use this when you only need two-point distance measurement -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you need a cleaner RGBD pointcloud reference +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you need a cleaner RGBD pointcloud reference - [apps/data-collection](https://github.com/luxonis/oak-examples/tree/main/apps/data-collection): use this when the main frontend pattern is interactive class control rather than 3D measurement - [depth-measurement/calc-spatial-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/calc-spatial-on-host): use this when host-side spatial measurement is enough diff --git a/depth-measurement/README.md b/depth-measurement/README.md index a3bcd7189..8f4dcd67f 100644 --- a/depth-measurement/README.md +++ b/depth-measurement/README.md @@ -6,9 +6,9 @@ This section contains examples demonstrating depth perception capabilities and s | Name | RVC2 | RVC4 (peripheral) | RVC4 (standalone) | DepthAIv2 | Notes | | ----------------------------------------------------------------- | ---- | ----------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- | -| [3d-measurement/box-measurement](3d-measurement/box-measurement/) | ✅ | 🚧 | 🚧 | [gen2-box_measurement](https://github.com/luxonis/oak-examples/tree/master/gen2-box_measurement) | Example measuring box dimensions using depth information | -| [3d-measurement/rgbd-pointcloud](3d-measurement/rgbd-pointcloud/) | ✅ | ✅ | ✅ | [gen2-pointcloud](https://github.com/luxonis/oak-examples/tree/master/gen2-pointcloud) | Demonstration of 3D point cloud generation from depth data | -| [3d-measurement/tof-pointcloud](3d-measurement/tof-pointcloud/) | ✅ | ❌ | ❌ | ❌ | Basic ToF depth and pointcloud data visualization | +| [measurement-3d/box-measurement](measurement-3d/box-measurement/) | ✅ | 🚧 | 🚧 | [gen2-box_measurement](https://github.com/luxonis/oak-examples/tree/master/gen2-box_measurement) | Example measuring box dimensions using depth information | +| [measurement-3d/rgbd-pointcloud](measurement-3d/rgbd-pointcloud/) | ✅ | ✅ | ✅ | [gen2-pointcloud](https://github.com/luxonis/oak-examples/tree/master/gen2-pointcloud) | Demonstration of 3D point cloud generation from depth data | +| [measurement-3d/tof-pointcloud](measurement-3d/tof-pointcloud/) | ✅ | ❌ | ❌ | ❌ | Basic ToF depth and pointcloud data visualization | | [calc-spatial-on-host](calc-spatial-on-host/) | ✅ | ✅ | ✅ | [gen2-calc-spatials-on-host](https://github.com/luxonis/oak-examples/tree/master/gen2-calc-spatials-on-host) | Example showing spatial calculations performed on host | | [wls-filter](wls-filter/) | ✅ | ✅ | ✅ | [gen2-wls-filter](https://github.com/luxonis/oak-examples/tree/master/gen2-wls-filter) | Implementation of Weighted Least Squares filter for depth refinement | | [stereo-on-host](stereo-on-host/) | ✅ | ✅ | ✅ | [gen2-stereo-on-host](https://github.com/luxonis/oak-examples/tree/master/gen2-stereo-on-host) | Example performing stereo depth calculations on host | diff --git a/depth-measurement/calc-spatial-on-host/AGENTS.md b/depth-measurement/calc-spatial-on-host/AGENTS.md index 120a05a0a..2378b4836 100644 --- a/depth-measurement/calc-spatial-on-host/AGENTS.md +++ b/depth-measurement/calc-spatial-on-host/AGENTS.md @@ -90,7 +90,7 @@ This is the host-side spatial ROI measurement reference in the repo. Use it when - [depth-measurement/stereo-runtime-configuration](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-runtime-configuration): use this when you want runtime stereo tuning instead of host spatial math - [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host): use this when you need host-side stereo disparity comparison -- [depth-measurement/3d-measurement/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/box-measurement): use this when you need object-size measurement instead of manual ROI measurement +- [depth-measurement/measurement-3d/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/box-measurement): use this when you need object-size measurement instead of manual ROI measurement - [depth-measurement/wls-filter](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/wls-filter): use this when the host-side work should be disparity post-processing rather than ROI coordinate measurement ## Validation diff --git a/depth-measurement/3d-measurement/box-measurement/AGENTS.md b/depth-measurement/measurement-3d/box-measurement/AGENTS.md similarity index 93% rename from depth-measurement/3d-measurement/box-measurement/AGENTS.md rename to depth-measurement/measurement-3d/box-measurement/AGENTS.md index 14feb8b20..e7340e38c 100644 --- a/depth-measurement/3d-measurement/box-measurement/AGENTS.md +++ b/depth-measurement/measurement-3d/box-measurement/AGENTS.md @@ -20,7 +20,7 @@ This is the strongest reference in the repo for RGBD box measurement with instan ## Quick Facts -- `Category:` `depth-measurement/3d-measurement/box-measurement` +- `Category:` `depth-measurement/measurement-3d/box-measurement` - `Shape:` `script+standalone` - `Primary task:` estimate box dimensions from RGBD plus instance segmentation - `Entrypoint:` [main.py](main.py) @@ -92,8 +92,8 @@ This is the strongest reference in the repo for RGBD box measurement with instan ## Related Examples -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you need the RGBD + point-cloud baseline without neural inference -- [depth-measurement/3d-measurement/tof-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/tof-pointcloud): use this when the depth source should be ToF instead of stereo +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you need the RGBD + point-cloud baseline without neural inference +- [depth-measurement/measurement-3d/tof-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/tof-pointcloud): use this when the depth source should be ToF instead of stereo - [depth-measurement/calc-spatial-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/calc-spatial-on-host): use this when you only need host-side spatial ROI measurement - [apps/object-volume-measurement-3d](https://github.com/luxonis/oak-examples/tree/main/apps/object-volume-measurement-3d): use this when you need the more app-shaped frontend/backend volume-measurement workflow diff --git a/depth-measurement/3d-measurement/box-measurement/README.md b/depth-measurement/measurement-3d/box-measurement/README.md similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/README.md rename to depth-measurement/measurement-3d/box-measurement/README.md diff --git a/depth-measurement/3d-measurement/box-measurement/depthai_models/box_instance_segmentation.RVC2.yaml b/depth-measurement/measurement-3d/box-measurement/depthai_models/box_instance_segmentation.RVC2.yaml similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/depthai_models/box_instance_segmentation.RVC2.yaml rename to depth-measurement/measurement-3d/box-measurement/depthai_models/box_instance_segmentation.RVC2.yaml diff --git a/depth-measurement/3d-measurement/box-measurement/depthai_models/box_instance_segmentation.RVC4.yaml b/depth-measurement/measurement-3d/box-measurement/depthai_models/box_instance_segmentation.RVC4.yaml similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/depthai_models/box_instance_segmentation.RVC4.yaml rename to depth-measurement/measurement-3d/box-measurement/depthai_models/box_instance_segmentation.RVC4.yaml diff --git a/depth-measurement/3d-measurement/box-measurement/main.py b/depth-measurement/measurement-3d/box-measurement/main.py similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/main.py rename to depth-measurement/measurement-3d/box-measurement/main.py diff --git a/depth-measurement/3d-measurement/box-measurement/oakapp.toml b/depth-measurement/measurement-3d/box-measurement/oakapp.toml similarity index 88% rename from depth-measurement/3d-measurement/box-measurement/oakapp.toml rename to depth-measurement/measurement-3d/box-measurement/oakapp.toml index 872921dc3..ff69edd6d 100644 --- a/depth-measurement/3d-measurement/box-measurement/oakapp.toml +++ b/depth-measurement/measurement-3d/box-measurement/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.depth-measurement.3d-measurement.box-measurement" +identifier = "com.example.depth-measurement.measurement-3d.box-measurement" app_version = "0.1.0" prepare_container = [ diff --git a/depth-measurement/3d-measurement/box-measurement/requirements.txt b/depth-measurement/measurement-3d/box-measurement/requirements.txt similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/requirements.txt rename to depth-measurement/measurement-3d/box-measurement/requirements.txt diff --git a/depth-measurement/3d-measurement/box-measurement/utils/__init__.py b/depth-measurement/measurement-3d/box-measurement/utils/__init__.py similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/utils/__init__.py rename to depth-measurement/measurement-3d/box-measurement/utils/__init__.py diff --git a/depth-measurement/3d-measurement/box-measurement/utils/arguments.py b/depth-measurement/measurement-3d/box-measurement/utils/arguments.py similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/utils/arguments.py rename to depth-measurement/measurement-3d/box-measurement/utils/arguments.py diff --git a/depth-measurement/3d-measurement/box-measurement/utils/box_processing_node.py b/depth-measurement/measurement-3d/box-measurement/utils/box_processing_node.py similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/utils/box_processing_node.py rename to depth-measurement/measurement-3d/box-measurement/utils/box_processing_node.py diff --git a/depth-measurement/3d-measurement/box-measurement/utils/cuboid_fitter.py b/depth-measurement/measurement-3d/box-measurement/utils/cuboid_fitter.py similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/utils/cuboid_fitter.py rename to depth-measurement/measurement-3d/box-measurement/utils/cuboid_fitter.py diff --git a/depth-measurement/3d-measurement/box-measurement/utils/helper_functions.py b/depth-measurement/measurement-3d/box-measurement/utils/helper_functions.py similarity index 100% rename from depth-measurement/3d-measurement/box-measurement/utils/helper_functions.py rename to depth-measurement/measurement-3d/box-measurement/utils/helper_functions.py diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/.oakappignore b/depth-measurement/measurement-3d/rgbd-pointcloud/.oakappignore similarity index 100% rename from depth-measurement/3d-measurement/rgbd-pointcloud/.oakappignore rename to depth-measurement/measurement-3d/rgbd-pointcloud/.oakappignore diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/AGENTS.md b/depth-measurement/measurement-3d/rgbd-pointcloud/AGENTS.md similarity index 88% rename from depth-measurement/3d-measurement/rgbd-pointcloud/AGENTS.md rename to depth-measurement/measurement-3d/rgbd-pointcloud/AGENTS.md index 5d9bf0de1..4840a27e3 100644 --- a/depth-measurement/3d-measurement/rgbd-pointcloud/AGENTS.md +++ b/depth-measurement/measurement-3d/rgbd-pointcloud/AGENTS.md @@ -20,7 +20,7 @@ This is the minimal RGBD point-cloud reference in the repo. Use it when you need ## Quick Facts -- `Category:` `depth-measurement/3d-measurement/rgbd-pointcloud` +- `Category:` `depth-measurement/measurement-3d/rgbd-pointcloud` - `Shape:` `script+standalone` - `Primary task:` align unified depth to a color source and publish a point cloud - `Entrypoint:` [main.py](main.py) @@ -67,9 +67,9 @@ This is the minimal RGBD point-cloud reference in the repo. Use it when you need ## Common Adaptations - `To colorize from mono by default:` start from the `--mono` branch in [main.py](main.py) -- `To reuse this as a point-cloud baseline for another task:` keep the `Depth` and `RGBD` branch and replace the Visualizer topics -- `To add host-side geometry processing:` compare against [depth-measurement/3d-measurement/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/box-measurement) after this baseline is working -- `To move to ToF:` use [depth-measurement/3d-measurement/tof-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/tof-pointcloud) instead +- `To reuse this as a point-cloud baseline for another task:` keep the `StereoDepth` and `RGBD` branch and replace the Visualizer topics +- `To add host-side geometry processing:` compare against [depth-measurement/measurement-3d/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/box-measurement) after this baseline is working +- `To move to ToF:` use [depth-measurement/measurement-3d/tof-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/tof-pointcloud) instead ## Constraints @@ -86,8 +86,8 @@ This is the minimal RGBD point-cloud reference in the repo. Use it when you need ## Related Examples -- [depth-measurement/3d-measurement/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/box-measurement): use this when you need segmentation-driven measurements on top of RGBD point clouds -- [depth-measurement/3d-measurement/tof-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/tof-pointcloud): use this when the point cloud should come from a ToF sensor +- [depth-measurement/measurement-3d/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/box-measurement): use this when you need segmentation-driven measurements on top of RGBD point clouds +- [depth-measurement/measurement-3d/tof-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/tof-pointcloud): use this when the point cloud should come from a ToF sensor - [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host): use this when you need host-side stereo comparison rather than a point cloud - [tutorials/camera-depth](https://github.com/luxonis/oak-examples/tree/main/tutorials/camera-depth): use this when you need a simpler depth baseline before RGBD fusion diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/README.md b/depth-measurement/measurement-3d/rgbd-pointcloud/README.md similarity index 100% rename from depth-measurement/3d-measurement/rgbd-pointcloud/README.md rename to depth-measurement/measurement-3d/rgbd-pointcloud/README.md diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/main.py b/depth-measurement/measurement-3d/rgbd-pointcloud/main.py similarity index 100% rename from depth-measurement/3d-measurement/rgbd-pointcloud/main.py rename to depth-measurement/measurement-3d/rgbd-pointcloud/main.py diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml b/depth-measurement/measurement-3d/rgbd-pointcloud/oakapp.toml similarity index 87% rename from depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml rename to depth-measurement/measurement-3d/rgbd-pointcloud/oakapp.toml index 32b424772..27879164d 100644 --- a/depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml +++ b/depth-measurement/measurement-3d/rgbd-pointcloud/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.depth-measurement.3d-measurement.rgbd-pointcloud" +identifier = "com.example.depth-measurement.measurement-3d.rgbd-pointcloud" app_version = "1.0.0" prepare_container = [ diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/requirements.txt b/depth-measurement/measurement-3d/rgbd-pointcloud/requirements.txt similarity index 100% rename from depth-measurement/3d-measurement/rgbd-pointcloud/requirements.txt rename to depth-measurement/measurement-3d/rgbd-pointcloud/requirements.txt diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/utils/__init__.py b/depth-measurement/measurement-3d/rgbd-pointcloud/utils/__init__.py similarity index 100% rename from depth-measurement/3d-measurement/rgbd-pointcloud/utils/__init__.py rename to depth-measurement/measurement-3d/rgbd-pointcloud/utils/__init__.py diff --git a/depth-measurement/3d-measurement/rgbd-pointcloud/utils/arguments.py b/depth-measurement/measurement-3d/rgbd-pointcloud/utils/arguments.py similarity index 100% rename from depth-measurement/3d-measurement/rgbd-pointcloud/utils/arguments.py rename to depth-measurement/measurement-3d/rgbd-pointcloud/utils/arguments.py diff --git a/depth-measurement/3d-measurement/tof-pointcloud/AGENTS.md b/depth-measurement/measurement-3d/tof-pointcloud/AGENTS.md similarity index 94% rename from depth-measurement/3d-measurement/tof-pointcloud/AGENTS.md rename to depth-measurement/measurement-3d/tof-pointcloud/AGENTS.md index ab64368da..6bc830112 100644 --- a/depth-measurement/3d-measurement/tof-pointcloud/AGENTS.md +++ b/depth-measurement/measurement-3d/tof-pointcloud/AGENTS.md @@ -20,7 +20,7 @@ This is the ToF-specific depth and point-cloud tuning demo in the repo. Use it w ## Quick Facts -- `Category:` `depth-measurement/3d-measurement/tof-pointcloud` +- `Category:` `depth-measurement/measurement-3d/tof-pointcloud` - `Shape:` `script+desktop-ui` - `Primary task:` interactive ToF filter tuning with raw versus filtered point-cloud visualization - `Entrypoint:` [main.py](main.py) @@ -71,7 +71,7 @@ This is the ToF-specific depth and point-cloud tuning demo in the repo. Use it w - `To reuse only the ToF pipeline:` extract `camera_pipeline()` and drop the GUI/Open3D sections - `To change default filter behavior:` edit [main.py](main.py) in `get_initial_filter_params()` and the Tkinter variable defaults - `To disable point clouds and keep only 2D visualization:` remove the Open3D thread setup and keep the OpenCV windows -- `To compare against stereo point clouds:` use [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) as the stereo baseline +- `To compare against stereo point clouds:` use [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) as the stereo baseline ## Constraints @@ -90,7 +90,7 @@ This is the ToF-specific depth and point-cloud tuning demo in the repo. Use it w ## Related Examples -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you want a stereo RGBD point-cloud baseline instead of ToF +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you want a stereo RGBD point-cloud baseline instead of ToF - [depth-measurement/wls-filter](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/wls-filter): use this when you want host-side stereo post-processing rather than ToF filtering - [depth-measurement/dynamic-calibration](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/dynamic-calibration): use this when your goal is stereo calibration workflows rather than ToF tuning - [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host): use this when you want another host-processing depth reference built around stereo disparity instead of ToF point clouds diff --git a/depth-measurement/3d-measurement/tof-pointcloud/README.md b/depth-measurement/measurement-3d/tof-pointcloud/README.md similarity index 100% rename from depth-measurement/3d-measurement/tof-pointcloud/README.md rename to depth-measurement/measurement-3d/tof-pointcloud/README.md diff --git a/depth-measurement/3d-measurement/tof-pointcloud/main.py b/depth-measurement/measurement-3d/tof-pointcloud/main.py similarity index 100% rename from depth-measurement/3d-measurement/tof-pointcloud/main.py rename to depth-measurement/measurement-3d/tof-pointcloud/main.py diff --git a/depth-measurement/3d-measurement/tof-pointcloud/requirements.txt b/depth-measurement/measurement-3d/tof-pointcloud/requirements.txt similarity index 100% rename from depth-measurement/3d-measurement/tof-pointcloud/requirements.txt rename to depth-measurement/measurement-3d/tof-pointcloud/requirements.txt diff --git a/depth-measurement/stereo-on-host/AGENTS.md b/depth-measurement/stereo-on-host/AGENTS.md index 748eb40f2..ad195402b 100644 --- a/depth-measurement/stereo-on-host/AGENTS.md +++ b/depth-measurement/stereo-on-host/AGENTS.md @@ -73,8 +73,8 @@ Host-side stereo benchmark example. It compares device `StereoDepth` disparity a - [depth-measurement/stereo-runtime-configuration](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-runtime-configuration): runtime tuning of on-device stereo depth - [depth-measurement/calc-spatial-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/calc-spatial-on-host): host-side spatial ROI measurement -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): RGB-aligned point clouds -- [tutorials/camera-depth](https://github.com/luxonis/oak-examples/tree/main/tutorials/camera-depth): simpler stereo depth baseline +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): RGB-aligned point clouds +- [tutorials/camera-stereo-depth](https://github.com/luxonis/oak-examples/tree/main/tutorials/camera-stereo-depth): simpler stereo depth baseline ## Validation diff --git a/depth-measurement/stereo-runtime-configuration/AGENTS.md b/depth-measurement/stereo-runtime-configuration/AGENTS.md index 80342503d..e22d686e7 100644 --- a/depth-measurement/stereo-runtime-configuration/AGENTS.md +++ b/depth-measurement/stereo-runtime-configuration/AGENTS.md @@ -90,7 +90,7 @@ This is the simplest runtime stereo-parameter tuning example in the repo. Use it - [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host): use this when you need host-side stereo computation and comparison - [depth-measurement/dynamic-calibration](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/dynamic-calibration): use this when you need richer stereo control around calibration state - [depth-measurement/calc-spatial-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/calc-spatial-on-host): use this when the host-side work should be ROI spatial measurement -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when the goal is RGBD fusion and point-cloud output +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when the goal is RGBD fusion and point-cloud output ## Validation diff --git a/depth-measurement/triangulation/AGENTS.md b/depth-measurement/triangulation/AGENTS.md index 3eac3a1be..cf08b536e 100644 --- a/depth-measurement/triangulation/AGENTS.md +++ b/depth-measurement/triangulation/AGENTS.md @@ -77,7 +77,7 @@ This is the repo reference for stereo neural inference followed by host-side 3D - `To swap face detection for another keypoint-capable model:` replace the YuNet YAML/model and keep the same parsed-output contract - `To reuse only the combined overlay view:` keep [utils/host_triangulation.py](utils/host_triangulation.py) and simplify the side-specific topics -- `To move back to depth-map-based spatial data:` use [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host) or [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) +- `To move back to depth-map-based spatial data:` use [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host) or [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) - `To make the packaged run path your baseline:` start with [oakapp.toml](oakapp.toml) and [main.py](main.py) ## Constraints @@ -97,7 +97,7 @@ This is the repo reference for stereo neural inference followed by host-side 3D ## Related Examples - [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host): use this when you need host-side stereo disparity comparison instead of keypoint triangulation -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you need RGBD point clouds instead of per-face triangulation +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you need RGBD point clouds instead of per-face triangulation - [neural-networks/face-detection/blur-faces](https://github.com/luxonis/oak-examples/tree/main/neural-networks/face-detection/blur-faces): use this when you need a single-camera YuNet-based face reference - [depth-measurement/calc-spatial-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/calc-spatial-on-host): use this when you need manual ROI spatial measurement instead of detection-driven triangulation diff --git a/depth-measurement/wls-filter/AGENTS.md b/depth-measurement/wls-filter/AGENTS.md index f4f528328..57877e4b7 100644 --- a/depth-measurement/wls-filter/AGENTS.md +++ b/depth-measurement/wls-filter/AGENTS.md @@ -88,7 +88,7 @@ This is the host-side WLS disparity post-processing reference in the repo. Use i - [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host): use this when you want host-side stereo comparison instead of WLS post-processing - [depth-measurement/stereo-runtime-configuration](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-runtime-configuration): use this when the tuning target should be device stereo parameters rather than host filters - [depth-measurement/calc-spatial-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/calc-spatial-on-host): use this when the host-side task should become ROI coordinate measurement -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when the end goal is a point cloud rather than a filtered disparity view +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when the end goal is a point cloud rather than a filtered disparity view ## Validation diff --git a/integrations/foxglove/AGENTS.md b/integrations/foxglove/AGENTS.md index b9e7d763b..c803a3e46 100644 --- a/integrations/foxglove/AGENTS.md +++ b/integrations/foxglove/AGENTS.md @@ -70,7 +70,7 @@ This is the repository reference for streaming DepthAI data into Foxglove Studio - `To expose more channels:` extend `create_channels()` and the main event loop in [utils/foxglove_utils.py](utils/foxglove_utils.py) and [main.py](main.py) - `To disable downsampling:` change `downsample_pcl` in [main.py](main.py) or `process_pointcloud()` in [utils/foxglove_utils.py](utils/foxglove_utils.py) - `To move to another external viewer:` compare this example with [integrations/rerun](https://github.com/luxonis/oak-examples/tree/main/integrations/rerun) -- `To keep point-cloud logic but use the Visualizer instead:` start instead from [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) +- `To keep point-cloud logic but use the Visualizer instead:` start instead from [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) ## Constraints @@ -89,7 +89,7 @@ This is the repository reference for streaming DepthAI data into Foxglove Studio ## Related Examples - [integrations/rerun](https://github.com/luxonis/oak-examples/tree/main/integrations/rerun): use this when you want another external viewer integration with point clouds and frames -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you need the RGBD/point-cloud baseline without Foxglove +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you need the RGBD/point-cloud baseline without Foxglove - [depth-measurement/stereo-on-host](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/stereo-on-host): use this when the host-side goal is stereo benchmarking rather than websocket export - [tutorials/camera-demo](https://github.com/luxonis/oak-examples/tree/main/tutorials/camera-demo): use this when you only need a simple camera baseline before adding external viewer integration diff --git a/integrations/rerun/AGENTS.md b/integrations/rerun/AGENTS.md index 926a285d3..18d6687f0 100644 --- a/integrations/rerun/AGENTS.md +++ b/integrations/rerun/AGENTS.md @@ -71,7 +71,7 @@ This is the repository reference for streaming DepthAI data into Rerun Viewer. U - `To default to web serving:` start from the `--serve` branch in [main.py](main.py) - `To remove point-cloud support:` keep the RGB/mono logging path and drop the stereo branch - `To switch to another external viewer:` compare with [integrations/foxglove](https://github.com/luxonis/oak-examples/tree/main/integrations/foxglove) -- `To keep the RGBD baseline and leave Rerun behind:` compare with [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) +- `To keep the RGBD baseline and leave Rerun behind:` compare with [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud) ## Constraints @@ -89,7 +89,7 @@ This is the repository reference for streaming DepthAI data into Rerun Viewer. U ## Related Examples - [integrations/foxglove](https://github.com/luxonis/oak-examples/tree/main/integrations/foxglove): use this when you want another external viewer integration with similar stream types -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you need the point-cloud baseline without Rerun +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you need the point-cloud baseline without Rerun - [depth-measurement/wls-filter](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/wls-filter): use this when you need host-side stereo post-processing rather than viewer integration - [tutorials/camera-demo](https://github.com/luxonis/oak-examples/tree/main/tutorials/camera-demo): use this when you need a smaller camera baseline before adding Rerun diff --git a/neural-networks/object-detection/spatial-detections/AGENTS.md b/neural-networks/object-detection/spatial-detections/AGENTS.md index d8d09d788..4075c9941 100644 --- a/neural-networks/object-detection/spatial-detections/AGENTS.md +++ b/neural-networks/object-detection/spatial-detections/AGENTS.md @@ -56,7 +56,7 @@ This is the repository’s standard reference for real-time object detections wi - [neural-networks/object-detection/social-distancing](https://github.com/luxonis/oak-examples/tree/main/neural-networks/object-detection/social-distancing): use this when you need person-to-person distance monitoring - [neural-networks/object-detection/human-machine-safety](https://github.com/luxonis/oak-examples/tree/main/neural-networks/object-detection/human-machine-safety): use this when you need palm/object safety logic -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you need a point-cloud baseline instead of spatial boxes +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you need a point-cloud baseline instead of spatial boxes ## Validation diff --git a/neural-networks/segmentation/depth-crop/AGENTS.md b/neural-networks/segmentation/depth-crop/AGENTS.md index 3417100c9..b01b1c7de 100644 --- a/neural-networks/segmentation/depth-crop/AGENTS.md +++ b/neural-networks/segmentation/depth-crop/AGENTS.md @@ -54,8 +54,8 @@ This is the repository reference for combining segmentation with unified depth a ## Related Examples - [neural-networks/segmentation/blur-background](https://github.com/luxonis/oak-examples/tree/main/neural-networks/segmentation/blur-background): use this when you only need segmentation-based blur -- [depth-measurement/3d-measurement/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/rgbd-pointcloud): use this when you need RGBD/point-cloud output instead of segmentation masking -- [depth-measurement/3d-measurement/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/3d-measurement/box-measurement): use this when you need 3D measurement built on a semantic/instance understanding of the scene +- [depth-measurement/measurement-3d/rgbd-pointcloud](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/rgbd-pointcloud): use this when you need RGBD/point-cloud output instead of segmentation masking +- [depth-measurement/measurement-3d/box-measurement](https://github.com/luxonis/oak-examples/tree/main/depth-measurement/measurement-3d/box-measurement): use this when you need 3D measurement built on a semantic/instance understanding of the scene ## Validation diff --git a/tests/constants.py b/tests/constants.py index ca2d1f723..b3d9309df 100644 --- a/tests/constants.py +++ b/tests/constants.py @@ -145,7 +145,7 @@ "reason": "Missing token, please set DEPTHAI_HUB_API_KEY environment variable or use setToken method", "rules": {"and": [{"platform": "all"}]}, }, - "depth-measurement/3d-measurement/tof-pointcloud": { + "depth-measurement/measurement-3d/tof-pointcloud": { "reason": "ToF cameras are only of the RVC2 variant", "rules": {"and": [{"platform": ["rvc4"]}]}, }, @@ -153,7 +153,7 @@ "reason": "Can't sync outputs inside Triangulation node", "rules": {"and": [{"platform": ["rvc4"]}]}, }, - "depth-measurement/3d-measurement/box-measurement": { + "depth-measurement/measurement-3d/box-measurement": { "reason": "No matching distribution found for open3d~=0.18 on Windows", "rules": {"and": [{"os": ["win"]}]}, }, From dd9879696b06565b7e735ecbc1c3e72299e3cd11 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Mon, 31 Aug 2026 11:01:04 +0200 Subject: [PATCH 05/17] update INDEX.md --- INDEX.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INDEX.md b/INDEX.md index e013c091a..526802176 100644 --- a/INDEX.md +++ b/INDEX.md @@ -46,11 +46,11 @@ For shared vocabulary such as shapes, modes, platforms, and runtime files, read ### Depth Measurement +- [depth-measurement/calc-spatial-on-host](depth-measurement/calc-spatial-on-host/AGENTS.md): This is the host-side spatial ROI measurement reference in the repo. Use it when you want to calculate X/Y/Z coordinates on the host from stereo depth instead of using `SpatialLocationCalculator` on-device. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `spatial`, `stereo`. +- [depth-measurement/dynamic-calibration](depth-measurement/dynamic-calibration/AGENTS.md): This is the runtime stereo dynamic-calibration workflow reference in the repo. Use it when you need an interactive calibration HUD, coverage/quality feedback, and host-driven control over applying or flashing calibration... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `calibration`, `depth`, `host-processing`, `stereo`. - [depth-measurement/measurement-3d/box-measurement](depth-measurement/measurement-3d/box-measurement/AGENTS.md): This is the strongest reference in the repo for RGBD box measurement with instance segmentation, point clouds, and host-side cuboid fitting. Use it when you need an app-shaped stereo+RGB measurement pipeline rather than... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `segmentation`, `stereo`. - [depth-measurement/measurement-3d/rgbd-pointcloud](depth-measurement/measurement-3d/rgbd-pointcloud/AGENTS.md): This is the minimal RGBD point-cloud reference in the repo. Use it when you need the smallest example that aligns stereo depth to a color stream and publishes a point cloud without adding custom host processing or neural... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `pointcloud`, `stereo`, `streaming`. - [depth-measurement/measurement-3d/tof-pointcloud](depth-measurement/measurement-3d/tof-pointcloud/AGENTS.md): This is the ToF-specific depth and point-cloud tuning demo in the repo. Use it when you need interactive runtime control over ToF filters, side-by-side raw versus filtered point clouds, and a desktop GUI rather than a... Shape: `script`. Mode: `host`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `pointcloud`, `tof`. -- [depth-measurement/calc-spatial-on-host](depth-measurement/calc-spatial-on-host/AGENTS.md): This is the host-side spatial ROI measurement reference in the repo. Use it when you want to calculate X/Y/Z coordinates on the host from stereo depth instead of using `SpatialLocationCalculator` on-device. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `spatial`, `stereo`. -- [depth-measurement/dynamic-calibration](depth-measurement/dynamic-calibration/AGENTS.md): This is the runtime stereo dynamic-calibration workflow reference in the repo. Use it when you need an interactive calibration HUD, coverage/quality feedback, and host-driven control over applying or flashing calibration... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `calibration`, `depth`, `host-processing`, `stereo`. - [depth-measurement/stereo-on-host](depth-measurement/stereo-on-host/AGENTS.md): Host-side stereo benchmark example. It compares device `StereoDepth` disparity against host-computed `cv2.StereoSGBM` disparity, including rectified mono previews and an SSIM annotation. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `disparity`, `host-processing`, `stereo`. - [depth-measurement/stereo-runtime-configuration](depth-measurement/stereo-runtime-configuration/AGENTS.md): This is the simplest runtime stereo-parameter tuning example in the repo. Use it when you need to change `StereoDepth` settings live from the host and visualize the effect immediately in the DepthAI Visualizer. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `stereo`. - [depth-measurement/triangulation](depth-measurement/triangulation/AGENTS.md): This is the repo reference for stereo neural inference followed by host-side 3D triangulation. Use it when you need two camera streams, paired detections/keypoints, and approximate XYZ reconstruction from left/right... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `detections`, `host-processing`, `stereo`. From 941330e507af1ff80da7dd66a29256bcf9857a50 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Mon, 31 Aug 2026 11:12:59 +0200 Subject: [PATCH 06/17] update INDEX.md --- INDEX.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INDEX.md b/INDEX.md index 526802176..6fe33e0f1 100644 --- a/INDEX.md +++ b/INDEX.md @@ -46,10 +46,10 @@ For shared vocabulary such as shapes, modes, platforms, and runtime files, read ### Depth Measurement -- [depth-measurement/calc-spatial-on-host](depth-measurement/calc-spatial-on-host/AGENTS.md): This is the host-side spatial ROI measurement reference in the repo. Use it when you want to calculate X/Y/Z coordinates on the host from stereo depth instead of using `SpatialLocationCalculator` on-device. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `spatial`, `stereo`. +- [depth-measurement/calc-spatial-on-host](depth-measurement/calc-spatial-on-host/AGENTS.md): This is the host-side spatial ROI measurement reference in the repo. Use it when you want to calculate X/Y/Z coordinates on the host from unified depth instead of using `SpatialLocationCalculator` on-device. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `spatial`. - [depth-measurement/dynamic-calibration](depth-measurement/dynamic-calibration/AGENTS.md): This is the runtime stereo dynamic-calibration workflow reference in the repo. Use it when you need an interactive calibration HUD, coverage/quality feedback, and host-driven control over applying or flashing calibration... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `calibration`, `depth`, `host-processing`, `stereo`. - [depth-measurement/measurement-3d/box-measurement](depth-measurement/measurement-3d/box-measurement/AGENTS.md): This is the strongest reference in the repo for RGBD box measurement with instance segmentation, point clouds, and host-side cuboid fitting. Use it when you need an app-shaped stereo+RGB measurement pipeline rather than... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `segmentation`, `stereo`. -- [depth-measurement/measurement-3d/rgbd-pointcloud](depth-measurement/measurement-3d/rgbd-pointcloud/AGENTS.md): This is the minimal RGBD point-cloud reference in the repo. Use it when you need the smallest example that aligns stereo depth to a color stream and publishes a point cloud without adding custom host processing or neural... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `pointcloud`, `stereo`, `streaming`. +- [depth-measurement/measurement-3d/rgbd-pointcloud](depth-measurement/measurement-3d/rgbd-pointcloud/AGENTS.md): This is the minimal RGBD point-cloud reference in the repo. Use it when you need the smallest example that aligns unified depth to a color stream and publishes a point cloud without adding custom host processing or... Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `host-processing`, `pointcloud`, `streaming`. - [depth-measurement/measurement-3d/tof-pointcloud](depth-measurement/measurement-3d/tof-pointcloud/AGENTS.md): This is the ToF-specific depth and point-cloud tuning demo in the repo. Use it when you need interactive runtime control over ToF filters, side-by-side raw versus filtered point clouds, and a desktop GUI rather than a... Shape: `script`. Mode: `host`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `pointcloud`, `tof`. - [depth-measurement/stereo-on-host](depth-measurement/stereo-on-host/AGENTS.md): Host-side stereo benchmark example. It compares device `StereoDepth` disparity against host-computed `cv2.StereoSGBM` disparity, including rectified mono previews and an SSIM annotation. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `disparity`, `host-processing`, `stereo`. - [depth-measurement/stereo-runtime-configuration](depth-measurement/stereo-runtime-configuration/AGENTS.md): This is the simplest runtime stereo-parameter tuning example in the repo. Use it when you need to change `StereoDepth` settings live from the host and visualize the effect immediately in the DepthAI Visualizer. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `stereo`. From 5f193cf5e9edd01fc1daadfc85877b5ff31a78ba Mon Sep 17 00:00:00 2001 From: petrnovota Date: Mon, 31 Aug 2026 13:49:59 +0200 Subject: [PATCH 07/17] allign folder name with oakapp identifier convention --- INDEX.md | 2 +- neural-networks/README.md | 6 +++--- .../objectron/.oakappignore | 0 .../objectron/AGENTS.md | 2 +- .../objectron/README.md | 0 .../depthai_models/objectron_chair.RVC2.yaml | 0 .../depthai_models/objectron_chair.RVC4.yaml | 0 .../depthai_models/yolov6_nano_r2_coco.RVC2.yaml | 0 .../depthai_models/yolov6_nano_r2_coco.RVC4.yaml | 0 .../objectron/main.py | 0 .../objectron/media/chair.gif | Bin .../objectron/oakapp.toml | 2 +- .../objectron/requirements.txt | 0 .../objectron/utils/__init__.py | 0 .../objectron/utils/annotation_node.py | 0 .../objectron/utils/arguments.py | 0 .../pose-estimation/animal-pose/AGENTS.md | 2 +- 17 files changed, 7 insertions(+), 7 deletions(-) rename neural-networks/{3D-detection => detection-3D}/objectron/.oakappignore (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/AGENTS.md (98%) rename neural-networks/{3D-detection => detection-3D}/objectron/README.md (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/depthai_models/objectron_chair.RVC2.yaml (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/depthai_models/objectron_chair.RVC4.yaml (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/main.py (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/media/chair.gif (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/oakapp.toml (88%) rename neural-networks/{3D-detection => detection-3D}/objectron/requirements.txt (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/utils/__init__.py (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/utils/annotation_node.py (100%) rename neural-networks/{3D-detection => detection-3D}/objectron/utils/arguments.py (100%) diff --git a/INDEX.md b/INDEX.md index 6fe33e0f1..2108749e8 100644 --- a/INDEX.md +++ b/INDEX.md @@ -66,7 +66,6 @@ For shared vocabulary such as shapes, modes, platforms, and runtime files, read ### Neural Networks -- [neural-networks/3D-detection/objectron](neural-networks/3D-detection/objectron/AGENTS.md): This is the repository reference for two-stage 3D bounding-box estimation with Objectron. Use it when you need detect-then-crop-then-estimate 3D keypoints rather than a plain 2D detector or stereo depth baseline. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `detections`, `stereo`. - [neural-networks/counting/crowdcounting](neural-networks/counting/crowdcounting/AGENTS.md): This is the repository reference for density-map-based crowd counting. Use it when you need aggregate crowd estimation from one model output rather than tracked objects or per-person detections. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `counting`, `detections`. - [neural-networks/counting/cumulative-object-counting](neural-networks/counting/cumulative-object-counting/AGENTS.md): This is the repository reference for line-crossing cumulative counting with tracked detections. Use it when you need directional counts from object motion across a configurable axis rather than a simple per-frame total. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `counting`, `detections`. - [neural-networks/counting/depth-people-counting](neural-networks/counting/depth-people-counting/AGENTS.md): This is the repository reference for privacy-preserving people counting from disparity alone. Use it when you need virtual line counting without RGB detection models. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `counting`, `depth`, `detections`, `disparity`. @@ -75,6 +74,7 @@ For shared vocabulary such as shapes, modes, platforms, and runtime files, read - [neural-networks/depth-estimation/foundation-stereo](neural-networks/depth-estimation/foundation-stereo/AGENTS.md): This is the repository reference for host-run Foundation Stereo inference compared against device stereo output. Use it when you need a heavyweight host compute baseline rather than an on-device packaged app. Shape: `script`. Mode: `host`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `stereo`. - [neural-networks/depth-estimation/neural-depth](neural-networks/depth-estimation/neural-depth/AGENTS.md): This is the repository reference for Luxonis `NeuralDepth` running directly on RVC4 hardware. Use it when you need the built-in NeuralDepth node and its runtime controls rather than a host-run stereo model. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `stereo`. - [neural-networks/depth-estimation/neural-depth/host_eval](neural-networks/depth-estimation/neural-depth/host_eval/AGENTS.md): This is the repository reference for offline NeuralDepth evaluation on stereo datasets. Use it when you need accuracy metrics and saved outputs from host-supplied stereo pairs instead of a live visualizer demo. Shape: `eval`. Mode: `host`. Guide: `AGENTS.md`. Tags: `eval`, `depth`, `host-processing`, `stereo`. +- [neural-networks/detection-3D/objectron](neural-networks/detection-3D/objectron/AGENTS.md): This is the repository reference for two-stage 3D bounding-box estimation with Objectron. Use it when you need detect-then-crop-then-estimate 3D keypoints rather than a plain 2D detector or stereo depth baseline. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `detections`, `stereo`. - [neural-networks/face-detection/age-gender](neural-networks/face-detection/age-gender/AGENTS.md): This is the repository reference for two-stage face analytics with age and gender prediction. Use it when you need detect-then-crop face inference rather than a single-stage detector. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `age-gender`, `detections`, `face`. - [neural-networks/face-detection/blur-faces](neural-networks/face-detection/blur-faces/AGENTS.md): This is the repository reference for real-time face blurring. Use it when you need the smallest privacy-oriented face example in the repo. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `blur`, `detections`, `face`. - [neural-networks/face-detection/emotion-recognition](neural-networks/face-detection/emotion-recognition/AGENTS.md): This is the repository reference for two-stage face emotion recognition. Use it when you need detected faces cropped into a second-stage classifier rather than a single-stage analytics model. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `detections`, `face`. diff --git a/neural-networks/README.md b/neural-networks/README.md index 154df1eb1..ca724e971 100644 --- a/neural-networks/README.md +++ b/neural-networks/README.md @@ -13,7 +13,7 @@ If not explicitly marked or specified examples can run both on RVC2 and RVC4 dev - [Classification](#classification) - [Object Detection](#object-detection) - [Face Detection](#face-detection) -- [3D Detection](#3d-detection) +- [Detection 3D](#detection-3D) - [Keypoint Detection](#keypoint-detection) - [Pose Estimation](#pose-estimation) - [Segmentation](#segmentation) @@ -93,11 +93,11 @@ LEGEND: ✅: available; ❌: not available; 🚧: work in progress | Objectron | | :--------------------------------------------------------------------------------------: | -| objectron | +| objectron | | Model | RVC2 | RVC4 (peripheral) | RVC4 (standalone) | DepthAIv2 | Notes | | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ----------------- | --------- | ------------------------------------------------------------------------------------ | -| [objectron](3D-detection/objectron) | [yolov6-nano](https://models.luxonis.com/luxonis/yolov6-nano/face58c4-45ab-42a0-bafc-19f9fee8a034), [objectron](https://models.luxonis.com/luxonis/objectron/4c7a51db-9cbe-4aee-a4c1-b8abbbe18c11) | ✅ | ✅ | ✅ | [gen2-objectron](https://github.com/luxonis/oak-examples/tree/master/gen2-objectron) | +| [objectron](detection-3D/objectron) | [yolov6-nano](https://models.luxonis.com/luxonis/yolov6-nano/face58c4-45ab-42a0-bafc-19f9fee8a034), [objectron](https://models.luxonis.com/luxonis/objectron/4c7a51db-9cbe-4aee-a4c1-b8abbbe18c11) | ✅ | ✅ | ✅ | [gen2-objectron](https://github.com/luxonis/oak-examples/tree/master/gen2-objectron) | ## Keypoint Detection diff --git a/neural-networks/3D-detection/objectron/.oakappignore b/neural-networks/detection-3D/objectron/.oakappignore similarity index 100% rename from neural-networks/3D-detection/objectron/.oakappignore rename to neural-networks/detection-3D/objectron/.oakappignore diff --git a/neural-networks/3D-detection/objectron/AGENTS.md b/neural-networks/detection-3D/objectron/AGENTS.md similarity index 98% rename from neural-networks/3D-detection/objectron/AGENTS.md rename to neural-networks/detection-3D/objectron/AGENTS.md index 6d7ebf09a..dfbfb1be4 100644 --- a/neural-networks/3D-detection/objectron/AGENTS.md +++ b/neural-networks/detection-3D/objectron/AGENTS.md @@ -18,7 +18,7 @@ This is the repository reference for two-stage 3D bounding-box estimation with O ## Quick Facts -- `Category:` `neural-networks/3D-detection/objectron` +- `Category:` `neural-networks/detection-3D/objectron` - `Shape:` `script+standalone` - `Primary task:` 2-stage chair detection plus 3D Objectron pose/keypoint estimation - `Entrypoint:` [main.py](main.py) diff --git a/neural-networks/3D-detection/objectron/README.md b/neural-networks/detection-3D/objectron/README.md similarity index 100% rename from neural-networks/3D-detection/objectron/README.md rename to neural-networks/detection-3D/objectron/README.md diff --git a/neural-networks/3D-detection/objectron/depthai_models/objectron_chair.RVC2.yaml b/neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC2.yaml similarity index 100% rename from neural-networks/3D-detection/objectron/depthai_models/objectron_chair.RVC2.yaml rename to neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC2.yaml diff --git a/neural-networks/3D-detection/objectron/depthai_models/objectron_chair.RVC4.yaml b/neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC4.yaml similarity index 100% rename from neural-networks/3D-detection/objectron/depthai_models/objectron_chair.RVC4.yaml rename to neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC4.yaml diff --git a/neural-networks/3D-detection/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml b/neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml similarity index 100% rename from neural-networks/3D-detection/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml rename to neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml diff --git a/neural-networks/3D-detection/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml b/neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml similarity index 100% rename from neural-networks/3D-detection/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml rename to neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml diff --git a/neural-networks/3D-detection/objectron/main.py b/neural-networks/detection-3D/objectron/main.py similarity index 100% rename from neural-networks/3D-detection/objectron/main.py rename to neural-networks/detection-3D/objectron/main.py diff --git a/neural-networks/3D-detection/objectron/media/chair.gif b/neural-networks/detection-3D/objectron/media/chair.gif similarity index 100% rename from neural-networks/3D-detection/objectron/media/chair.gif rename to neural-networks/detection-3D/objectron/media/chair.gif diff --git a/neural-networks/3D-detection/objectron/oakapp.toml b/neural-networks/detection-3D/objectron/oakapp.toml similarity index 88% rename from neural-networks/3D-detection/objectron/oakapp.toml rename to neural-networks/detection-3D/objectron/oakapp.toml index 0bdc92b6a..f7d6cdf55 100644 --- a/neural-networks/3D-detection/objectron/oakapp.toml +++ b/neural-networks/detection-3D/objectron/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.neural-networks.3D-detection.objectron" +identifier = "com.example.neural-networks.detection-3D.objectron" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/3D-detection/objectron/requirements.txt b/neural-networks/detection-3D/objectron/requirements.txt similarity index 100% rename from neural-networks/3D-detection/objectron/requirements.txt rename to neural-networks/detection-3D/objectron/requirements.txt diff --git a/neural-networks/3D-detection/objectron/utils/__init__.py b/neural-networks/detection-3D/objectron/utils/__init__.py similarity index 100% rename from neural-networks/3D-detection/objectron/utils/__init__.py rename to neural-networks/detection-3D/objectron/utils/__init__.py diff --git a/neural-networks/3D-detection/objectron/utils/annotation_node.py b/neural-networks/detection-3D/objectron/utils/annotation_node.py similarity index 100% rename from neural-networks/3D-detection/objectron/utils/annotation_node.py rename to neural-networks/detection-3D/objectron/utils/annotation_node.py diff --git a/neural-networks/3D-detection/objectron/utils/arguments.py b/neural-networks/detection-3D/objectron/utils/arguments.py similarity index 100% rename from neural-networks/3D-detection/objectron/utils/arguments.py rename to neural-networks/detection-3D/objectron/utils/arguments.py diff --git a/neural-networks/pose-estimation/animal-pose/AGENTS.md b/neural-networks/pose-estimation/animal-pose/AGENTS.md index cdc5a6723..d27b3d824 100644 --- a/neural-networks/pose-estimation/animal-pose/AGENTS.md +++ b/neural-networks/pose-estimation/animal-pose/AGENTS.md @@ -55,7 +55,7 @@ This is the repository reference for two-stage animal pose estimation. Use it wh - [neural-networks/pose-estimation/human-pose](https://github.com/luxonis/oak-examples/tree/main/neural-networks/pose-estimation/human-pose): use this when you need human pose - [neural-networks/pose-estimation/hand-pose](https://github.com/luxonis/oak-examples/tree/main/neural-networks/pose-estimation/hand-pose): use this when you need hand pose and gesture logic -- [neural-networks/3D-detection/objectron](https://github.com/luxonis/oak-examples/tree/main/neural-networks/3D-detection/objectron): use this when you need another detect-then-keypoint workflow with geometry flavor +- [neural-networks/detection-3D/objectron](https://github.com/luxonis/oak-examples/tree/main/neural-networks/detection-3D/objectron): use this when you need another detect-then-keypoint workflow with geometry flavor ## Validation From a4806cbce26aebb01e94e6da3c2591cd6e4db460 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Tue, 1 Sep 2026 09:16:11 +0200 Subject: [PATCH 08/17] fix naming --- INDEX.md | 2 +- neural-networks/README.md | 6 +++--- .../objectron/.oakappignore | 0 .../objectron/AGENTS.md | 2 +- .../objectron/README.md | 0 .../depthai_models/objectron_chair.RVC2.yaml | 0 .../depthai_models/objectron_chair.RVC4.yaml | 0 .../depthai_models/yolov6_nano_r2_coco.RVC2.yaml | 0 .../depthai_models/yolov6_nano_r2_coco.RVC4.yaml | 0 .../objectron/main.py | 0 .../objectron/media/chair.gif | Bin .../objectron/oakapp.toml | 2 +- .../objectron/requirements.txt | 0 .../objectron/utils/__init__.py | 0 .../objectron/utils/annotation_node.py | 0 .../objectron/utils/arguments.py | 0 .../pose-estimation/animal-pose/AGENTS.md | 2 +- 17 files changed, 7 insertions(+), 7 deletions(-) rename neural-networks/{detection-3D => detection-3d}/objectron/.oakappignore (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/AGENTS.md (98%) rename neural-networks/{detection-3D => detection-3d}/objectron/README.md (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/depthai_models/objectron_chair.RVC2.yaml (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/depthai_models/objectron_chair.RVC4.yaml (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/main.py (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/media/chair.gif (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/oakapp.toml (88%) rename neural-networks/{detection-3D => detection-3d}/objectron/requirements.txt (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/utils/__init__.py (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/utils/annotation_node.py (100%) rename neural-networks/{detection-3D => detection-3d}/objectron/utils/arguments.py (100%) diff --git a/INDEX.md b/INDEX.md index 2108749e8..1366556f5 100644 --- a/INDEX.md +++ b/INDEX.md @@ -74,7 +74,7 @@ For shared vocabulary such as shapes, modes, platforms, and runtime files, read - [neural-networks/depth-estimation/foundation-stereo](neural-networks/depth-estimation/foundation-stereo/AGENTS.md): This is the repository reference for host-run Foundation Stereo inference compared against device stereo output. Use it when you need a heavyweight host compute baseline rather than an on-device packaged app. Shape: `script`. Mode: `host`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `stereo`. - [neural-networks/depth-estimation/neural-depth](neural-networks/depth-estimation/neural-depth/AGENTS.md): This is the repository reference for Luxonis `NeuralDepth` running directly on RVC4 hardware. Use it when you need the built-in NeuralDepth node and its runtime controls rather than a host-run stereo model. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `depth`, `host-processing`, `stereo`. - [neural-networks/depth-estimation/neural-depth/host_eval](neural-networks/depth-estimation/neural-depth/host_eval/AGENTS.md): This is the repository reference for offline NeuralDepth evaluation on stereo datasets. Use it when you need accuracy metrics and saved outputs from host-supplied stereo pairs instead of a live visualizer demo. Shape: `eval`. Mode: `host`. Guide: `AGENTS.md`. Tags: `eval`, `depth`, `host-processing`, `stereo`. -- [neural-networks/detection-3D/objectron](neural-networks/detection-3D/objectron/AGENTS.md): This is the repository reference for two-stage 3D bounding-box estimation with Objectron. Use it when you need detect-then-crop-then-estimate 3D keypoints rather than a plain 2D detector or stereo depth baseline. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `detections`, `stereo`. +- [neural-networks/detection-3d/objectron](neural-networks/detection-3d/objectron/AGENTS.md): This is the repository reference for two-stage 3D bounding-box estimation with Objectron. Use it when you need detect-then-crop-then-estimate 3D keypoints rather than a plain 2D detector or stereo depth baseline. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `3d`, `depth`, `detections`, `stereo`. - [neural-networks/face-detection/age-gender](neural-networks/face-detection/age-gender/AGENTS.md): This is the repository reference for two-stage face analytics with age and gender prediction. Use it when you need detect-then-crop face inference rather than a single-stage detector. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `age-gender`, `detections`, `face`. - [neural-networks/face-detection/blur-faces](neural-networks/face-detection/blur-faces/AGENTS.md): This is the repository reference for real-time face blurring. Use it when you need the smallest privacy-oriented face example in the repo. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `blur`, `detections`, `face`. - [neural-networks/face-detection/emotion-recognition](neural-networks/face-detection/emotion-recognition/AGENTS.md): This is the repository reference for two-stage face emotion recognition. Use it when you need detected faces cropped into a second-stage classifier rather than a single-stage analytics model. Shape: `script+standalone`. Mode: `host + standalone`. Guide: `AGENTS.md`. Tags: `detections`, `face`. diff --git a/neural-networks/README.md b/neural-networks/README.md index ca724e971..e4bd4ff07 100644 --- a/neural-networks/README.md +++ b/neural-networks/README.md @@ -13,7 +13,7 @@ If not explicitly marked or specified examples can run both on RVC2 and RVC4 dev - [Classification](#classification) - [Object Detection](#object-detection) - [Face Detection](#face-detection) -- [Detection 3D](#detection-3D) +- [Detection 3D](#detection-3d) - [Keypoint Detection](#keypoint-detection) - [Pose Estimation](#pose-estimation) - [Segmentation](#segmentation) @@ -93,11 +93,11 @@ LEGEND: ✅: available; ❌: not available; 🚧: work in progress | Objectron | | :--------------------------------------------------------------------------------------: | -| objectron | +| objectron | | Model | RVC2 | RVC4 (peripheral) | RVC4 (standalone) | DepthAIv2 | Notes | | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ----------------- | --------- | ------------------------------------------------------------------------------------ | -| [objectron](detection-3D/objectron) | [yolov6-nano](https://models.luxonis.com/luxonis/yolov6-nano/face58c4-45ab-42a0-bafc-19f9fee8a034), [objectron](https://models.luxonis.com/luxonis/objectron/4c7a51db-9cbe-4aee-a4c1-b8abbbe18c11) | ✅ | ✅ | ✅ | [gen2-objectron](https://github.com/luxonis/oak-examples/tree/master/gen2-objectron) | +| [objectron](detection-3d/objectron) | [yolov6-nano](https://models.luxonis.com/luxonis/yolov6-nano/face58c4-45ab-42a0-bafc-19f9fee8a034), [objectron](https://models.luxonis.com/luxonis/objectron/4c7a51db-9cbe-4aee-a4c1-b8abbbe18c11) | ✅ | ✅ | ✅ | [gen2-objectron](https://github.com/luxonis/oak-examples/tree/master/gen2-objectron) | ## Keypoint Detection diff --git a/neural-networks/detection-3D/objectron/.oakappignore b/neural-networks/detection-3d/objectron/.oakappignore similarity index 100% rename from neural-networks/detection-3D/objectron/.oakappignore rename to neural-networks/detection-3d/objectron/.oakappignore diff --git a/neural-networks/detection-3D/objectron/AGENTS.md b/neural-networks/detection-3d/objectron/AGENTS.md similarity index 98% rename from neural-networks/detection-3D/objectron/AGENTS.md rename to neural-networks/detection-3d/objectron/AGENTS.md index dfbfb1be4..f9484ad41 100644 --- a/neural-networks/detection-3D/objectron/AGENTS.md +++ b/neural-networks/detection-3d/objectron/AGENTS.md @@ -18,7 +18,7 @@ This is the repository reference for two-stage 3D bounding-box estimation with O ## Quick Facts -- `Category:` `neural-networks/detection-3D/objectron` +- `Category:` `neural-networks/detection-3d/objectron` - `Shape:` `script+standalone` - `Primary task:` 2-stage chair detection plus 3D Objectron pose/keypoint estimation - `Entrypoint:` [main.py](main.py) diff --git a/neural-networks/detection-3D/objectron/README.md b/neural-networks/detection-3d/objectron/README.md similarity index 100% rename from neural-networks/detection-3D/objectron/README.md rename to neural-networks/detection-3d/objectron/README.md diff --git a/neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC2.yaml b/neural-networks/detection-3d/objectron/depthai_models/objectron_chair.RVC2.yaml similarity index 100% rename from neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC2.yaml rename to neural-networks/detection-3d/objectron/depthai_models/objectron_chair.RVC2.yaml diff --git a/neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC4.yaml b/neural-networks/detection-3d/objectron/depthai_models/objectron_chair.RVC4.yaml similarity index 100% rename from neural-networks/detection-3D/objectron/depthai_models/objectron_chair.RVC4.yaml rename to neural-networks/detection-3d/objectron/depthai_models/objectron_chair.RVC4.yaml diff --git a/neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml b/neural-networks/detection-3d/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml similarity index 100% rename from neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml rename to neural-networks/detection-3d/objectron/depthai_models/yolov6_nano_r2_coco.RVC2.yaml diff --git a/neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml b/neural-networks/detection-3d/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml similarity index 100% rename from neural-networks/detection-3D/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml rename to neural-networks/detection-3d/objectron/depthai_models/yolov6_nano_r2_coco.RVC4.yaml diff --git a/neural-networks/detection-3D/objectron/main.py b/neural-networks/detection-3d/objectron/main.py similarity index 100% rename from neural-networks/detection-3D/objectron/main.py rename to neural-networks/detection-3d/objectron/main.py diff --git a/neural-networks/detection-3D/objectron/media/chair.gif b/neural-networks/detection-3d/objectron/media/chair.gif similarity index 100% rename from neural-networks/detection-3D/objectron/media/chair.gif rename to neural-networks/detection-3d/objectron/media/chair.gif diff --git a/neural-networks/detection-3D/objectron/oakapp.toml b/neural-networks/detection-3d/objectron/oakapp.toml similarity index 88% rename from neural-networks/detection-3D/objectron/oakapp.toml rename to neural-networks/detection-3d/objectron/oakapp.toml index f7d6cdf55..8d18bf2d6 100644 --- a/neural-networks/detection-3D/objectron/oakapp.toml +++ b/neural-networks/detection-3d/objectron/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.neural-networks.detection-3D.objectron" +identifier = "com.example.neural-networks.detection-3d.objectron" app_version = "1.0.0" prepare_container = [ diff --git a/neural-networks/detection-3D/objectron/requirements.txt b/neural-networks/detection-3d/objectron/requirements.txt similarity index 100% rename from neural-networks/detection-3D/objectron/requirements.txt rename to neural-networks/detection-3d/objectron/requirements.txt diff --git a/neural-networks/detection-3D/objectron/utils/__init__.py b/neural-networks/detection-3d/objectron/utils/__init__.py similarity index 100% rename from neural-networks/detection-3D/objectron/utils/__init__.py rename to neural-networks/detection-3d/objectron/utils/__init__.py diff --git a/neural-networks/detection-3D/objectron/utils/annotation_node.py b/neural-networks/detection-3d/objectron/utils/annotation_node.py similarity index 100% rename from neural-networks/detection-3D/objectron/utils/annotation_node.py rename to neural-networks/detection-3d/objectron/utils/annotation_node.py diff --git a/neural-networks/detection-3D/objectron/utils/arguments.py b/neural-networks/detection-3d/objectron/utils/arguments.py similarity index 100% rename from neural-networks/detection-3D/objectron/utils/arguments.py rename to neural-networks/detection-3d/objectron/utils/arguments.py diff --git a/neural-networks/pose-estimation/animal-pose/AGENTS.md b/neural-networks/pose-estimation/animal-pose/AGENTS.md index d27b3d824..c05b9a91d 100644 --- a/neural-networks/pose-estimation/animal-pose/AGENTS.md +++ b/neural-networks/pose-estimation/animal-pose/AGENTS.md @@ -55,7 +55,7 @@ This is the repository reference for two-stage animal pose estimation. Use it wh - [neural-networks/pose-estimation/human-pose](https://github.com/luxonis/oak-examples/tree/main/neural-networks/pose-estimation/human-pose): use this when you need human pose - [neural-networks/pose-estimation/hand-pose](https://github.com/luxonis/oak-examples/tree/main/neural-networks/pose-estimation/hand-pose): use this when you need hand pose and gesture logic -- [neural-networks/detection-3D/objectron](https://github.com/luxonis/oak-examples/tree/main/neural-networks/detection-3D/objectron): use this when you need another detect-then-keypoint workflow with geometry flavor +- [neural-networks/detection-3d/objectron](https://github.com/luxonis/oak-examples/tree/main/neural-networks/detection-3d/objectron): use this when you need another detect-then-keypoint workflow with geometry flavor ## Validation From 741548217582fffee5faae7104c52304d30e1c41 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Mon, 7 Sep 2026 15:36:35 +0200 Subject: [PATCH 09/17] debug --- tests/test_examples_standalone.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index 8722feb1c..a924d5e87 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -142,8 +142,9 @@ def enqueue_output(out, q): try: for line in iter(out.readline, ""): q.put(line) - except ValueError: + except ValueError as e: # This happens if 'out' is closed while reading. + logger.error(f"Could not read from output: {e}") pass finally: try: @@ -227,7 +228,7 @@ def run_example(example_dir: Path, args: Dict) -> bool: try: line = q.get_nowait().strip() recent_lines.append(line) - logger.debug(f"[app output]: {line}") + logger.warning(f"[app output]: {line}") except queue.Empty: pass From c10d9400c89b571a873da05d5fcc26c14c59747f Mon Sep 17 00:00:00 2001 From: petrnovota Date: Mon, 7 Sep 2026 16:01:06 +0200 Subject: [PATCH 10/17] debug --- tests/test_examples_standalone.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index a924d5e87..f8932189c 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -141,6 +141,7 @@ def setup_env( def enqueue_output(out, q): try: for line in iter(out.readline, ""): + logger.warning(f"read line: {line}") q.put(line) except ValueError as e: # This happens if 'out' is closed while reading. From 3201f1b98413ebc0ee9e58ab5ab86feef7c323a7 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Mon, 7 Sep 2026 16:38:15 +0200 Subject: [PATCH 11/17] fix standalone tests --- tests/test_examples_standalone.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index f8932189c..a309e69fe 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -189,7 +189,6 @@ def run_example(example_dir: Path, args: Dict) -> bool: for line in process.stdout: line = line.strip() recent_lines.append(line) - logger.debug(f"[app output]: {line}") # Detect app start trigger if "App output:" in line: @@ -204,9 +203,6 @@ def run_example(example_dir: Path, args: Dict) -> bool: logger.error(f"Timeout waiting for app start after {startup_timeout}s.") return False - # At this point, either app started, or process.stdout hit EOF - process.stdout.close() - process.wait() if not app_started: logger.error( f"Process exited before app started (code: {process.returncode})" @@ -252,12 +248,11 @@ def run_example(example_dir: Path, args: Dict) -> bool: time.sleep(1) # Clean up process - if process.poll() is None: - process.terminate() - try: - process.wait(timeout=5) - except subprocess.TimeoutExpired: - process.kill() + process = subprocess.Popen(["oakctl", "app", "stop", APP_ID], **popen_kwargs) + try: + process.wait(timeout=10) + except subprocess.TimeoutExpired: + process.kill() if passed: return True From 9906a67794ee99eb1a5979cf4c9089850de00858 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Tue, 8 Sep 2026 10:24:54 +0200 Subject: [PATCH 12/17] Improve standalone tests - detect pipline was created by checking `Pipeline created` log - always print last 10 lines of app logs to potentially catch issues otherwise not discoverable by tests, like Sync issues and others --- tests/test_examples_standalone.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index a309e69fe..496ce397a 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -190,8 +190,8 @@ def run_example(example_dir: Path, args: Dict) -> bool: line = line.strip() recent_lines.append(line) - # Detect app start trigger - if "App output:" in line: + # Detect app start trigger, wait for pipeline to be created to see if the pipeline can run + if "Pipeline created" in line: app_started = True start_time = time.time() logger.info("App start detected. Starting run timer.") @@ -225,7 +225,6 @@ def run_example(example_dir: Path, args: Dict) -> bool: try: line = q.get_nowait().strip() recent_lines.append(line) - logger.warning(f"[app output]: {line}") except queue.Empty: pass @@ -235,9 +234,6 @@ def run_example(example_dir: Path, args: Dict) -> bool: logger.error( f"App status switched to '{status}' after {time.time() - start_time:.2f}s but should run for {run_duration}s." ) - logger.error("Last 10 log lines from device:") - for log_line in recent_lines: - logger.error(f" {log_line}") passed = False break @@ -247,6 +243,9 @@ def run_example(example_dir: Path, args: Dict) -> bool: time.sleep(1) + logger.info("Last 10 log lines from device:") + for log_line in recent_lines: + logger.info(f" {log_line}") # Clean up process process = subprocess.Popen(["oakctl", "app", "stop", APP_ID], **popen_kwargs) try: From 9cdd728546e40c2d260130499f7d4bd885f9b51b Mon Sep 17 00:00:00 2001 From: petrnovota Date: Tue, 8 Sep 2026 18:30:12 +0200 Subject: [PATCH 13/17] Verify standalone pipelines start successfully --- apps/conference-demos/rgb-depth-connections/main.py | 2 +- apps/data-collection/backend/src/main.py | 3 ++- apps/default-app/main.py | 2 +- apps/dino-tracking/backend/src/main.py | 2 +- apps/focused-vision/backend/src/main.py | 3 ++- apps/object-volume-measurement-3d/backend/src/main.py | 2 +- apps/p2p-measurement/backend/src/main.py | 3 ++- .../backend/src/main.py | 1 + apps/qr-tiling/backend/src/main.py | 3 ++- camera-controls/depth-driven-focus/main.py | 2 +- camera-controls/lossless-zooming/main.py | 2 +- camera-controls/manual-camera-control/main.py | 2 +- .../open-vocabulary-object-detection/backend/src/main.py | 3 ++- depth-measurement/calc-spatial-on-host/main.py | 1 + depth-measurement/dynamic-calibration/main.py | 2 ++ depth-measurement/measurement-3d/box-measurement/main.py | 2 ++ depth-measurement/measurement-3d/rgbd-pointcloud/main.py | 1 + depth-measurement/stereo-on-host/main.py | 2 +- depth-measurement/stereo-runtime-configuration/main.py | 2 +- depth-measurement/wls-filter/main.py | 2 +- integrations/foxglove/main.py | 1 + integrations/rerun/main.py | 4 +++- neural-networks/counting/crowdcounting/main.py | 2 +- .../counting/cumulative-object-counting/main.py | 2 +- neural-networks/counting/depth-people-counting/main.py | 2 +- neural-networks/counting/people-counter/main.py | 2 +- .../depth-estimation/crestereo-depth-matching/main.py | 2 +- neural-networks/depth-estimation/neural-depth/main.py | 2 +- neural-networks/detection-3d/objectron/main.py | 3 +-- neural-networks/face-detection/age-gender/main.py | 2 +- neural-networks/face-detection/blur-faces/main.py | 2 +- .../face-detection/emotion-recognition/main.py | 2 +- .../face-detection/face-mask-detection/main.py | 2 +- neural-networks/face-detection/fatigue-detection/main.py | 2 +- neural-networks/face-detection/gaze-estimation/main.py | 2 +- .../face-detection/head-posture-detection/main.py | 1 + neural-networks/feature-detection/xfeat/mono.py | 4 ++-- neural-networks/feature-detection/xfeat/stereo.py | 2 +- neural-networks/generic-example/main.py | 2 +- .../barcode-detection-conveyor-belt/main.py | 7 +++++-- .../object-detection/human-machine-safety/main.py | 2 +- .../object-detection/social-distancing/main.py | 2 +- .../object-detection/spatial-detections/main.py | 2 +- neural-networks/object-detection/text-blur/main.py | 2 +- .../object-detection/yolo-host-decoding/main.py | 2 +- neural-networks/object-detection/yolo-p/main.py | 2 +- neural-networks/object-detection/yolo-world/main.py | 1 + .../object-tracking/collision-avoidance/main.py | 2 +- neural-networks/object-tracking/deepsort-tracking/main.py | 2 +- neural-networks/object-tracking/kalman/main.py | 2 +- neural-networks/object-tracking/people-tracker/main.py | 2 +- neural-networks/ocr/general-ocr/main.py | 1 + neural-networks/ocr/license-plate-recognition/main.py | 2 +- neural-networks/pose-estimation/animal-pose/main.py | 2 +- neural-networks/pose-estimation/hand-pose/main.py | 2 +- neural-networks/pose-estimation/human-pose/main.py | 2 +- .../reidentification/human-reidentification/main.py | 4 ++-- neural-networks/segmentation/blur-background/main.py | 1 + neural-networks/segmentation/depth-crop/main.py | 2 +- .../speech-recognition/whisper-tiny-en/main.py | 2 +- streaming/mjpeg-streaming/main.py | 7 ++++++- streaming/on-device-encoding/main.py | 2 +- streaming/webrtc-streaming/main.py | 8 ++++++-- streaming/webrtc-streaming/utils/transform.py | 3 ++- tests/test_examples_standalone.py | 4 ++-- tutorials/camera-demo/main.py | 2 +- tutorials/camera-depth/main.py | 2 +- tutorials/custom-models/main.py | 2 +- tutorials/full-fov-nn/main.py | 1 + tutorials/play-encoded-stream/main.py | 2 +- tutorials/qr-with-tiling/main.py | 2 +- 71 files changed, 98 insertions(+), 66 deletions(-) diff --git a/apps/conference-demos/rgb-depth-connections/main.py b/apps/conference-demos/rgb-depth-connections/main.py index 0cb26aeed..e22e0390b 100755 --- a/apps/conference-demos/rgb-depth-connections/main.py +++ b/apps/conference-demos/rgb-depth-connections/main.py @@ -107,8 +107,8 @@ def _handle_shutdown_signal(_signum, _frame): visualizer.addTopic("Detections", combined.detections_output, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/apps/data-collection/backend/src/main.py b/apps/data-collection/backend/src/main.py index d674037b2..d9e1239a0 100644 --- a/apps/data-collection/backend/src/main.py +++ b/apps/data-collection/backend/src/main.py @@ -107,8 +107,9 @@ def main(): visualizer.registerService("Get App Config Service", get_config_service.handle) logger.info("FE services registered!") - logger.info("Pipeline created. Starting...") + logger.info("Pipeline created.") pipeline.start() + logger.info("Pipeline started.") visualizer.registerPipeline(pipeline) logger.info("Pipeline running!") diff --git a/apps/default-app/main.py b/apps/default-app/main.py index bc81d6b48..ff245d936 100644 --- a/apps/default-app/main.py +++ b/apps/default-app/main.py @@ -93,8 +93,8 @@ def _handle_shutdown_signal(_signum, _frame): visualizer.addTopic("Depth", coloredDepth.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/apps/dino-tracking/backend/src/main.py b/apps/dino-tracking/backend/src/main.py index b08b3cb34..197d89f4b 100644 --- a/apps/dino-tracking/backend/src/main.py +++ b/apps/dino-tracking/backend/src/main.py @@ -179,8 +179,8 @@ def main(): ) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/apps/focused-vision/backend/src/main.py b/apps/focused-vision/backend/src/main.py index 8b98d820c..bf476e909 100644 --- a/apps/focused-vision/backend/src/main.py +++ b/apps/focused-vision/backend/src/main.py @@ -247,8 +247,9 @@ def _handle_shutdown_signal(_signum, _frame): visualizer.addTopic( "Focused with Tiling", face_crops_tiling.out, "focused_vision_tiling" ) - logger.error("Starting Pipeline") + logger.info("Pipeline created.") pipeline.start() + logger.info("Pipeline started.") visualizer.registerPipeline(pipeline) counter = 0 diff --git a/apps/object-volume-measurement-3d/backend/src/main.py b/apps/object-volume-measurement-3d/backend/src/main.py index 248ddad1e..16ff5e6ff 100644 --- a/apps/object-volume-measurement-3d/backend/src/main.py +++ b/apps/object-volume-measurement-3d/backend/src/main.py @@ -228,8 +228,8 @@ def measurement_method_service(payload: dict): visualizer.addTopic("Plane Status", measurement_node.out_plane_status, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) inputNNData = dai.NNData() diff --git a/apps/p2p-measurement/backend/src/main.py b/apps/p2p-measurement/backend/src/main.py index fafeeaaa2..1cfb0dec0 100644 --- a/apps/p2p-measurement/backend/src/main.py +++ b/apps/p2p-measurement/backend/src/main.py @@ -135,8 +135,9 @@ def get_tracking_status_service(data: dict): visualizer.addTopic("Depth", coloredDepth.out, "images") visualizer.addTopic("Point Annotations", point_tracker.output_annotations, "images") + print("Pipeline created.") pipeline.start() - print("Pipeline started successfully") + print("Pipeline started.") visualizer.registerPipeline(pipeline) diff --git a/apps/people-demographics-and-sentiment-analysis/backend/src/main.py b/apps/people-demographics-and-sentiment-analysis/backend/src/main.py index facc525ec..277f30371 100644 --- a/apps/people-demographics-and-sentiment-analysis/backend/src/main.py +++ b/apps/people-demographics-and-sentiment-analysis/backend/src/main.py @@ -122,6 +122,7 @@ def main(): print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/apps/qr-tiling/backend/src/main.py b/apps/qr-tiling/backend/src/main.py index 36b0e6a45..a8e6f8e82 100644 --- a/apps/qr-tiling/backend/src/main.py +++ b/apps/qr-tiling/backend/src/main.py @@ -177,8 +177,9 @@ def _handle_shutdown_signal(_signum, _frame): ) visualizer.registerService(params_service.NAME, params_service) - logger.info("Pipeline created. Starting...") + logger.info("Pipeline created.") pipeline.start() + logger.info("Pipeline started.") visualizer.registerPipeline(pipeline) logger.info("Pipeline running!") diff --git a/camera-controls/depth-driven-focus/main.py b/camera-controls/depth-driven-focus/main.py index e9c727132..e061a35e5 100644 --- a/camera-controls/depth-driven-focus/main.py +++ b/camera-controls/depth-driven-focus/main.py @@ -57,8 +57,8 @@ visualizer.addTopic("Focus distance", depth_driven_focus.output, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/camera-controls/lossless-zooming/main.py b/camera-controls/lossless-zooming/main.py index da63a9cfa..00b5e3c7f 100644 --- a/camera-controls/lossless-zooming/main.py +++ b/camera-controls/lossless-zooming/main.py @@ -100,8 +100,8 @@ visualizer.addTopic("Cropped Face", crop_encoder.out, "crop") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/camera-controls/manual-camera-control/main.py b/camera-controls/manual-camera-control/main.py index 944589ce6..ea91360d8 100755 --- a/camera-controls/manual-camera-control/main.py +++ b/camera-controls/manual-camera-control/main.py @@ -26,8 +26,8 @@ visualizer.addTopic("Camera Configuration", manual_cam_control.output, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/custom-frontend/open-vocabulary-object-detection/backend/src/main.py b/custom-frontend/open-vocabulary-object-detection/backend/src/main.py index 9e870789c..4c7a89e15 100644 --- a/custom-frontend/open-vocabulary-object-detection/backend/src/main.py +++ b/custom-frontend/open-vocabulary-object-detection/backend/src/main.py @@ -95,8 +95,9 @@ def main(): ) logger.info("FE services registered!") - logger.info("Pipeline created. Starting...") + logger.info("Pipeline created.") pipeline.start() + logger.info("Pipeline started.") visualizer.registerPipeline(pipeline) logger.info("Pipeline running!") diff --git a/depth-measurement/calc-spatial-on-host/main.py b/depth-measurement/calc-spatial-on-host/main.py index 2db83776a..d3ef69f04 100755 --- a/depth-measurement/calc-spatial-on-host/main.py +++ b/depth-measurement/calc-spatial-on-host/main.py @@ -35,6 +35,7 @@ print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/depth-measurement/dynamic-calibration/main.py b/depth-measurement/dynamic-calibration/main.py index b4e55f6fe..00b865a63 100644 --- a/depth-measurement/dynamic-calibration/main.py +++ b/depth-measurement/dynamic-calibration/main.py @@ -60,7 +60,9 @@ ) visualizer.addTopic("DynCalib HUD", dyn_ctrl.out_annotations, "images") + print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) # give it queues diff --git a/depth-measurement/measurement-3d/box-measurement/main.py b/depth-measurement/measurement-3d/box-measurement/main.py index 3664d3ff7..740dae72d 100644 --- a/depth-measurement/measurement-3d/box-measurement/main.py +++ b/depth-measurement/measurement-3d/box-measurement/main.py @@ -91,7 +91,9 @@ visualizer.addTopic("Cuboid Fit", box_processing.outputANNCuboid, "images") visualizer.addTopic("Pointcloud", rgbd.pcl, "point_clouds") + print("Pipeline created.") p.start() + print("Pipeline started.") visualizer.registerPipeline(p) while p.isRunning(): diff --git a/depth-measurement/measurement-3d/rgbd-pointcloud/main.py b/depth-measurement/measurement-3d/rgbd-pointcloud/main.py index 6cd14ac58..e7f2b77fd 100644 --- a/depth-measurement/measurement-3d/rgbd-pointcloud/main.py +++ b/depth-measurement/measurement-3d/rgbd-pointcloud/main.py @@ -36,6 +36,7 @@ print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/depth-measurement/stereo-on-host/main.py b/depth-measurement/stereo-on-host/main.py index 38309bba5..55c0c9742 100644 --- a/depth-measurement/stereo-on-host/main.py +++ b/depth-measurement/stereo-on-host/main.py @@ -70,8 +70,8 @@ visualizer.addTopic("SSIM score", ssim.output, "depth") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/depth-measurement/stereo-runtime-configuration/main.py b/depth-measurement/stereo-runtime-configuration/main.py index 8c1baff5c..78ea1f791 100644 --- a/depth-measurement/stereo-runtime-configuration/main.py +++ b/depth-measurement/stereo-runtime-configuration/main.py @@ -51,8 +51,8 @@ visualizer.addTopic("Stereo config", stereo_controller.out_annotations, "color") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/depth-measurement/wls-filter/main.py b/depth-measurement/wls-filter/main.py index a0d081091..924b55e92 100755 --- a/depth-measurement/wls-filter/main.py +++ b/depth-measurement/wls-filter/main.py @@ -55,8 +55,8 @@ visualizer.addTopic("WLS Annotations", wls_filter.annotations) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/integrations/foxglove/main.py b/integrations/foxglove/main.py index 21a932ac5..2273452d5 100644 --- a/integrations/foxglove/main.py +++ b/integrations/foxglove/main.py @@ -85,6 +85,7 @@ async def main(): print("Pipeline created.") pipeline.start() + print("Pipeline started.") # Start server and wait for foxglove connection async with FoxgloveServer("0.0.0.0", 8765, "DepthAI server") as server: diff --git a/integrations/rerun/main.py b/integrations/rerun/main.py index b01c9f818..731fdf212 100644 --- a/integrations/rerun/main.py +++ b/integrations/rerun/main.py @@ -49,7 +49,9 @@ def main(): ) print("Pipeline created.") - pipeline.run() + pipeline.start() + print("Pipeline started.") + pipeline.wait() if __name__ == "__main__": diff --git a/neural-networks/counting/crowdcounting/main.py b/neural-networks/counting/crowdcounting/main.py index dd4f591ba..c116c8565 100644 --- a/neural-networks/counting/crowdcounting/main.py +++ b/neural-networks/counting/crowdcounting/main.py @@ -62,8 +62,8 @@ visualizer.addTopic("Count", annotation_node.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/counting/cumulative-object-counting/main.py b/neural-networks/counting/cumulative-object-counting/main.py index e5991c24e..f6bc3efc3 100644 --- a/neural-networks/counting/cumulative-object-counting/main.py +++ b/neural-networks/counting/cumulative-object-counting/main.py @@ -73,8 +73,8 @@ visualizer.addTopic("Count", annotation_node.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/counting/depth-people-counting/main.py b/neural-networks/counting/depth-people-counting/main.py index 0dc198161..42173f097 100644 --- a/neural-networks/counting/depth-people-counting/main.py +++ b/neural-networks/counting/depth-people-counting/main.py @@ -91,8 +91,8 @@ visualizer.addTopic("Count", annotation_node.out, "disparity") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/counting/people-counter/main.py b/neural-networks/counting/people-counter/main.py index 16a9987df..925c9ffcf 100644 --- a/neural-networks/counting/people-counter/main.py +++ b/neural-networks/counting/people-counter/main.py @@ -64,8 +64,8 @@ visualizer.addTopic("PersonCount", annotation_node.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/depth-estimation/crestereo-depth-matching/main.py b/neural-networks/depth-estimation/crestereo-depth-matching/main.py index d22490e12..3fdf470ea 100644 --- a/neural-networks/depth-estimation/crestereo-depth-matching/main.py +++ b/neural-networks/depth-estimation/crestereo-depth-matching/main.py @@ -109,8 +109,8 @@ visualizer.addTopic("CREStereo Depth", nn_coloring.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/depth-estimation/neural-depth/main.py b/neural-networks/depth-estimation/neural-depth/main.py index 578204e4a..cc96bb6e4 100644 --- a/neural-networks/depth-estimation/neural-depth/main.py +++ b/neural-networks/depth-estimation/neural-depth/main.py @@ -56,8 +56,8 @@ visualizer.addTopic("Controls", manual_cam_control.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/detection-3d/objectron/main.py b/neural-networks/detection-3d/objectron/main.py index 049ea24da..a2bd53776 100644 --- a/neural-networks/detection-3d/objectron/main.py +++ b/neural-networks/detection-3d/objectron/main.py @@ -103,10 +103,9 @@ visualizer.addTopic("Position", annotation_node.out_pose_annotations, "images") print("Pipeline created.") - pipeline.start() - visualizer.registerPipeline(pipeline) print("Pipeline started.") + visualizer.registerPipeline(pipeline) while pipeline.isRunning(): key_pressed = visualizer.waitKey(1) diff --git a/neural-networks/face-detection/age-gender/main.py b/neural-networks/face-detection/age-gender/main.py index 780d87947..87c37a78b 100644 --- a/neural-networks/face-detection/age-gender/main.py +++ b/neural-networks/face-detection/age-gender/main.py @@ -117,8 +117,8 @@ visualizer.addTopic("AgeGender", annotation_node.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/face-detection/blur-faces/main.py b/neural-networks/face-detection/blur-faces/main.py index 9a447fe36..9bce57869 100644 --- a/neural-networks/face-detection/blur-faces/main.py +++ b/neural-networks/face-detection/blur-faces/main.py @@ -54,8 +54,8 @@ visualizer.addTopic("FaceBlur", blur_node.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/face-detection/emotion-recognition/main.py b/neural-networks/face-detection/emotion-recognition/main.py index dee71f55d..e16de3fb2 100755 --- a/neural-networks/face-detection/emotion-recognition/main.py +++ b/neural-networks/face-detection/emotion-recognition/main.py @@ -104,8 +104,8 @@ visualizer.addTopic("Emotions", annotation_node.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/face-detection/face-mask-detection/main.py b/neural-networks/face-detection/face-mask-detection/main.py index dff669ce4..cc22d552e 100644 --- a/neural-networks/face-detection/face-mask-detection/main.py +++ b/neural-networks/face-detection/face-mask-detection/main.py @@ -63,8 +63,8 @@ visualizer.addTopic("Detections", det_process_filter.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/face-detection/fatigue-detection/main.py b/neural-networks/face-detection/fatigue-detection/main.py index 1b544d64e..9f7f107a2 100644 --- a/neural-networks/face-detection/fatigue-detection/main.py +++ b/neural-networks/face-detection/fatigue-detection/main.py @@ -103,8 +103,8 @@ visualizer.addTopic("Fatigue", annotation_node.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/face-detection/gaze-estimation/main.py b/neural-networks/face-detection/gaze-estimation/main.py index e5f124a13..6a585ce15 100644 --- a/neural-networks/face-detection/gaze-estimation/main.py +++ b/neural-networks/face-detection/gaze-estimation/main.py @@ -172,8 +172,8 @@ visualizer.addTopic("Gaze", annotation_node.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/face-detection/head-posture-detection/main.py b/neural-networks/face-detection/head-posture-detection/main.py index 3428f8323..29500cf58 100644 --- a/neural-networks/face-detection/head-posture-detection/main.py +++ b/neural-networks/face-detection/head-posture-detection/main.py @@ -105,6 +105,7 @@ print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/feature-detection/xfeat/mono.py b/neural-networks/feature-detection/xfeat/mono.py index 914a1ed01..d8adc2ab0 100644 --- a/neural-networks/feature-detection/xfeat/mono.py +++ b/neural-networks/feature-detection/xfeat/mono.py @@ -43,9 +43,9 @@ def mono_mode( visualizer.addTopic("Matches", custom_visualizer.output, "images") print("Pipeline created.") - print("\nPress 's' to set the reference frame.\n") - pipeline.start() + print("Pipeline started.") + print("\nPress 's' to set the reference frame.\n") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/feature-detection/xfeat/stereo.py b/neural-networks/feature-detection/xfeat/stereo.py index 805195dc8..d5c7e4608 100644 --- a/neural-networks/feature-detection/xfeat/stereo.py +++ b/neural-networks/feature-detection/xfeat/stereo.py @@ -73,8 +73,8 @@ def stereo_mode( visualizer.addTopic("Matches", custom_visualizer.output, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/generic-example/main.py b/neural-networks/generic-example/main.py index 733bc0ecb..c34f7ca63 100644 --- a/neural-networks/generic-example/main.py +++ b/neural-networks/generic-example/main.py @@ -61,8 +61,8 @@ visualizer.addTopic("Detections", nn_with_parser.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-detection/barcode-detection-conveyor-belt/main.py b/neural-networks/object-detection/barcode-detection-conveyor-belt/main.py index 027ff92ff..db3118110 100644 --- a/neural-networks/object-detection/barcode-detection-conveyor-belt/main.py +++ b/neural-networks/object-detection/barcode-detection-conveyor-belt/main.py @@ -88,9 +88,12 @@ visualizer.addTopic("Barcode Overlay", barcode_overlay.output) - pipeline.run() + print("Pipeline created.") + pipeline.start() + print("Pipeline started.") - while True: + while pipeline.isRunning(): + pipeline.processTasks() key = visualizer.waitKey(1) if key == ord("q"): break diff --git a/neural-networks/object-detection/human-machine-safety/main.py b/neural-networks/object-detection/human-machine-safety/main.py index f95dc3248..8fa1d56d6 100644 --- a/neural-networks/object-detection/human-machine-safety/main.py +++ b/neural-networks/object-detection/human-machine-safety/main.py @@ -165,8 +165,8 @@ visualizer.addTopic("Alert", show_alert.output) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-detection/social-distancing/main.py b/neural-networks/object-detection/social-distancing/main.py index a90a26449..8d05db65a 100644 --- a/neural-networks/object-detection/social-distancing/main.py +++ b/neural-networks/object-detection/social-distancing/main.py @@ -101,8 +101,8 @@ visualizer.addTopic("Bird-eye view", bird_eye_view.output, "bird-eye") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-detection/spatial-detections/main.py b/neural-networks/object-detection/spatial-detections/main.py index 2f603283b..753220ed6 100644 --- a/neural-networks/object-detection/spatial-detections/main.py +++ b/neural-networks/object-detection/spatial-detections/main.py @@ -99,8 +99,8 @@ visualizer.addTopic("Depth", depth_encoder.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-detection/text-blur/main.py b/neural-networks/object-detection/text-blur/main.py index cd341f52d..8923d61f1 100644 --- a/neural-networks/object-detection/text-blur/main.py +++ b/neural-networks/object-detection/text-blur/main.py @@ -56,8 +56,8 @@ visualizer.addTopic("Blur Text", blur_node.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-detection/yolo-host-decoding/main.py b/neural-networks/object-detection/yolo-host-decoding/main.py index d43a12210..a9fa75e1a 100644 --- a/neural-networks/object-detection/yolo-host-decoding/main.py +++ b/neural-networks/object-detection/yolo-host-decoding/main.py @@ -76,8 +76,8 @@ visualizer.addTopic("Detections", host_decoding_node.output) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-detection/yolo-p/main.py b/neural-networks/object-detection/yolo-p/main.py index 3739e2dbc..80a166eee 100644 --- a/neural-networks/object-detection/yolo-p/main.py +++ b/neural-networks/object-detection/yolo-p/main.py @@ -60,8 +60,8 @@ visualizer.addTopic("Lane Segmentation", nn.getOutput(2), "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-detection/yolo-world/main.py b/neural-networks/object-detection/yolo-world/main.py index 647923fcc..ac8796f71 100644 --- a/neural-networks/object-detection/yolo-world/main.py +++ b/neural-networks/object-detection/yolo-world/main.py @@ -95,6 +95,7 @@ print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) inputNNData = dai.NNData() diff --git a/neural-networks/object-tracking/collision-avoidance/main.py b/neural-networks/object-tracking/collision-avoidance/main.py index d75b301bb..4a3eb9924 100644 --- a/neural-networks/object-tracking/collision-avoidance/main.py +++ b/neural-networks/object-tracking/collision-avoidance/main.py @@ -81,8 +81,8 @@ visualizer.addTopic("Direction", collision_avoidance.out_direction) visualizer.addTopic("Bird Frame", birds_eye_view.output) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-tracking/deepsort-tracking/main.py b/neural-networks/object-tracking/deepsort-tracking/main.py index 10b7c43fc..18847536a 100644 --- a/neural-networks/object-tracking/deepsort-tracking/main.py +++ b/neural-networks/object-tracking/deepsort-tracking/main.py @@ -112,8 +112,8 @@ visualizer.addTopic("Detections", deepsort_tracking.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-tracking/kalman/main.py b/neural-networks/object-tracking/kalman/main.py index 267597da7..9aed318b3 100644 --- a/neural-networks/object-tracking/kalman/main.py +++ b/neural-networks/object-tracking/kalman/main.py @@ -82,8 +82,8 @@ visualizer.addTopic("Tracklets", kalman_filter_node.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/object-tracking/people-tracker/main.py b/neural-networks/object-tracking/people-tracker/main.py index ff15aa988..e602eb71d 100644 --- a/neural-networks/object-tracking/people-tracker/main.py +++ b/neural-networks/object-tracking/people-tracker/main.py @@ -76,8 +76,8 @@ visualizer.addTopic("People count", people_counter.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/ocr/general-ocr/main.py b/neural-networks/ocr/general-ocr/main.py index b31fcf89c..5bf9f1340 100644 --- a/neural-networks/ocr/general-ocr/main.py +++ b/neural-networks/ocr/general-ocr/main.py @@ -126,6 +126,7 @@ print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/ocr/license-plate-recognition/main.py b/neural-networks/ocr/license-plate-recognition/main.py index f00b1fc0d..80ce1f893 100644 --- a/neural-networks/ocr/license-plate-recognition/main.py +++ b/neural-networks/ocr/license-plate-recognition/main.py @@ -193,8 +193,8 @@ visualizer.addTopic("License Plates", visualizer_node.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/pose-estimation/animal-pose/main.py b/neural-networks/pose-estimation/animal-pose/main.py index 16bd29b4d..4469353ad 100644 --- a/neural-networks/pose-estimation/animal-pose/main.py +++ b/neural-networks/pose-estimation/animal-pose/main.py @@ -107,8 +107,8 @@ visualizer.addTopic("Pose", annotation_node.out_pose_annotations, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/pose-estimation/hand-pose/main.py b/neural-networks/pose-estimation/hand-pose/main.py index 002105b6e..f11eab173 100644 --- a/neural-networks/pose-estimation/hand-pose/main.py +++ b/neural-networks/pose-estimation/hand-pose/main.py @@ -139,8 +139,8 @@ visualizer.addTopic("Pose", annotation_node.out_pose_annotations, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/pose-estimation/human-pose/main.py b/neural-networks/pose-estimation/human-pose/main.py index 330cbb275..1ba3f695a 100644 --- a/neural-networks/pose-estimation/human-pose/main.py +++ b/neural-networks/pose-estimation/human-pose/main.py @@ -123,8 +123,8 @@ visualizer.addTopic("Pose", annotation_node.out_pose_annotations, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/reidentification/human-reidentification/main.py b/neural-networks/reidentification/human-reidentification/main.py index e53aa1adf..8e81c2ac9 100644 --- a/neural-networks/reidentification/human-reidentification/main.py +++ b/neural-networks/reidentification/human-reidentification/main.py @@ -122,10 +122,10 @@ visualizer.addTopic("Video", det_nn.passthrough, "images") visualizer.addTopic("Objects", id_node.out, "images") - print("Pipeline created.") - # Start Pipeline + print("Pipeline created.") pipeline.start() + print("Pipeline started.") while pipeline.isRunning(): key = visualizer.waitKey(1) diff --git a/neural-networks/segmentation/blur-background/main.py b/neural-networks/segmentation/blur-background/main.py index f9870cdc7..6acab45b5 100644 --- a/neural-networks/segmentation/blur-background/main.py +++ b/neural-networks/segmentation/blur-background/main.py @@ -54,6 +54,7 @@ print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/segmentation/depth-crop/main.py b/neural-networks/segmentation/depth-crop/main.py index b73f24711..5ae057683 100755 --- a/neural-networks/segmentation/depth-crop/main.py +++ b/neural-networks/segmentation/depth-crop/main.py @@ -101,8 +101,8 @@ visualizer.addTopic("Depth", output_depth_encoder.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/neural-networks/speech-recognition/whisper-tiny-en/main.py b/neural-networks/speech-recognition/whisper-tiny-en/main.py index 42ec03f90..55ad80751 100644 --- a/neural-networks/speech-recognition/whisper-tiny-en/main.py +++ b/neural-networks/speech-recognition/whisper-tiny-en/main.py @@ -82,8 +82,8 @@ visualizer.addTopic("Decoded Audio Message", text_process.annotaion_out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/streaming/mjpeg-streaming/main.py b/streaming/mjpeg-streaming/main.py index f30842838..edb62c914 100644 --- a/streaming/mjpeg-streaming/main.py +++ b/streaming/mjpeg-streaming/main.py @@ -55,4 +55,9 @@ labels=nn_archive.getConfigV1().model.heads[0].metadata.classes, ) - pipeline.run() + print("Pipeline created.") + pipeline.start() + print("Pipeline started.") + + while pipeline.isRunning(): + pipeline.processTasks(waitForTasks=True) diff --git a/streaming/on-device-encoding/main.py b/streaming/on-device-encoding/main.py index 915ab7ef1..dacf4a5f4 100644 --- a/streaming/on-device-encoding/main.py +++ b/streaming/on-device-encoding/main.py @@ -42,8 +42,8 @@ visualizer.addTopic("Video", video_enc.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/streaming/webrtc-streaming/main.py b/streaming/webrtc-streaming/main.py index e6968af8d..7fd8a7c62 100644 --- a/streaming/webrtc-streaming/main.py +++ b/streaming/webrtc-streaming/main.py @@ -10,12 +10,16 @@ from aiortc import RTCPeerConnection, RTCSessionDescription from utils.datachannel import setup_datachannel from utils.options_wrapper import OptionsWrapper -from utils.transform import VideoTransform +from utils.transform import VideoTransform, start_pipeline # There can be only one # if every VideoTransform tries to create its own pipeline they would all try to connect to their own device # one device can run only one pipeline at a time -pipeline = None +pipeline = dai.Pipeline() +startup_queues = start_pipeline(pipeline, OptionsWrapper({})) +print("Pipeline created.") +pipeline.start() +print("Pipeline started.") async def index(request): diff --git a/streaming/webrtc-streaming/utils/transform.py b/streaming/webrtc-streaming/utils/transform.py index 6fb9f21b0..1425c7148 100644 --- a/streaming/webrtc-streaming/utils/transform.py +++ b/streaming/webrtc-streaming/utils/transform.py @@ -17,7 +17,9 @@ def __init__(self, pipeline, application, pc_id, options): self.pipeline = pipeline self.preview, self.nn, self.label_map = start_pipeline(self.pipeline, options) + print("Pipeline created.") self.pipeline.start() + print("Pipeline started.") async def recv(self): frame = await self.parse_frame() @@ -143,7 +145,6 @@ def start_pipeline(pipeline: dai.Pipeline, options): nn_q = nn.out.createOutputQueue(blocking=False, maxSize=4) preview_q = cam_out.createOutputQueue(blocking=False, maxSize=4) - print("Pipeline created.") return preview_q, nn_q, label_map diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index 496ce397a..a6622118a 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -190,8 +190,8 @@ def run_example(example_dir: Path, args: Dict) -> bool: line = line.strip() recent_lines.append(line) - # Detect app start trigger, wait for pipeline to be created to see if the pipeline can run - if "Pipeline created" in line: + # Detect app start trigger only after Pipeline.start() returns successfully. + if "Pipeline started." in line: app_started = True start_time = time.time() logger.info("App start detected. Starting run timer.") diff --git a/tutorials/camera-demo/main.py b/tutorials/camera-demo/main.py index feaa2577a..d4d9696b6 100755 --- a/tutorials/camera-demo/main.py +++ b/tutorials/camera-demo/main.py @@ -37,8 +37,8 @@ visualizer.addTopic(sensor.socket.name, encoder.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/tutorials/camera-depth/main.py b/tutorials/camera-depth/main.py index bec65c3eb..481c884a0 100755 --- a/tutorials/camera-depth/main.py +++ b/tutorials/camera-depth/main.py @@ -48,8 +48,8 @@ visualizer.addTopic("Right", right_output, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/tutorials/custom-models/main.py b/tutorials/custom-models/main.py index d45aa1e1a..9db7c980d 100644 --- a/tutorials/custom-models/main.py +++ b/tutorials/custom-models/main.py @@ -108,8 +108,8 @@ visualizer.addTopic("Diff", diff_color.out, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/tutorials/full-fov-nn/main.py b/tutorials/full-fov-nn/main.py index ad94dabf0..ca46c0d74 100644 --- a/tutorials/full-fov-nn/main.py +++ b/tutorials/full-fov-nn/main.py @@ -55,6 +55,7 @@ print("Pipeline created.") pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/tutorials/play-encoded-stream/main.py b/tutorials/play-encoded-stream/main.py index b50ae0762..852c352ca 100644 --- a/tutorials/play-encoded-stream/main.py +++ b/tutorials/play-encoded-stream/main.py @@ -39,8 +39,8 @@ visualizer.addTopic("Video", encoder.out) print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): diff --git a/tutorials/qr-with-tiling/main.py b/tutorials/qr-with-tiling/main.py index 088fa8000..b498ab314 100644 --- a/tutorials/qr-with-tiling/main.py +++ b/tutorials/qr-with-tiling/main.py @@ -120,8 +120,8 @@ visualizer.addTopic("Tiling grid", scanner.out_grid, "images") print("Pipeline created.") - pipeline.start() + print("Pipeline started.") visualizer.registerPipeline(pipeline) while pipeline.isRunning(): From 6b25b1ae0782a18d097257b3f044b75d275bb3e6 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Wed, 9 Sep 2026 13:47:36 +0200 Subject: [PATCH 14/17] fix focused vision to work in tests --- apps/focused-vision/backend/src/main.py | 1 + tests/test_examples_standalone.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/focused-vision/backend/src/main.py b/apps/focused-vision/backend/src/main.py index bf476e909..0f83b3839 100644 --- a/apps/focused-vision/backend/src/main.py +++ b/apps/focused-vision/backend/src/main.py @@ -18,6 +18,7 @@ import os from pathlib import Path +logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) shutdown_requested = False diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index a6622118a..443983a0b 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -201,7 +201,7 @@ def run_example(example_dir: Path, args: Dict) -> bool: if time.time() - signal_start > startup_timeout: process.terminate() logger.error(f"Timeout waiting for app start after {startup_timeout}s.") - return False + break if not app_started: logger.error( From 9d0d50a564cf2c9eb106fecb445fc024370e8acc Mon Sep 17 00:00:00 2001 From: petrnovota Date: Wed, 9 Sep 2026 14:41:06 +0200 Subject: [PATCH 15/17] fix standalone test logging --- tests/test_examples_standalone.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index 443983a0b..2f9e29ebc 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -141,7 +141,7 @@ def setup_env( def enqueue_output(out, q): try: for line in iter(out.readline, ""): - logger.warning(f"read line: {line}") + logger.debug(f"read line: {line}") q.put(line) except ValueError as e: # This happens if 'out' is closed while reading. From b6d090b118e25374612ca3a8be73baed9c2e65b0 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Thu, 10 Sep 2026 10:59:50 +0200 Subject: [PATCH 16/17] Fix general OCR device timestamp propagation --- neural-networks/ocr/general-ocr/AGENTS.md | 1 + .../ocr/general-ocr/utils/host_process_detections.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/neural-networks/ocr/general-ocr/AGENTS.md b/neural-networks/ocr/general-ocr/AGENTS.md index c9b2db007..cc65dac7a 100644 --- a/neural-networks/ocr/general-ocr/AGENTS.md +++ b/neural-networks/ocr/general-ocr/AGENTS.md @@ -51,6 +51,7 @@ This is the repository reference for a two-stage OCR pipeline: text detection fo - `REQ_WIDTH = 1152` and `REQ_HEIGHT = 640` are chosen to preserve useful detail for the second stage. - OCR throughput depends on the number of detected text regions because each region becomes a recognition crop. +- Preserve the source detection's host timestamp, device timestamp, and sequence number on each crop config, the config group (including empty groups), and filtered detections; `FrameCropper` synchronizes config groups with frames using device timestamps. - The current example publishes overlay text, not a structured export format. ## Related Examples diff --git a/neural-networks/ocr/general-ocr/utils/host_process_detections.py b/neural-networks/ocr/general-ocr/utils/host_process_detections.py index 730cdd542..98bfda29d 100644 --- a/neural-networks/ocr/general-ocr/utils/host_process_detections.py +++ b/neural-networks/ocr/general-ocr/utils/host_process_detections.py @@ -126,6 +126,7 @@ def process(self, detections_input: dai.Buffer) -> None: sequence_num = detections_input.getSequenceNum() timestamp = detections_input.getTimestamp() + timestamp_device = detections_input.getTimestampDevice() detections = detections_input.detections @@ -154,16 +155,19 @@ def process(self, detections_input: dai.Buffer) -> None: cfg.setOutputSize(self.target_w, self.target_h, self.resize_mode) cfg.setTimestamp(timestamp) + cfg.setTimestampDevice(timestamp_device) cfg.setSequenceNum(sequence_num) configs_group[f"cfg_{len(valid_detections) - 1}"] = cfg configs_group.setTimestamp(timestamp) + configs_group.setTimestampDevice(timestamp_device) configs_group.setSequenceNum(sequence_num) self.config_output.send(configs_group) valid_msg = dai.ImgDetections() valid_msg.setSequenceNum(sequence_num) valid_msg.setTimestamp(timestamp) + valid_msg.setTimestampDevice(timestamp_device) valid_msg.detections = valid_detections valid_msg.setTransformation(detections_input.getTransformation()) From 3d0e2e2a6a20efad777c2be98f4c466032aeef02 Mon Sep 17 00:00:00 2001 From: petrnovota Date: Thu, 10 Sep 2026 15:20:25 +0200 Subject: [PATCH 17/17] keep more time for graceful app shutdown during standalone tests --- tests/test_examples_standalone.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_examples_standalone.py b/tests/test_examples_standalone.py index 2f9e29ebc..0b651e68a 100644 --- a/tests/test_examples_standalone.py +++ b/tests/test_examples_standalone.py @@ -249,8 +249,9 @@ def run_example(example_dir: Path, args: Dict) -> bool: # Clean up process process = subprocess.Popen(["oakctl", "app", "stop", APP_ID], **popen_kwargs) try: - process.wait(timeout=10) + process.wait(timeout=60) except subprocess.TimeoutExpired: + logger.error(f"Timeout waiting for app stop after {run_duration}s.") process.kill() if passed: