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

构建目录中绿色可执行文件 Realtime_detection_http 的存在表明编译成功:

然后打开 reCamera 终端,并将可执行文件复制到 reCamera 终端目录。​

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

reCamera 准备工作

1.从 设备端模型 下载已部署的 YOLOv11 模型,然后将模型的 .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

Run the program

Run the program as administrator under the /home/recamera/ on the reCamera terminal​:

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 size: 216149 (pixels)
  • ​不同步骤期间的内存使用量(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)中修改返回消息的格式。 您也可以在 registerModelDetector() 中调用 initialize_model(const std::string& model_path) 时使用您自己部署的模型,并在 initialize_camera()Realtime_detection_http/src/model_detector.cpp)中修改相机初始化设置:

检测完成后,您可以按 Ctrl+C 终止操作。​程序将停止相机。​

更多详细信息,请参考我们的 GitHub 仓库


技术支持与产品讨论

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

Loading Comments...