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/INDEX.md b/INDEX.md index 72c3f1037..1366556f5 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/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/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 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`. - [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`. @@ -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/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/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/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 10d85ae2f..24852d93b 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.object-volume-measurement-3d" -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 dbbada4d4..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.12 /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..b93c416f4 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"] +identifier = "com.example.apps.people-demographics-and-sentiment-analysis" +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/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/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 bc649bd4b..196f2df81 100644 --- a/camera-controls/lossless-zooming/oakapp.toml +++ b/camera-controls/lossless-zooming/oakapp.toml @@ -1,5 +1,5 @@ -identifier = "com.example.camere-controls.lossless-zooming" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +identifier = "com.example.camera-controls.lossless-zooming" +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/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/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/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/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 b3712714f..e313015ed 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 = ["/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" }, @@ -11,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/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/calc-spatial-on-host/oakapp.toml b/depth-measurement/calc-spatial-on-host/oakapp.toml index 153491b7e..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 = [ @@ -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/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 100% rename from depth-measurement/3d-measurement/box-measurement/oakapp.toml rename to depth-measurement/measurement-3d/box-measurement/oakapp.toml 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 100% rename from depth-measurement/3d-measurement/rgbd-pointcloud/oakapp.toml rename to depth-measurement/measurement-3d/rgbd-pointcloud/oakapp.toml 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/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..cf08b536e 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 @@ -78,8 +77,8 @@ 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 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 @@ -98,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/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/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/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/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/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/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/README.md b/neural-networks/README.md index 154df1eb1..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) -- [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/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 e734cfc67..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 = [ @@ -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..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 = [ @@ -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/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..f9484ad41 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 78% rename from neural-networks/3D-detection/objectron/oakapp.toml rename to neural-networks/detection-3d/objectron/oakapp.toml index ecc59092d..8d18bf2d6 100644 --- a/neural-networks/3D-detection/objectron/oakapp.toml +++ b/neural-networks/detection-3d/objectron/oakapp.toml @@ -1,4 +1,4 @@ -identifier = "com.example.detection-3d.objectron" +identifier = "com.example.neural-networks.detection-3d.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/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/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 e074b39e9..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.face-detection.age-gender" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +identifier = "com.example.neural-networks.face-detection.age-gender" +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/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/spatial-detections/AGENTS.md b/neural-networks/object-detection/spatial-detections/AGENTS.md index f6105aa31..4075c9941 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 @@ -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/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 08cbf368c..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.object-detection.spatial-detections" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +identifier = "com.example.neural-networks.object-detection.spatial-detections" +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/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/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 22adb4b8c..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.ocr.general-ocr" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +identifier = "com.example.neural-networks.ocr.general-ocr" +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/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/AGENTS.md b/neural-networks/pose-estimation/animal-pose/AGENTS.md index cdc5a6723..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/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 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/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 f84220acc..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.pose-estimation.hand-pose" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +identifier = "com.example.neural-networks.pose-estimation.hand-pose" +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/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/segmentation/depth-crop/AGENTS.md b/neural-networks/segmentation/depth-crop/AGENTS.md index c61348f28..b01b1c7de 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 @@ -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/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 75411270d..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.segmentation.depth-crop" -entrypoint = ["bash", "-c", "/usr/bin/runsvdir -P /etc/service"] +identifier = "com.example.neural-networks.segmentation.depth-crop" +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/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/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..d0ca6bb8d 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"] +identifier = "com.example.streaming.rtsp-streaming" +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/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 = [ 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"]}]}, }, 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"