JetsonNano部署yolo5 c++ onnx

news2024/12/23 12:38:19

编译OpenCV最新4.5.x版本

Jetson Nano自带的OpenCV版本比较低,Jetpack4.6对应的OpenCV版本为4.1的

OpenCV当前最新版本已经到了4.5跟4.6了,4.5.x中OpenCV DNN支持了很多新的模型推理跟新的特性都无法在OpenCV4.1上演示,所以我决定从源码编译OpenCV升级版本到 4.5.4,然后我发一个非常好的网站,提供了完整的脚本,于是我直接运行了该脚本就完成了安装,整个安装过程需要等待几个小时,耐心点。这个完整的脚本下载地址如下:

https://github.com/Qengineering/Install-OpenCV-Jetson-Nano

关于脚本每一个步骤的解释与说明如下:

https://qengineering.eu/install-opencv-4.5-on-jetson-nano.html

这里我也搬运了一下,选择OpenCV4.5.4版本完成编译与安装,对应完整的脚本如下:

#!/bin/bash
set -e

echo "Installing OpenCV 4.5.4 on your Jetson Nano"
echo "It will take 2.5 hours !"

# reveal the CUDA location
cd ~
sudo sh -c "echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf.d/nvidia-tegra.conf"
sudo ldconfig

# install the dependencies
sudo apt-get install -y build-essential cmake git unzip pkg-config zlib1g-dev
sudo apt-get install -y libjpeg-dev libjpeg8-dev libjpeg-turbo8-dev libpng-dev libtiff-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libglew-dev
sudo apt-get install -y libgtk2.0-dev libgtk-3-dev libcanberra-gtk*
sudo apt-get install -y python-dev python-numpy python-pip
sudo apt-get install -y python3-dev python3-numpy python3-pip
sudo apt-get install -y libxvidcore-dev libx264-dev libgtk-3-dev
sudo apt-get install -y libtbb2 libtbb-dev libdc1394-22-dev libxine2-dev
sudo apt-get install -y gstreamer1.0-tools libv4l-dev v4l-utils qv4l2 
sudo apt-get install -y libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev
sudo apt-get install -y libavresample-dev libvorbis-dev libxine2-dev libtesseract-dev
sudo apt-get install -y libfaac-dev libmp3lame-dev libtheora-dev libpostproc-dev
sudo apt-get install -y libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev
sudo apt-get install -y liblapack-dev liblapacke-dev libeigen3-dev gfortran
sudo apt-get install -y libhdf5-dev protobuf-compiler
sudo apt-get install -y libprotobuf-dev libgoogle-glog-dev libgflags-dev

# remove old versions or previous builds
cd ~ 
sudo rm -rf opencv*
# download the latest version
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.4.zip 
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.4.zip 
# unpack
unzip opencv.zip 
unzip opencv_contrib.zip 
# some administration to make live easier later on
mv opencv-4.5.4 opencv
mv opencv_contrib-4.5.4 opencv_contrib
# clean up the zip files
rm opencv.zip
rm opencv_contrib.zip

# set install dir
cd ~/opencv
mkdir build
cd build

# run cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
-D WITH_OPENCL=OFF \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=5.3 \
-D CUDA_ARCH_PTX="" \
-D WITH_CUDNN=ON \
-D WITH_CUBLAS=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_NEON=ON \
-D WITH_QT=OFF \
-D WITH_OPENMP=ON \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D BUILD_TESTS=OFF \
-D WITH_EIGEN=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_opencv_python3=TRUE \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF ..

# run make
FREE_MEM="$(free -m | awk '/^Swap/ {print $2}')"
# Use "-j 4" only swap space is larger than 5.5GB
if [[ "FREE_MEM" -gt "5500" ]]; then
  NO_JOB=4
else
  echo "Due to limited swap, make only uses 1 core"
  NO_JOB=1
fi
make -j ${NO_JOB} 

sudo rm -r /usr/include/opencv4/opencv2
sudo make install
sudo ldconfig

# cleaning (frees 300 MB)
make clean
sudo apt-get update

echo "Congratulations!"
echo "You've successfully installed OpenCV 4.5.4 on your Jetson Nano"

直接在终端命令行中执行下载下来得脚本文件就可以完成安装了。安装完整之后得显示:

验证与导入安装好之后的OpenCV4.5.4版本

 

OpenCV C++程序编译与演示 

自己找个代码把 然后放到jetson编译 最后运行

CMakeLists.txt文件里面得内容如下:

cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程
project(yolov5_opencv_demo)

# 设置编译模式
#set( CMAKE_BUILD_TYPE "Debug" )

#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 4.5.4 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)

include_directories(
    ./src/)


#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})

#显示OpenCV_INCLUDE_DIRS的值
message(${OpenCV_INCLUDE_DIRS})

FILE(GLOB_RECURSE TEST_SRC
    src/*.cpp
    )

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable(target yolov5_opencv.cpp ${TEST_SRC})

# 将库文件链接到可执行程序上
target_link_libraries(target  ${OpenCV_LIBS})

OpenCV + YOLOv5,CUDA加速支持的源码

#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>

std::string label_map = "classes.txt";
int main(int argc, char** argv) {
    std::vector<std::string> classNames;
    std::ifstream fp(label_map);
    std::string name;
    while (!fp.eof()) {
        getline(fp, name);
        if (name.length()) {
            classNames.push_back(name);
        }
    }
    fp.close();
    std::vector<cv::Scalar> colors;
    colors.push_back(cv::Scalar(0, 255, 0));
    colors.push_back(cv::Scalar(0, 255, 255));
    colors.push_back(cv::Scalar(255, 255, 0));
    colors.push_back(cv::Scalar(255, 0, 0));
    colors.push_back(cv::Scalar(0, 0, 255));

    std::string onnxpath = "yolov5s.onnx";
    auto net = cv::dnn::readNetFromONNX(onnxpath);
    net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
    net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
    cv::VideoCapture capture("example_dsh.mp4");
    cv::Mat frame;
    while (true) {
        bool ret = capture.read(frame);
        if (frame.empty()) {
            break;
        }
        int64 start = cv::getTickCount();
        // 图象预处理 - 格式化操作
        int w = frame.cols;
        int h = frame.rows;
        int _max = std::max(h, w);
        cv::Mat image = cv::Mat::zeros(cv::Size(_max, _max), CV_8UC3);
        cv::Rect roi(0, 0, w, h);
        frame.copyTo(image(roi));

        float x_factor = image.cols / 640.0f;
        float y_factor = image.rows / 640.0f;

        // 推理
        cv::Mat blob = cv::dnn::blobFromImage(image, 1 / 255.0, cv::Size(640, 640), cv::Scalar(0, 0, 0), true, false);
        net.setInput(blob);
        cv::Mat preds = net.forward();

        // 后处理, 1x25200x85
        cv::Mat det_output(preds.size[1], preds.size[2], CV_32F, preds.ptr<float>());
        float confidence_threshold = 0.5;
        std::vector<cv::Rect> boxes;
        std::vector<int> classIds;
        std::vector<float> confidences;
        for (int i = 0; i < det_output.rows; i++) {
            float confidence = det_output.at<float>(i, 4);
            if (confidence < 0.25) {
                continue;
            }
            cv::Mat classes_scores = det_output.row(i).colRange(5, preds.size[2]);
            cv::Point classIdPoint;
            double score;
            minMaxLoc(classes_scores, 0, &score, 0, &classIdPoint);

            // 置信度 0~1之间
            if (score > 0.25)
            {
                float cx = det_output.at<float>(i, 0);
                float cy = det_output.at<float>(i, 1);
                float ow = det_output.at<float>(i, 2);
                float oh = det_output.at<float>(i, 3);
                int x = static_cast<int>((cx - 0.5 * ow) * x_factor);
                int y = static_cast<int>((cy - 0.5 * oh) * y_factor);
                int width = static_cast<int>(ow * x_factor);
                int height = static_cast<int>(oh * y_factor);
                cv::Rect box;
                box.x = x;
                box.y = y;
                box.width = width;
                box.height = height;

                boxes.push_back(box);
                classIds.push_back(classIdPoint.x);
                confidences.push_back(score);
            }
        }

        // NMS
        std::vector<int> indexes;
        cv::dnn::NMSBoxes(boxes, confidences, 0.25, 0.50, indexes);
        for (size_t i = 0; i < indexes.size(); i++) {
            int index = indexes[i];
            int idx = classIds[index];
            cv::rectangle(frame, boxes[index], colors[idx%5], 2, 8);
            cv::rectangle(frame, cv::Point(boxes[index].tl().x, boxes[index].tl().y - 20),
                cv::Point(boxes[index].br().x, boxes[index].tl().y), cv::Scalar(255, 255, 255), -1);
            cv::putText(frame, classNames[idx], cv::Point(boxes[index].tl().x, boxes[index].tl().y - 10), cv::FONT_HERSHEY_SIMPLEX, .5, cv::Scalar(0, 0, 0));
        }

        float t = (cv::getTickCount() - start) / static_cast<float>(cv::getTickFrequency());
        putText(frame, cv::format("FPS: %.2f", 1.0 / t), cv::Point(20, 40), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 0, 0), 2, 8);

        char c = cv::waitKey(1);
        if (c == 27) {
            break;
        }
        cv::imshow("OpenCV4.5.4 CUDA + YOLOv5", frame);
    }
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}

whaosoft aiot http://143ai.com 

只是个demo 最好的还是你转成trt的吧~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言 02

2.1 下载安装 Go Golang 中文网 Go 的安装也是十分的简洁、简单。就是 Next。哈哈 ~ 输入 go version 来查看是否安装完成吧 ~ 2.2 配置环境变量和工作目录 GOROOT&#xff1a;C:\Environment\Go 意味着 Go 在哪里。 在配置 GOPATH 之前&#xff0c;先把用户的 GOPATH 删掉。…

远程预付费电能管理系统在工业园的应用,主要功能有哪些?

安科瑞 李可欣 具体可咨询&#xff1a;Acrel_lkx 0概述 本项目为凌云工业园提供解决方案。本项目共有DDSY1352-NK/DTSY1352-NK预付费计量表41台&#xff0c;针对凌云工业园商业用电实现用电的智能化管理&#xff0c;通过安科瑞终端预付费电能表计来计量每个商铺的用电量&am…

web前端-html-css-background背景(color样式,image图片,repeat重复方式,position定位,简写)

背景 背景样式和背景图片重复方式 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style type"text/css">.box1 {width: 1024px;height: 724px;margin: 0 auto;/*设置背景样式*/backgr…

Go-Zero环境搭建

Go-Zero环境搭建go-zero 需要安装的组件1 Protobuf下载安装需要先下载protoc执行器2 Protobuf下Go、GRPC插件的安装3 goctl 安装go-zero 需要安装的组件 protocprotoc-gen-goprotoc-gen-go-grpcgoctl 1 Protobuf下载安装 需要先下载protoc执行器 到 https://github.com/pro…

磷酸酶、转录因子、KRAS ——“不可成药”靶点?

不可成药的三大类靶点 传统的药物靶点绝大部分是具有适合的结合位点和明确的活性位点的蛋白质。药物分子往往通过“占位驱动”的药理学作用模式发挥作用。这种方法虽然可行&#xff0c;但并不能适用于所有的靶蛋白&#xff0c;尤其是在蛋白本身缺乏相应的结合口袋、蛋白的内源性…

天然产物化合物库

据文献报道&#xff0c;在传统药物研发时代&#xff0c;天然产物是新药研发最重要的、也几乎是独有的源泉&#xff0c;当时超过 80% 的药物均是原始天然产物或者其类似物&#xff1b;随着有机化学、药物化学、计算机技术等的发展&#xff0c;即使到了人工合成小分子药物占主导地…

Neo4J超详细专题教程,快来收藏起来吧

Neo4J超详细教程 Lecture&#xff1a;波哥 一、Neo4J相关介绍 1.为什么需要图数据库 随着社交、电商、金融、零售、物联网等行业的快速发展&#xff0c;现实社会织起了了一张庞大而复杂的关系 网&#xff0c;传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随…

webpack5 import动态导入实现按需加载并给文件统一命名

想要实现按需加载,动态导入模块。还需要额外配置: console.log("hello main");document.getElementById("btn").onClick = function () {// 动态导入 --> 实现按需加载 -->then是加载成功要做的处理不处理的话可以不写import( "./js/math.j…

【yarn】任务日志丢失问题分析

【yarn】任务日志丢失问题分析 故事背景 今天中午收到了一个报警邮件通知。内容大致为&#xff1a;有一个正在 yarn上运行的flink的实时任务挂掉了。 针对上述的现象&#xff0c;我们的开发工程师先打开yarn的web ui找到对应的job的任务页面。查询任务日志。 点击这个log&am…

java计算机毕业设计springboot+vue宠物服务管理系统

项目介绍 计算机网络的发展,促进了社会各行业的进步,带来了经济快速增长。用户通过本平台发布宠物趣事,进行展示,在平台上和用户进行实时的交流沟通,达成交易。用户登录后,把想要交易的宠物周边商品发布到平台上,进行交易,提高了效率,减少了时间成本,并且在交易过程中,宠物服务…

c语言(看一遍就会操作,小马教一步步教你如何文件操作)

前言&#xff1a; ^ _ ^文件操作想必大家掌握的并不熟练&#xff0c;确实因为我们用的并不多&#xff0c;而本节内容能够让大家初步认识文件操作&#xff0c;从文件认识到文件使用&#xff0c;让我们对c语言文件操作有个初步的了解&#xff0c;在应用中可以看我用文件的形式完…

java爬虫破解滑块验证码

使用技术&#xff1a;javaSelenium 废话&#xff1a; 有爬虫&#xff0c;自然就有反爬虫&#xff0c;就像病毒和杀毒软件一样&#xff0c;有攻就有防&#xff0c;两者彼此推进发展。而目前最流行的反爬技术验证码&#xff0c;为了防止爬虫自动注册&#xff0c;批量生成垃圾账号…

三菱FX系列控制脉冲伺服--DDRVA、DZRN、 ALTP、D8340、DPLSY指令的使用

一&#xff1a;文章主题 FX系列控制轴最常用的是脉冲控制的方式。本文基于实际开发案例&#xff0c;讲解三菱FX系列的运动控制指令&#xff0c;基于该文章能清楚指导通过脉冲控制伺服的基本原理和程序思路。 二&#xff1a;运动控制指令 2.1、DDRVA指令使用 1、DDRVA定义&#…

zabbix 自动发现与自动注册(接上章补充)

一、zabbix 自动发现 server CentOS7.6 192.168.130.70 / client CentOS7.6 192.168.130.10 / proxy CentOS7.6 192.168.130.60 / 1.zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;…

MQTT X 1.9.0 发布:开箱即用的 bench 命令,MQTT 性能测试更便捷

近日&#xff0c;MQTT 5.0 客户端工具 MQTT X 1.9.0 正式发布。 新版本针对桌面客户端优化了一些细节上的 UI 样式与交互方式&#xff0c;新增了一个可以帮助用户更加快速和系统学习 MQTT 协议相关知识的页面&#xff0c;同时也修复了一些已知问题&#xff1b;针对命令行客户端…

c++基础(十七)——职工管理系统实现

一、项目的创建 打开visual studio之后&#xff0c;选择文件—新建—项目。出现弹窗后选择Visual C,填好名称即可。 接下来分别在对应的位置创建头文件以及源文件以及一个主函数文件"职工管理系统.cpp"&#xff1a; 二、系统界面的基本实现&#xff1a; 在头文件…

Qt音视频开发03-ffmpeg倍速播放(半倍速/2倍速/4倍速/8倍速)

一、前言 用ffmpeg做倍速播放&#xff0c;是好多年都一直没有实现的功能&#xff0c;有个做法是根据倍速参数&#xff0c;不断切换播放位置&#xff0c;实现效果不是很好&#xff0c;ffplay中的倍速就做得很好&#xff0c;而且声音无论倍速多少还非常柔和&#xff0c;有特别的…

Vue实现网页首屏加载动画、页面内请求数据加载loading

博主介绍 &#x1f4e2;点击下列内容可跳转对应的界面&#xff0c;查看更多精彩内容&#xff01; &#x1f34e;主页&#xff1a;水香木鱼 &#x1f34d;专栏&#xff1a;后台管理系统 文章目录 简介&#xff1a;这是一篇有关【Vue实现网页首屏加载动画、页面内请求数据加载lo…

如何使用html、css制作一个期末作业网站【羽毛球体育运动主题html网页设计】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

sulfo-CY3(Cyanine3) DBCO,磺酸基-花青素CY5二苯并环辛炔,1782950-79-1

中文名&#xff1a;磺酸基-花青素CY3二苯并环辛炔 英文名&#xff1a;Sulfo-Cyanine3 DBCO&#xff0c;Sulfo-Cy3 DBCO CAS&#xff1a;1782950-79-1 分子式&#xff1a;C50H54N4O11S3 性 状&#xff1a;红色粉末 分子量&#xff1a;983.18 Abs/Em Maxima&#xff1a;548/…