1. 适用范围

本教程只针对 deploy/ 目录,也就是项目的最终部署成果。其目标是在 Orange Pi AI Pro 开发板上完成以下事项:

  1. 安装依赖与准备运行环境。
  2. 配置 ONNX Runtime、视频源与模型路径。
  3. 构建并运行 C++ 推理程序。
  4. 启动 Web 仪表盘进行可视化展示。
  5. 在需要时切换到 CANN EP 使用 NPU。

2. 部署交付物说明

deploy/ 目录中的关键内容如下:

路径作用
deploy/models/version3.onnx板端分类模型
deploy/yolo11n-pose.onnx板端姿态模型
deploy/cpp_demo/板端 C++ 推理引擎
deploy/install_deps_orangepi.sh一键安装构建依赖与 ONNX Runtime
deploy/dashboard.pyFlask Web 仪表盘
deploy/stream_video.py可选视频流模拟器
deploy/artifacts/板端运行摘要与事件记录

3. 部署架构

摄像头 / RTSP / HTTP流 / 本地视频

deploy/cpp_demo C++引擎

YOLO Pose ONNX

分类 ONNX

/dev/shm/preview.jpg

/dev/shm/status.json

artifacts/*.json / event_*.mp4

deploy/dashboard.py

浏览器演示页面

4. 前置条件

4.1 硬件

  1. Orange Pi AI Pro 开发板。
  2. 稳定电源。
  3. 可用网络连接。
  4. 显示器、键盘、鼠标,或可用 SSH 登录方式。

4.2 软件

  1. Ubuntu 22.04 LTS aarch64。
  2. build-essentialcmakepkg-configlibopencv-dev
  3. ONNX Runtime aarch64 版本。
  4. 若使用 Web 面板,需安装 python3-flask
  5. 若使用 stream_video.py,建议安装 python3-opencv

5. 上传部署目录

推荐把 deploy/ 整个目录拷贝到开发板,例如:

scp -r deploy orangepi@<board-ip>:~/Desktop/

上传完成后的推荐目录:

~/Desktop/deploy/

6. 安装依赖

进入部署目录后执行:

cd ~/Desktop/deploy
chmod +x install_deps_orangepi.sh
./install_deps_orangepi.sh

该脚本会自动执行:

  1. apt-get update
  2. 安装 build-essentialcmakepkg-configlibopencv-devwgettar
  3. 下载并解压 onnxruntime-linux-aarch64-1.24.3

如果你计划使用面板或视频流模拟器,建议额外安装:

sudo apt-get install -y python3-flask python3-opencv

7. 配置环境文件

7.1 复制模板

cd ~/Desktop/deploy/cpp_demo/scripts
cp orangepi_aipro.env.example orangepi_aipro.env

7.2 修改关键变量

重点检查以下变量:

变量说明建议
ONNXRUNTIME_ROOTONNX Runtime 根目录指向实际解压路径
ONNXRUNTIME_INCLUDE_DIRONNX Runtime 头文件目录通常用默认拼接即可
ONNXRUNTIME_LIBRARYlibonnxruntime.so 路径必须存在
VIDEO_PATH本地视频路径适用于文件模式
SOURCE_TYPEvideocamera根据输入源选择
CAMERA_INDEX摄像头索引或流地址支持整数和 HTTP / RTSP 地址
FEATURE_SOURCE特征来源推荐 yolo-onnx
POSE_MODEL_PATH姿态模型路径指向 ../yolo11n-pose.onnx
MODEL_PATH分类模型路径指向 ../models/version3.onnx
ONNX_EP执行提供器建议先 cpu,后 cann
SUMMARY_JSON摘要输出路径建议保留

7.3 重要注意事项

  1. 模板文件默认写的是 onnxruntime-linux-aarch64-1.23.2
  2. 安装脚本默认下载的是 onnxruntime-linux-aarch64-1.24.3
  3. 因此你必须按实际解压目录修改 ONNXRUNTIME_ROOT,不能直接照抄模板默认值。

一个更符合当前安装脚本结果的示例配置如下:

ONNXRUNTIME_ROOT=../../third_party/onnxruntime-linux-aarch64-1.24.3
ONNXRUNTIME_INCLUDE_DIR=${ONNXRUNTIME_ROOT}/include
ONNXRUNTIME_LIBRARY=${ONNXRUNTIME_ROOT}/lib/libonnxruntime.so
BUILD_DIR=build-orangepi-onnx
ENABLE_ONNX=ON
ENABLE_MINDSPORE=OFF
VIDEO_PATH=../fn.mp4
MODEL_PATH=../models/version3.onnx
POSE_MODEL_PATH=../yolo11n-pose.onnx
FEATURE_SOURCE=yolo-onnx
ONNX_EP=cpu
ONNX_DEVICE_ID=0
SUMMARY_JSON=../artifacts/cpp_demo_onnx_orangepi_summary.json
MAX_FRAMES=20
LOG_EVERY=10

8. 先做环境自检

在正式运行前,建议先执行:

cd ~/Desktop/deploy/cpp_demo
bash scripts/check_cann_env.sh scripts/orangepi_aipro.env

该脚本会检查:

  1. libonnxruntime.so 是否存在。
  2. npu-smi 是否可用。
  3. Ascend / CANN 相关环境变量。
  4. 当前 ONNX Runtime 是否真的导出 CANN EP 所需符号。

如果脚本提示当前库没有 CANN EP 符号,则必须先更换为带 CANN 执行提供器的 ONNX Runtime,再把 ONNX_EP 切到 cann

9. 推荐运行顺序

9.1 阶段一:CPU 冒烟测试

先验证“工程能编译、模型能加载、参数能跑通”:

cd ~/Desktop/deploy/cpp_demo
ONNX_EP=cpu FEATURE_SOURCE=synthetic MAX_FRAMES=20 bash scripts/orangepi_build_and_run.sh --env scripts/orangepi_aipro.env

该模式不依赖真实姿态提取,适合快速排除编译和运行时错误。

9.2 阶段二:完整 ONNX 链路测试

切回真实姿态模型与分类模型:

cd ~/Desktop/deploy/cpp_demo
ONNX_EP=cpu FEATURE_SOURCE=yolo-onnx MAX_FRAMES=0 OUTPUT_VIDEO=../artifacts/result.mp4 EVENT_LOG=../artifacts/incidents.json bash scripts/orangepi_build_and_run.sh --env scripts/orangepi_aipro.env

该模式会:

  1. 编译 fight_detection_demo
  2. 加载姿态 ONNX 与分类 ONNX
  3. 处理输入视频或视频流
  4. 生成事件日志与摘要文件

9.3 阶段三:切换到 CANN EP / NPU

只有在你已经确认当前 ONNX Runtime 带有 CANN EP 时,才建议执行:

cd ~/Desktop/deploy/cpp_demo
ONNX_EP=cann ONNX_DEVICE_ID=0 MAX_FRAMES=0 bash scripts/orangepi_build_and_run.sh --env scripts/orangepi_aipro.env

若运行时报错提示 SessionOptionsAppendExecutionProvider_CANN 相关问题,说明当前 ONNX Runtime 仍不是 CANN 版本。

10. 输入源配置方式

10.1 本地视频文件

SOURCE_TYPE=video
VIDEO_PATH=../fn.mp4

10.2 USB 摄像头

SOURCE_TYPE=camera
CAMERA_INDEX=0

10.3 HTTP / RTSP 视频流

该工程支持把 CAMERA_INDEX 当作流地址使用,例如:

SOURCE_TYPE=camera
CAMERA_INDEX=http://<board-ip>:5555/video_feed

这是因为当前 openCapture 逻辑会优先判断 CAMERA_INDEX 是否为纯数字;若不是纯数字,则按网络流地址处理。

11. 启动 Web 仪表盘

在新的终端中执行:

cd ~/Desktop/deploy
python3 dashboard.py

浏览器访问:

http://<board-ip>:5000

仪表盘读取的关键文件为:

  • /dev/shm/preview.jpg
  • /dev/shm/status.json

因此只有在 C++ 推理引擎运行后,仪表盘才会展示实时结果。

11.1 让仪表盘显示事件视频列表

dashboard.py 默认从 ~/Desktop/deploy/cpp_demo/artifacts 枚举 event_*.mp4。如果你希望列表正常显示,推荐把事件日志路径显式设置到该目录,例如:

cd ~/Desktop/deploy/cpp_demo
ONNX_EP=cpu FEATURE_SOURCE=yolo-onnx EVENT_LOG=../cpp_demo/artifacts/incidents.json bash scripts/orangepi_build_and_run.sh --env scripts/orangepi_aipro.env

这样生成的 event_*.mp4 会与仪表盘扫描目录保持一致。

12. 可选:启动视频流模拟器

如果你没有外部摄像头,但想模拟一个 HTTP 视频流,可执行:

cd ~/Desktop/deploy
python3 stream_video.py

默认服务地址:

http://<board-ip>:5555/video_feed

随后把环境文件中的输入源改为:

SOURCE_TYPE=camera
CAMERA_INDEX=http://<board-ip>:5555/video_feed

13. 运行结果与验收方式

13.1 重点产物

文件说明
deploy/artifacts/cpp_demo_onnx_orangepi_summary.json板端 ONNX 路线摘要
deploy/artifacts/cpp_demo_npu_summary.json板端 NPU 演示摘要
deploy/artifacts/incidents.json事件日志
deploy/artifacts/incidents_npu.jsonNPU 演示事件日志
deploy/artifacts/result.mp4输出视频
deploy/cpp_demo/artifacts/event_*.mp4事件片段视频

13.2 仓库内现有样例结果

场景产物文件结果
开发板视频文件模式deploy/artifacts/cpp_demo_onnx_orangepi_summary.json1221 帧,60 次事件,约 1.39 FPS
开发板 NPU 流模式deploy/artifacts/cpp_demo_npu_summary.json3235 帧,9 次事件,约 11.38 FPS

这些结果主要用于说明工程链路已经打通。实际部署阈值、误报率与输入源质量仍需结合现场环境做进一步标定。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐