将Boxs算法仓库中的代码与Together ROS分离开来使用

X3派上的bpu有5个T的算力,不用起来着实浪费,在地平线官方的《地平线机器人开发平台用户手册》上介绍了多种神经网络在X3派上部署的实例。看了下代码,发现它这里的代码都是在地平线的tROS框架上来实现的。对于有些人的需求来说可能不需要使用这个ROS框架,因此我在代码里将关于DNN的使用与tROS的框架分离开来,这样在使用的时候可以更加方便。

地平线官方提供的神经网络使用代码主要是在Boxs算法仓库里面,其中最重要的一个代码是dnn_node。这个代码地址可以在Sign in · GitLab

图1. DnnNode的使用说明

具体的使用方法见官方文档即可。

这里我对代码做了简单的整理并将其ROS的部分分离开来,重新建了一个工程,工程地址:https://github.com/softdream/sunrise\_X3\_BPU/tree/master/dnn\_node\_lib

该工程的使用方法如下:

git clone https://github.com/softdream/sunrise_X3_BPU/tree/master/dnn_node_libcd dnn_node_libmkdir build & cd buildcmake ..make

编译完成之后会在build目录下生成一个名为libdnn_node.so的动态库。这个动态库后续就可以直接使用了。

这里提供一个应用实例来介绍使用这个库的方法:使用x3派的bpu来实现人体检测。代码参考地平线官方的例程Sign in · GitLab

修改后的工程目录如图2所示:

图2. 修改后的工程目录

在include目录下存放用户自己的头文件以及上述的dnn_node_lib中的头文件,src中存放用户.cpp文件,lib中存放上述dnn_node_lib中编译生成的动态库文件。model中存放模型文件,test_data中存放测试图片文件。

该工程的使用方法:

git clone https://github.com/softdream/sunrise_X3_BPU/tree/master/dnn_body_detectcd dnn_body_detectmkdir build & cd buildcmake ..make

编译完成之后会在build目录下生成可执行文件body_detect,执行:sudo ./body_detect 即可看到效果如图3所示:

图3.人体检测结果

后续会更新其它应用的使用代码,包括手势识别,跌倒检测等功能的非ROS实现。

很好的分享,解决我的急需。

下面的作为笔记留作下次使用:1.直接下载https://github.com/softdream/sunrise\_X3\_BPU/tree/master/dnn\_body\_detect

2.修改include/body_detect.h中的53行,修改模型位置。

3.可修改main.cpp,用来传参识别图片

#include “body_detect.h”

int main(int argc, char** argv)

{

std::cout << “---------------- BODY DETECT ---------------” << std::endl;

if (argc < 2) {

std::cerr << “Usage: " << argv[0] << " <image_path>” << std::endl;

return -1;

}

std::string image_path = argv[1];

cv::Mat image = cv::imread(image_path);

if (image.empty()) {

std::cerr << "Failed to load image: " << image_path << std::endl;

return -1;

}

body_detect::BodyDetection detect;

cv::resize(image, image, cv::Size(960, 544));

detect.imageProcess(image);

detect.displayResults(image);

cv::imwrite(“result.jpg”, image);

return 0;

}