网站接口需求,网站 建设 函,最良心的网页传奇,福田区建设局网站目录 opencv gpu版本编译#xff0c;实现硬解码#xff0c;加速rtsp视频流读取1、准备文件2、复制 NVCUVID 头文件到 cuda 安装目录 include3、安装相关依赖4、 执行cmake5、编译安装6、测试 opencv gpu版本编译#xff0c;实现硬解码#xff0c;加速rtsp视频流读取 前置条… 目录 opencv gpu版本编译实现硬解码加速rtsp视频流读取1、准备文件2、复制 NVCUVID 头文件到 cuda 安装目录 include3、安装相关依赖4、 执行cmake5、编译安装6、测试 opencv gpu版本编译实现硬解码加速rtsp视频流读取 前置条件显卡驱动cuda 已安装 这里cuda安装路径为 /usr/local/cuda-11.2 1、准备文件 opencv-4.5.5 opencv_contrib-4.5.5 nucuvid官网下载
2、复制 NVCUVID 头文件到 cuda 安装目录 include
sudo cp cuviddec.h nvcuid.h nvEncodeAPI. /usr/local/cuda-11.2/include3、安装相关依赖
执行01_install_dependence.sh
#!/bin/bashsudo apt update
sudo apt upgrade#sudo apt install -y gcc-10 g-10
sudo apt install -y build-essential cmake pkg-config yasm git checkinstall
sudo apt install -y pkg-config yasm checkinstall
sudo apt install -y libjpeg-dev libpng-dev libtiff-dev
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt install -y libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev
sudo apt install -y libfaac-dev libmp3lame-dev libvorbis-dev
sudo apt install -y libgtkglext1 libgtkglext1-dev
sudo apt-get install -y libavresample-dev libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils4、 执行cmake
执行02_install_opencv.sh
cd opencv_build
#unzip opencv.zip
#unzip opencv_contrib.zipecho Moving onto the build portion of things
cd opencv-4.5.5
mkdir build cd build
cmake -D CMAKE_BUILD_TYPERELEASE \-D CMAKE_C_COMPILER/usr/bin/gcc-9 \-D CMAKE_INSTALL_PREFIX../install_dir \-D OPENCV_GENERATE_PKGCONFIGON \-D BUILD_opencv_python3ON \-D CUDA_ARCH_BIN8.6\-D WITH_CUDAON \-D WITH_CUDNNON \-D OPENCV_DNN_CUDAON \-D ENABLE_FAST_MATH1 \-D CUDA_FAST_MATH1 \-D OPENCV_ENABLE_NONFREEON \-D WTIH_CUBLAS1 \-D WITH_V4LON \-D WITH_NVCUVIDON \-D WITH_OPENGLON \-D WITH_FFMPEGON \-D BUILD_opencv_javaON \-D OPENCV_EXTRA_MODULES_PATH~/opencv_project/opencv_build/opencv_contrib-4.5.5/modules ..echo Configuring build making OpenCV
echo finished all the shit
需要注意的地方 -D CMAKE_INSTALL_PREFIX../install_dir安装路径 -D CUDA_ARCH_BIN8.6 显卡算力 -D WITH_CUDAON启用CUDA支持 -D WITH_CUDNNON启用CUDNN支持 -D OPENCV_DNN_CUDAON启用CUDA加速的深度学习模块 -D WITH_NVCUVIDON启用NVCUVID支持允许OpenCV在NVIDIA GPU上解码视频。 -D BUILD_opencv_javaON : 启用 java 支持需要先配置好java环境变量jdkant可选项
cmake 执行完成
--
-- OpenCV modules:
-- To be built: alphamat aruco barcode bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform java line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
-- Disabled: world
-- Disabled by dependency: -
-- Unavailable: cvv hdf julia matlab ovis python2 python3 sfm viz
-- Applications: tests perf_tests apps
-- Documentation: NO
-- Non-free algorithms: YES
--
-- GUI: GTK2
-- GTK: YES (ver 2.24.32)
-- GThread : YES (ver 2.64.6)
-- GtkGlExt: YES (ver 1.2.0)
-- OpenGL support: YES (/usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGLU.so)
-- VTK support: NO
--
-- Media I/O:
-- ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
-- JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
-- WEBP: build (ver encoder: 0x020f)
-- PNG: /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.37)
-- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.1.0)
-- JPEG 2000: build (ver 2.4.0)
-- OpenEXR: /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2_3)
-- HDR: YES
-- SUNRASTER: YES
-- PXM: YES
-- PFM: YES
--
-- Video I/O:
-- DC1394: YES (2.2.5)
-- FFMPEG: YES
-- avcodec: YES (58.54.100)
-- avformat: YES (58.29.100)
-- avutil: YES (56.31.100)
-- swscale: YES (5.5.100)
-- avresample: YES (4.0.0)
-- GStreamer: YES (1.16.3)
-- v4l/v4l2: YES (linux/videodev2.h)
--
-- Parallel framework: pthreads
--
-- Trace: YES (with Intel ITT)
--
-- Other third-party libraries:
-- Intel IPP: 2020.0.0 Gold [2020.0.0]
-- at: /home/dell/ljn/opencv_project/opencv_build/opencv-4.5.5/build/3rdparty/ippicv/ippicv_lnx/icv
-- Intel IPP IW: sources (2020.0.0)
-- at: /home/dell/ljn/opencv_project/opencv_build/opencv-4.5.5/build/3rdparty/ippicv/ippicv_lnx/iw
-- VA: NO
-- Lapack: NO
-- Eigen: YES (ver 3.3.9)
-- Custom HAL: NO
-- Protobuf: build (3.19.1)
--
-- NVIDIA CUDA: YES (ver 11.2, CUFFT CUBLAS NVCUVID FAST_MATH)
-- NVIDIA GPU arch: 86
-- NVIDIA PTX archs:
--
-- cuDNN: YES (ver 8.6.0)
--
-- OpenCL: YES (no extra features)
-- Include path: /home/dell/ljn/opencv_project/opencv_build/opencv-4.5.5/3rdparty/include/opencl/1.2
-- Link libraries: Dynamic load
--
-- Python 3:
-- Interpreter: /usr/bin/python3 (ver 3.8.10)
-- Libraries: NO
-- numpy: NO (Python3 wrappers can not be generated)
-- install path: -
--
-- Python (for build): /usr/bin/python3
--
-- Java:
-- ant: /usr/local/apache-ant-1.10.13/bin/ant (ver 1.10.13)
-- JNI: /usr/lib/jvm/jdk1.8.0_361/include /usr/lib/jvm/jdk1.8.0_361/include/linux /usr/lib/jvm/jdk1.8.0_361/include
-- Java wrappers: YES
-- Java tests: YES
--
-- Install to: /home/dell/ljn/opencv_project/opencv_build/opencv-4.5.5/install_dir
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/dell/ljn/opencv_project/opencv_build/opencv-4.5.5/build
Configuring build making OpenCV
finished all the shitgpu 加速开启成功 java 支持开启成功
5、编译安装 进入cmake创建的build目录 cd opencv_build/opencv-4.5.5/build#编译根据电脑核心数选择合适线程
make -j30 安装 make install6、测试 进入目录opencv_gpu_test编译执行程序在CMakeLIsts.txt中修改opencv的安装路径 cd build
make
./opencv_testCMakeLIsts.txt cmake_minimum_required(VERSION 3.0.2)
project(opencv_test)
SET(CMAKE_BUILD_TYPE Release)# 安装路径
find_package(OpenCV 4.5.5 REQUIRED PATHS /home/lenovo/opencv_project/opencv_build/opencv-4.5.5/install_dir)include_directories(${OpenCV_INCLUDE_DIRS})add_executable(opencv_test test.cc )
#add_executable( opencv_test gpu_mat.cpp )
target_link_libraries( opencv_test${OpenCV_LIBRARIES}/usr/lib/x86_64-linux-gnu)test.cc #include iostream
#include string
#include vector
#include algorithm
#include numeric
#include opencv2/opencv_modules.hpp
#include opencv2/core/utility.hpp
#include opencv2/core.hpp
#include opencv2/core/opengl.hpp
#include opencv2/cudacodec.hpp
#include opencv2/highgui.hppint main(int argc, const char* argv[])
{//std::coutcv::getBuildInformation()std::endl;//将这个流改成你自己的const std::string fname rtsp://admin:abcd1234192.168.1.110:554/smart264/ch1/main/av_stream;const std::string gfname rtsp://admin:abcd1234192.168.1.110:554/Streaming/Channels/2;std::coutSet device....std::endl;int numDevice cv::cuda::getCudaEnabledDeviceCount();std::coutdevice count: numDevicestd::endl;int cudaDevice 0;cv::cuda::setDevice(cudaDevice);//cv::cuda::setGlDevice(cudaDevice);//cv::cuda::setGlDevice(1);std::coutread rtsp through cpu...std::endl;cv::Mat frame;cv::VideoCapture reader(fname);cv::cuda::GpuMat d_frame;std::coutread rtsp through cuda...std::endl;cv::Ptrcv::cudacodec::VideoReader d_reader cv::cudacodec::createVideoReader(fname);cv::TickMeter tm;std::vectordouble cpu_times;std::vectordouble gpu_times;std::coutteststd::endl;for (int i 0;i500;i){tm.reset(); tm.start();if (!reader.read(frame))break;tm.stop();cpu_times.push_back(tm.getTimeMilli());tm.reset(); tm.start();if (!d_reader-nextFrame(d_frame))break;tm.stop();gpu_times.push_back(tm.getTimeMilli());}if (!cpu_times.empty() || !gpu_times.empty()){std::cout std::endl Results: std::endl;//std::sort(cpu_times.begin(), cpu_times.end());std::sort(gpu_times.begin(), gpu_times.end());//double cpu_avg std::accumulate(cpu_times.begin(), cpu_times.end(), 0.0) / cpu_times.size();double gpu_avg std::accumulate(gpu_times.begin(), gpu_times.end(), 0.0) / gpu_times.size();//std::cout CPU : Avg : cpu_avg ms FPS : 1000.0 / cpu_avg std::endl;std::cout GPU : Avg : gpu_avg ms FPS : 1000.0 / gpu_avg std::endl;}return 0;
}
// #endif结果如下安装成功