Skip to main content

基于 C++ 的 reCamera 实时 YOLO 目标检测

本文档演示如何基于 reCamera 终端,通过交叉编译使用 C++ 实现实时拍照、YOLO 目标检测以及通过 HTTP 获取结果。此方法避免了在 reCamera 上使用 Node-RED 时遇到的过热问题。您可以参考本文档修改 C++ 代码以实现自定义的计算机视觉应用。

环境准备

编译前准备

首先,您需要参考“使用 C/C++ 开发”文档,在您的 Linux 系统上配置交叉编译环境。 注意:每次启动后需要重新配置路径:

export SG200X_SDK_PATH=$HOME/recamera/sg2002_recamera_emmc/
export PATH=$HOME/recamera/host-tools/gcc/riscv64-linux-musl-x86_64/bin:$PATH

然后,下载 Realtime_detection_http 项目,并进行编译。

cd Realtime_detection_http/
mkdir build && cd build
cmake ..
make

如果在 build 目录中出现绿色的可执行文件 Realtime_detection_http,则表示编译成功:

接着打开 reCamera 终端,将可执行文件复制到 reCamera 终端目录中:

sudo scp Realtime_detection_http [email protected]:/home/recamera/

reCamera 准备工作

  1. 下载已部署的 YOLOv11 模型(可从 On Device Models 获取),然后将模型的 .cvimodel 文件复制到 reCamera 终端目录:/home/recamera/
  2. 在执行代码之前,请访问 reCamera 的 工作区 终止相关进程(参考 使用 C/C++ 开发),以防止内存占用。
  3. 然后导航到 /etc/init.d/,将 S93sscma-supervisorS91sscma-node 文件夹复制到 /home/recamera/ 或其他位置进行备份,并删除原始的 S93sscma-supervisorS91sscma-node 文件夹,以防止内存占用和程序冲突。
cd /etc/init.d/
sudo scp S93sscma-supervisor /home/recamera/
sudo scp S91sscma-node /home/recamera/
sudo rm -r S93sscma-supervisor
sudo rm -r S91sscma-node

运行程序

在 reCamera 终端的 /home/recamera/ 目录下以管理员身份运行程序:

sudo ./Realtime_detection_http

结果

终端显示以下内容,表明程序正常运行:

您可以通过网页浏览器或 Postman 访问 http://192.168.42.1/modeldetector。reCamera 将立即捕获一张照片并返回 YOLOv11 检测到的对象。 浏览器:

Postman:

返回的信息包括以下数据:

  • Code: 1(运行中)
  • Msg: 错误信息
  • Initialize_camera_duration: 摄像头初始化时长,仅在首次访问时显示。
  • Initialize_model_duration: 模型初始化时长,仅在首次访问时显示。
  • Data:
    • Score: 检测置信度分数(0-1)
    • Target: 检测到的对象名称
    • Box: [x1, y1, x2, y2]:检测框坐标(以像素表示,分别为[左,上,右,下]边缘)
    • Center: [x, y]:检测框的归一化中心位置(相对于图像宽度/高度的比例)
    • Size: [w, h]:检测框的归一化宽度和高度(相对于图像尺寸的比例)
    • Release_duration: 清除摄像头缓存所需时间(毫秒)
    • Capture_duration: 图像采集时长(毫秒)
    • Image_preprocessing_duration: 推理前的图像预处理时长(毫秒)
    • Detection_duration: 模型检测时长(毫秒)(包括预处理、推理、后处理)
  • Duration: 程序总执行时间(毫秒)
  • Timestamp: Unix 时间戳

终端将显示:

  • 摄像头初始化参数:
    • 分辨率:1920×1080
    • 帧率:5 fps
    • 捕获通道:通道 2
  • 捕获图像大小(例如 Jpeg 大小:216149(像素)
  • 不同步骤中的内存使用情况(MB):
    • 捕获前(Memory usage
    • 释放中(Memory usage_during_
    • 捕获后(Memory usage_after
    • 图像预处理后(Memory usage_before_model
    • 模型检测后(Memory usage_after_model
  • 模型检测时长(毫秒):
    • 预处理(例如 pre: 9ms
    • 推理(例如 infer: 40ms
    • 后处理(例如 post: 395ms

在 reCamera 终端上,检测到的图像可以自动保存:

您可以通过设备持续访问以获取实时检测结果,用于智能安防和监控等应用。

您可以在 registerModelDetector()Realtime_detection_http/src/http.cpp)和 model_detector()Realtime_detection_http/src/model_detector.cpp)中修改返回消息的格式。 您还可以在调用 initialize_model(const std::string& model_path) 时使用您自己部署的模型,并在 initialize_camera()Realtime_detection_http/src/model_detector.cpp)中修改摄像头初始化设置:

检测完成后,您可以按 Ctrl+C 终止操作。程序将停止摄像头。

技术支持与产品讨论

感谢您选择我们的产品!我们致力于为您提供多种支持,确保您在使用我们的产品时拥有尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...