0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在JetsonNano上編譯OpenCV源碼與OpenCV C++ YOLOv5程序演示

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-11-10 11:28 ? 次閱讀

編譯OpenCV最新4.5.x版本

Jetson Nano自帶的OpenCV版本比較低,Jetpack4.6對應(yīng)的OpenCV版本為4.1的,有圖為證:

5c9093c8-6012-11ed-8abf-dac502259ad0.png

OpenCV當(dāng)前最新版本已經(jīng)到了4.5跟4.6了,4.5.x中OpenCV DNN支持了很多新的模型推理跟新的特性都無法在OpenCV4.1上演示,所以我決定從源碼編譯OpenCV升級版本到 4.5.4,然后我發(fā)一個非常好的網(wǎng)站,提供了完整的腳本,于是我直接運行了該腳本就完成了安裝,整個安裝過程需要等待幾個小時,耐心點。這個完整的腳本下載地址如下:

https://github.com/Qengineering/Install-OpenCV-Jetson-Nano
關(guān)于腳本每一個步驟的解釋與說明如下:
https://qengineering.eu/install-opencv-4.5-on-jetson-nano.html
這里我也搬運了一下,選擇OpenCV4.5.4版本完成編譯與安裝,對應(yīng)完整的腳本如下:
#!/bin/bash
set-e

echo"InstallingOpenCV4.5.4onyourJetsonNano"
echo"Itwilltake2.5hours!"

#revealtheCUDAlocation
cd~
sudosh-c"echo'/usr/local/cuda/lib64'>>/etc/ld.so.conf.d/nvidia-tegra.conf"
sudoldconfig

#installthedependencies
sudoapt-getinstall-ybuild-essentialcmakegitunzippkg-configzlib1g-dev
sudoapt-getinstall-ylibjpeg-devlibjpeg8-devlibjpeg-turbo8-devlibpng-devlibtiff-dev
sudoapt-getinstall-ylibavcodec-devlibavformat-devlibswscale-devlibglew-dev
sudoapt-getinstall-ylibgtk2.0-devlibgtk-3-devlibcanberra-gtk*
sudoapt-getinstall-ypython-devpython-numpypython-pip
sudoapt-getinstall-ypython3-devpython3-numpypython3-pip
sudoapt-getinstall-ylibxvidcore-devlibx264-devlibgtk-3-dev
sudoapt-getinstall-ylibtbb2libtbb-devlibdc1394-22-devlibxine2-dev
sudoapt-getinstall-ygstreamer1.0-toolslibv4l-devv4l-utilsqv4l2
sudoapt-getinstall-ylibgstreamer-plugins-base1.0-devlibgstreamer-plugins-good1.0-dev
sudoapt-getinstall-ylibavresample-devlibvorbis-devlibxine2-devlibtesseract-dev
sudoapt-getinstall-ylibfaac-devlibmp3lame-devlibtheora-devlibpostproc-dev
sudoapt-getinstall-ylibopencore-amrnb-devlibopencore-amrwb-dev
sudoapt-getinstall-ylibopenblas-devlibatlas-base-devlibblas-dev
sudoapt-getinstall-yliblapack-devliblapacke-devlibeigen3-devgfortran
sudoapt-getinstall-ylibhdf5-devprotobuf-compiler
sudoapt-getinstall-ylibprotobuf-devlibgoogle-glog-devlibgflags-dev

#removeoldversionsorpreviousbuilds
cd~
sudorm-rfopencv*
#downloadthelatestversion
wget-Oopencv.ziphttps://github.com/opencv/opencv/archive/4.5.4.zip
wget-Oopencv_contrib.ziphttps://github.com/opencv/opencv_contrib/archive/4.5.4.zip
#unpack
unzipopencv.zip
unzipopencv_contrib.zip
#someadministrationtomakeliveeasierlateron
mvopencv-4.5.4opencv
mvopencv_contrib-4.5.4opencv_contrib
#cleanupthezipfiles
rmopencv.zip
rmopencv_contrib.zip

#setinstalldir
cd~/opencv
mkdirbuild
cdbuild

#runcmake
cmake-DCMAKE_BUILD_TYPE=RELEASE
-DCMAKE_INSTALL_PREFIX=/usr
-DOPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules
-DEIGEN_INCLUDE_PATH=/usr/include/eigen3
-DWITH_OPENCL=OFF
-DWITH_CUDA=ON
-DCUDA_ARCH_BIN=5.3
-DCUDA_ARCH_PTX=""
-DWITH_CUDNN=ON
-DWITH_CUBLAS=ON
-DENABLE_FAST_MATH=ON
-DCUDA_FAST_MATH=ON
-DOPENCV_DNN_CUDA=ON
-DENABLE_NEON=ON
-DWITH_QT=OFF
-DWITH_OPENMP=ON
-DBUILD_TIFF=ON
-DWITH_FFMPEG=ON
-DWITH_GSTREAMER=ON
-DWITH_TBB=ON
-DBUILD_TBB=ON
-DBUILD_TESTS=OFF
-DWITH_EIGEN=ON
-DWITH_V4L=ON
-DWITH_LIBV4L=ON
-DOPENCV_ENABLE_NONFREE=ON
-DINSTALL_C_EXAMPLES=OFF
-DINSTALL_PYTHON_EXAMPLES=OFF
-DBUILD_opencv_python3=TRUE
-DOPENCV_GENERATE_PKGCONFIG=ON
-DBUILD_EXAMPLES=OFF..

#runmake
FREE_MEM="$(free-m|awk'/^Swap/{print$2}')"
#Use"-j4"onlyswapspaceislargerthan5.5GB
if[["FREE_MEM"-gt"5500"]];then
NO_JOB=4
else
echo"Duetolimitedswap,makeonlyuses1core"
NO_JOB=1
fi
make-j${NO_JOB}

sudorm-r/usr/include/opencv4/opencv2
sudomakeinstall
sudoldconfig

#cleaning(frees300MB)
makeclean
sudoapt-getupdate

echo"Congratulations!"
echo"You'vesuccessfullyinstalledOpenCV4.5.4onyourJetsonNano"

直接在終端命令行中執(zhí)行下載下來得腳本文件就可以完成安裝了。我安裝完整之后得顯示如下:

5cad7a1a-6012-11ed-8abf-dac502259ad0.png

驗證與導(dǎo)入安裝好之后的OpenCV4.5.4版本

5ccff90a-6012-11ed-8abf-dac502259ad0.png

OpenCV C++程序編譯與演示

OpenCV YOLOv5跟人臉檢測的演示C++程序是我以前寫好的,直接拿過來,然后構(gòu)建了一個項目目錄如下:

5cf4b2a4-6012-11ed-8abf-dac502259ad0.png

拷貝到j(luò)etson的home目錄下,cmake編譯

5d0a8eda-6012-11ed-8abf-dac502259ad0.png

然后make生成執(zhí)行文件:

5d45d0c6-6012-11ed-8abf-dac502259ad0.png

運行target

5d699920-6012-11ed-8abf-dac502259ad0.png

顯示運行界面如下:

5dabfe00-6012-11ed-8abf-dac502259ad0.png

5dc7b172-6012-11ed-8abf-dac502259ad0.png

OpenCV DNN人臉檢測演示:

5e0d3bca-6012-11ed-8abf-dac502259ad0.png

CMakeLists.txt文件里面得內(nèi)容如下:

cmake_minimum_required(VERSION2.8)

#聲明一個cmake工程
project(yolov5_opencv_demo)

#設(shè)置編譯模式
#set(CMAKE_BUILD_TYPE"Debug")

#添加OPENCV庫
#指定OpenCV版本,代碼如下
#find_package(OpenCV4.5.4REQUIRED)
#如果不需要指定OpenCV版本,代碼如下
find_package(OpenCVREQUIRED)

include_directories(
./src/)


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

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

FILE(GLOB_RECURSETEST_SRC
src/*.cpp
)

#添加一個可執(zhí)行程序
#語法:add_executable(程序名源代碼文件)
add_executable(targetyolov5_opencv.cpp${TEST_SRC})

#將庫文件鏈接到可執(zhí)行程序上
target_link_libraries(target${OpenCV_LIBS})

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

#include
#include
#include

std::stringlabel_map="classes.txt";
intmain(intargc,char**argv){
std::vectorclassNames;
std::ifstreamfp(label_map);
std::stringname;
while(!fp.eof()){
getline(fp,name);
if(name.length()){
classNames.push_back(name);
}
}
fp.close();
std::vectorcolors;
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::stringonnxpath="yolov5s.onnx";
autonet=cv::readNetFromONNX(onnxpath);
net.setPreferableBackend(cv::DNN_BACKEND_CUDA);
net.setPreferableTarget(cv::DNN_TARGET_CUDA);
cv::VideoCapturecapture("example_dsh.mp4");
cv::Matframe;
while(true){
boolret=capture.read(frame);
if(frame.empty()){
break;
}
int64start=cv::getTickCount();
//圖象預(yù)處理-格式化操作
intw=frame.cols;
inth=frame.rows;
int_max=std::max(h,w);
cv::Matimage=cv::Size(_max,_max),CV_8UC3);
cv::Rectroi(0,0,w,h);
frame.copyTo(image(roi));

floatx_factor=image.cols/640.0f;
floaty_factor=image.rows/640.0f;

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

//后處理,1x25200x85
cv::Matdet_output(preds.size[1],preds.size[2],CV_32F,preds.ptr());
floatconfidence_threshold=0.5;
std::vectorboxes;
std::vectorclassIds;
std::vectorconfidences;
for(inti=0;i(i,4);
if(confidence0.25)
{
floatcx=det_output.at(i,0);
floatcy=det_output.at(i,1);
floatow=det_output.at(i,2);
floatoh=det_output.at(i,3);
intx=static_cast((cx-0.5*ow)*x_factor);
inty=static_cast((cy-0.5*oh)*y_factor);
intwidth=static_cast(ow*x_factor);
intheight=static_cast(oh*y_factor);
cv::Rectbox;
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::vectorindexes;
cv::NMSBoxes(boxes,confidences,0.25,0.50,indexes);
for(size_ti=0;i(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);

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    626

    瀏覽量

    28965
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73301
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41088

原文標題:在JetsonNano上編譯OpenCV源碼與OpenCV C++ YOLOv5程序演示

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    OpenCV+CUDA編譯實現(xiàn)YOLOv5能加速

    對比一下,加速效果真得是杠杠滴!所以值得編譯OpenCV+CUDA支持,因為它不光加速深度學(xué)習(xí)模型推理,對傳統(tǒng)圖像處理均有加速!
    的頭像 發(fā)表于 07-18 10:27 ?2383次閱讀
    <b class='flag-5'>OpenCV</b>+CUDA<b class='flag-5'>編譯</b>實現(xiàn)<b class='flag-5'>YOLOv5</b>能加速

    Ubuntu系統(tǒng)下編譯OpenCV4.8源碼記錄

    Jetson開發(fā)板編譯OpenCV源碼編譯運行OpenCV
    的頭像 發(fā)表于 10-27 16:07 ?1362次閱讀
    Ubuntu系統(tǒng)下<b class='flag-5'>編譯</b><b class='flag-5'>OpenCV</b>4.8<b class='flag-5'>源碼</b>記錄

    yolov5的best.pt導(dǎo)出成onnx轉(zhuǎn)化成fp32 bmodel后Airbox跑,報維度不匹配怎么處理?

    用官方的模型不出錯,用自己的yolov5訓(xùn)練出來的best.pt導(dǎo)出成onnx轉(zhuǎn)化成fp32 bmodel后Airbox跑,出現(xiàn)報錯: linaro@bm1684:~/yolov5
    發(fā)表于 05-31 08:10

    【W(wǎng)RTnode2R試用體驗】OpenCV交叉編譯,開發(fā)OpenCV C++程序

    。sudo apt-get install cmake cmake-qt-guicmake-gui選好源碼的目錄,這里我桌面上創(chuàng)建了一個目錄叫opencv-mipsel,用來存放編譯
    發(fā)表于 10-26 20:25

    【Raspberry Pi 3試用體驗】+編譯opencv

    的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統(tǒng)。它輕量級而且高效——由一系列C函數(shù)和少量C++類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口
    發(fā)表于 05-05 18:13

    求大佬分享RK3399運行瑞芯微官方yolov5 C++代碼

    求大佬分享RK3399運行瑞芯微官方yolov5 C++代碼
    發(fā)表于 03-07 06:33

    怎樣使用PyTorch Hub去加載YOLOv5模型

    顯示了PIL和OpenCV圖像源的批量推理??梢源蛴〉娇刂婆_,保存到,支持的環(huán)境中顯示到屏幕,并以張量或pandas數(shù)據(jù)幀的形式返回。對于所有推理選項,請參閱 YOLOv5Auto
    發(fā)表于 07-22 16:02

    OpenCV C++程序編譯演示

    1、JetsonNano編譯OpenCV源碼OpenC
    發(fā)表于 11-10 16:42

    如何使用Borland C++ Builder6.0來開發(fā)OpenCV程序

    本文檔的主要內(nèi)容詳細介紹的是如何使用Borland C++ Builder6.0來開發(fā)OpenCV程序
    發(fā)表于 05-26 17:32 ?14次下載
    如何使用Borland <b class='flag-5'>C++</b> Builder6.0來開發(fā)<b class='flag-5'>OpenCV</b>的<b class='flag-5'>程序</b>

    YOLOv5OpenCV的推理程序

    YOLOv5官方給出的YOLOv5OpenCV推理的程序相對來說是比較通俗易懂的,條理清晰,
    的頭像 發(fā)表于 11-02 10:16 ?1707次閱讀

    C++中使用OpenVINO工具包部署YOLOv5模型

    下載并轉(zhuǎn)換YOLOv5預(yù)訓(xùn)練模型的詳細步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優(yōu)化并部署YOLOv5模型》,本文所使用的OpenVINO是2022.3 LTS版。
    的頭像 發(fā)表于 02-15 16:53 ?4324次閱讀

    OpenCV4.8+YOLOv8對象檢測C++推理演示

    自從YOLOv5更新成7.0版本,YOLOv8推出以后,OpenCV4.6以前的版本都無法再加載導(dǎo)出ONNX格式模型了,只有OpenCV4.7以上版本才可以支持最新版本
    的頭像 發(fā)表于 09-27 11:07 ?1212次閱讀
    <b class='flag-5'>OpenCV4.8+YOLOv</b>8對象檢測<b class='flag-5'>C++</b>推理<b class='flag-5'>演示</b>

    RK3568OpenCV編譯移植

    算法豐富多樣,ARM嵌入式平臺上也適用于做算法的移植。本系統(tǒng)選擇將OpenCV3.2.0編譯移植到開發(fā)板,開發(fā)環(huán)境是虛擬機上安裝的Ubuntu16.04。由于
    發(fā)表于 12-20 10:08 ?67次下載

    基于QT5+OpenCV+OpenVINO C++的應(yīng)用打包過程

    我用QT C++寫了一個YOLOv5模型推理演示應(yīng)用。
    的頭像 發(fā)表于 01-26 10:17 ?875次閱讀
    基于QT<b class='flag-5'>5+OpenCV</b>+OpenVINO <b class='flag-5'>C++</b>的應(yīng)用打包過程

    OpenCV圖像識別C++代碼

    的頭文件 您的C++代碼中,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發(fā)表于 07-16 10:42 ?1083次閱讀