remove detection from the node

dora-zed publishes camera data only. The two engines under src/engines/, the
objects output, the ZED_ENGINE/ZED_DETECTION_*/ZED_ONNX_* variables and the
ZED_PC_MODE=ROI crop are gone, along with the standalone engine test and the
model export script.

This drops the unconditional ONNX Runtime requirement from CMakeLists, the
Dockerfile and the install scripts, so the node now configures on a machine
with no ONNX Runtime — which is what blocked the Jetson build, since there is
no official ARM64 GPU binary.

zed_native is dropped rather than kept: it is bound to the live camera handle
and cannot run in a node that receives images over a dataflow. The removed
code remains reachable at tag v0.1.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7g2cBJ5e3r15ZbJ9WZn8c
This commit is contained in:
cesar
2026-09-08 09:12:40 -03:00
co-authored by Claude Opus 5
parent a734692b60
commit 126dbf4f32
17 changed files with 18 additions and 1242 deletions
-111
View File
@@ -1,111 +0,0 @@
# /// script
# requires-python = ">=3.10"
# dependencies = ["ultralytics>=8.3"]
# ///
"""Export a standard YOLOv11 model to ONNX for closed-vocabulary detection.
The exported model has one input:
images (1, 3, imgsz, imgsz) float32
Class names are fixed at training time. Provide them at runtime via
ZED_ONNX_LABELS or ZED_ONNX_LABELS_FILE.
Usage:
uv run scripts/export_yolo.py
uv run scripts/export_yolo.py --model s --output-dir models/
uv run scripts/export_yolo.py --model m --imgsz 1280
"""
import argparse
import shutil
import sys
from pathlib import Path
MODELS = {
"n": "yolo11n",
"s": "yolo11s",
"m": "yolo11m",
"l": "yolo11l",
"x": "yolo11x",
}
def parse_args():
p = argparse.ArgumentParser(
description="Export YOLOv11 to ONNX for closed-vocabulary detection"
)
p.add_argument(
"--model", "-m",
choices=list(MODELS),
default="n",
help="Model size: n (~6 MB), s (~18 MB), m (~38 MB), l (~49 MB), x (~109 MB). Default: n",
)
p.add_argument(
"--imgsz",
type=int,
default=640,
help="Input image size in pixels (square). Default: 640",
)
p.add_argument(
"--output-dir", "-o",
default=".",
help="Output directory for the .onnx file. Default: current directory",
)
return p.parse_args()
def verify_output(onnx_path: Path):
try:
import onnx
model = onnx.load(str(onnx_path))
inputs = [(i.name, [d.dim_value for d in i.type.tensor_type.shape.dim])
for i in model.graph.input]
outputs = [(o.name, [d.dim_value for d in o.type.tensor_type.shape.dim])
for o in model.graph.output]
print(f" Inputs: {inputs}")
print(f" Outputs: {outputs}")
except ImportError:
print(" (install 'onnx' to verify model structure)")
def main():
args = parse_args()
try:
from ultralytics import YOLO
except ImportError:
print("Error: ultralytics not installed. Run: uv run scripts/export_yolo.py", file=sys.stderr)
sys.exit(1)
model_name = MODELS[args.model]
out_dir = Path(args.output_dir)
out_dir.mkdir(parents=True, exist_ok=True)
out_name = f"{model_name}_i{args.imgsz}.onnx"
dst = out_dir / out_name
print(f"Model: {model_name}.pt")
print(f"Input size: {args.imgsz}")
print(f"Output: {dst}")
print()
model = YOLO(f"{model_name}.pt")
exported = Path(model.export(format="onnx", imgsz=args.imgsz))
if exported.resolve() != dst.resolve():
shutil.move(str(exported), str(dst))
print(f"\nVerifying exported model...")
verify_output(dst)
print(f"\nExported: {dst.resolve()}")
print(f"\nRun with (COCO labels example):")
print(f" ZED_ENGINE=onnx \\")
print(f" ZED_ONNX_MODEL_PATH={dst.resolve()} \\")
print(f" ZED_ONNX_LABELS_FILE=models/coco80.txt \\")
print(f" dora start dataflow.yml")
print(f"\nOr with inline labels:")
print(f" ZED_ONNX_LABELS=\"person,car,chair\" \\")
if __name__ == "__main__":
main()
+1 -14
View File
@@ -9,11 +9,6 @@
# JetPack 6.2.2 (L4T 36.5)
# JetPack 7.0 (L4T 38.2) — Jetson Thor
# JetPack 7.1 (L4T 38.4)
#
# ONNX Runtime: Microsoft does not publish official GPU binaries for ARM64.
# ONNX Runtime is still needed to configure the build; only the yolo_onnx
# engine uses it at runtime. Build it from source:
# https://onnxruntime.ai/docs/build/eps.html#tensorrt
set -euo pipefail
ZED_VERSION="5.2"
@@ -63,13 +58,5 @@ else
sudo "${TMP_DIR}/ZED_SDK.run" -- silent skip_python skip_tools
fi
# --- ONNX Runtime ---
echo ""
echo ">>> ONNX Runtime (ARM64 GPU): no official pre-built binary available."
echo " Needed to configure the build; only yolo_onnx uses it at runtime."
echo " Build from source:"
echo " https://onnxruntime.ai/docs/build/eps.html#tensorrt"
echo ""
echo ">>> Done. You can now run: mkdir -p build && cd build && cmake .. && make install"
echo ">>> Done. You can now run: scripts/build.sh"
echo ">>> Downloaded files are in ${TMP_DIR}"
+1 -29
View File
@@ -6,7 +6,6 @@
set -euo pipefail
ZED_VERSION="5.2"
ORT_VERSION="1.24.4"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TMP_DIR="${SCRIPT_DIR}/../tmp"
@@ -34,32 +33,5 @@ else
sudo "${TMP_DIR}/ZED_SDK.run" -- silent skip_python skip_tools
fi
# --- ONNX Runtime (C++ GPU, installs to /usr/local) ---
if [ -f /usr/local/lib64/libonnxruntime.so ] && [ -d /usr/local/lib/cmake/onnxruntime ]; then
echo ">>> ONNX Runtime already installed — skipping."
else
echo ">>> Downloading ONNX Runtime ${ORT_VERSION} GPU..."
download \
"https://github.com/microsoft/onnxruntime/releases/download/v${ORT_VERSION}/onnxruntime-linux-x64-gpu-${ORT_VERSION}.tgz" \
"${TMP_DIR}/onnxruntime-linux-x64-gpu-${ORT_VERSION}.tgz"
echo ">>> Extracting..."
tar -xzf "${TMP_DIR}/onnxruntime-linux-x64-gpu-${ORT_VERSION}.tgz" -C "${TMP_DIR}"
echo ">>> Installing ONNX Runtime to /usr/local..."
sudo mkdir -p /usr/local/include/onnxruntime
sudo cp -r "${TMP_DIR}/onnxruntime-linux-x64-gpu-${ORT_VERSION}/include/"* /usr/local/include/onnxruntime/
sudo mkdir -p /usr/local/lib64
sudo cp -r "${TMP_DIR}/onnxruntime-linux-x64-gpu-${ORT_VERSION}/lib/"* /usr/local/lib64/
# onnxruntimeTargets.cmake resolves the library as <prefix>/lib64, but Ubuntu
# is multiarch: CMake does not search lib64 for packages and ld.so does not
# search /usr/local/lib64 at all. Move only the package files to lib/cmake
# and put lib64 on the linker path.
sudo mkdir -p /usr/local/lib/cmake
sudo rm -rf /usr/local/lib/cmake/onnxruntime
sudo mv /usr/local/lib64/cmake/onnxruntime /usr/local/lib/cmake/
sudo rmdir /usr/local/lib64/cmake
echo /usr/local/lib64 | sudo tee /etc/ld.so.conf.d/onnxruntime.conf > /dev/null
sudo ldconfig
fi
echo ">>> Done. You can now run: mkdir -p build && cd build && cmake .. && make install"
echo ">>> Done. You can now run: scripts/build.sh"
echo ">>> Downloaded files are in ${TMP_DIR}"
-22
View File
@@ -10,10 +10,6 @@
$ErrorActionPreference = "Stop"
$ZED_INSTALL_DIR = "C:\Program Files (x86)\ZED SDK"
$ORT_VERSION = "1.24.4"
$ORT_NAME = "onnxruntime-win-x64-gpu_cuda13-$ORT_VERSION"
$ORT_URL = "https://github.com/microsoft/onnxruntime/releases/download/v$ORT_VERSION/$ORT_NAME.zip"
$ORT_DEST = "C:\onnxruntime"
# --- ZED SDK ---
if (Test-Path $ZED_INSTALL_DIR) {
@@ -25,23 +21,5 @@ if (Test-Path $ZED_INSTALL_DIR) {
Write-Host ""
}
# --- ONNX Runtime ---
if (Test-Path "$ORT_DEST\lib\onnxruntime.dll") {
Write-Host ">>> ONNX Runtime already installed at '$ORT_DEST' — skipping."
} else {
Write-Host ">>> Downloading ONNX Runtime $ORT_VERSION GPU (CUDA 13)..."
$tmp = "$env:TEMP\$ORT_NAME.zip"
Invoke-WebRequest -Uri $ORT_URL -OutFile $tmp
Write-Host ">>> Extracting to $ORT_DEST..."
Expand-Archive -Path $tmp -DestinationPath $env:TEMP -Force
if (Test-Path $ORT_DEST) { Remove-Item $ORT_DEST -Recurse -Force }
Move-Item "$env:TEMP\$ORT_NAME" $ORT_DEST
Remove-Item $tmp
Write-Host ">>> ONNX Runtime installed to $ORT_DEST"
Write-Host " Pass it to CMake: cmake .. -DCMAKE_PREFIX_PATH=C:\onnxruntime"
}
Write-Host ""
Write-Host ">>> Done."