opencv-gpu版本编译(添加java支持,可选)实现硬解码

这篇具有很好参考价值的文章主要介绍了opencv-gpu版本编译(添加java支持,可选)实现硬解码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

opencv gpu版本编译,实现硬解码,加速rtsp视频流读取

前置条件,显卡驱动,cuda 已安装

这里cuda安装路径为 /usr/local/cuda-11.2

1、准备文件

  • opencv-4.5.5

  • opencv_contrib-4.5.5
    opencv-gpu版本编译(添加java支持,可选)实现硬解码,QT/C++进阶之路,opencv,java,人工智能

  • nucuvid:官网下载
    opencv-gpu版本编译(添加java支持,可选)实现硬解码,QT/C++进阶之路,opencv,java,人工智能

2、复制 NVCUVID 头文件到 cuda 安装目录 include

sudo cp cuviddec.h nvcuid.h nvEncodeAPI. /usr/local/cuda-11.2/include

3、安装相关依赖

  • 执行01_install_dependence.sh
#!/bin/bash

sudo 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-utils

4、 执行cmake

  • 执行02_install_opencv.sh
cd opencv_build
#unzip opencv.zip
#unzip opencv_contrib.zip

echo "Moving onto the build portion of things"
cd opencv-4.5.5
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_C_COMPILER=/usr/bin/gcc-9 \
    -D CMAKE_INSTALL_PREFIX=../install_dir \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D BUILD_opencv_python3=ON \
    -D CUDA_ARCH_BIN=8.6\
    -D WITH_CUDA=ON \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WTIH_CUBLAS=1 \
    -D WITH_V4L=ON \
	-D WITH_NVCUVID=ON \
	-D WITH_OPENGL=ON \
	-D WITH_FFMPEG=ON \
	-D BUILD_opencv_java=ON \
    -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_BIN=8.6 : 显卡算力

  • -D WITH_CUDA=ON:启用CUDA支持

  • -D WITH_CUDNN=ON:启用CUDNN支持

  • -D OPENCV_DNN_CUDA=ON:启用CUDA加速的深度学习模块

  • -D WITH_NVCUVID=ON:启用NVCUVID支持,允许OpenCV在NVIDIA GPU上解码视频。

  • -D BUILD_opencv_java=ON : 启用 java 支持,需要先配置好java环境变量(jdk,ant),可选项

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 shit
  • gpu 加速开启成功
    opencv-gpu版本编译(添加java支持,可选)实现硬解码,QT/C++进阶之路,opencv,java,人工智能
  • java 支持开启成功
    opencv-gpu版本编译(添加java支持,可选)实现硬解码,QT/C++进阶之路,opencv,java,人工智能

5、编译安装

  • 进入cmake创建的build目录

    cd opencv_build/opencv-4.5.5/build
    
    #编译,根据电脑核心数选择合适线程
    make -j30  
    
  • 安装

    make install
    

6、测试

  • 进入目录opencv_gpu_test,编译执行程序,在CMakeLIsts.txt中修改opencv的安装路径

    cd build
    make 
    ./opencv_test
    
  • CMakeLIsts.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.hpp>
    
    int main(int argc, const char* argv[])
    {
       //std::cout<<cv::getBuildInformation()<<std::endl;
       //将这个流改成你自己的
        const std::string fname = "rtsp://admin:abcd1234@192.168.1.110:554/smart264/ch1/main/av_stream";
        const std::string gfname = "rtsp://admin:abcd1234@192.168.1.110:554/Streaming/Channels/2";
        std::cout<<"Set device...."<<std::endl;
        int numDevice = cv::cuda::getCudaEnabledDeviceCount();
        std::cout<<"device count: "<<numDevice<<std::endl;
        int cudaDevice = 0;
        cv::cuda::setDevice(cudaDevice);
        //cv::cuda::setGlDevice(cudaDevice);
        //cv::cuda::setGlDevice(1);
    
        std::cout<<"read rtsp through cpu..."<<std::endl;
        cv::Mat frame;
        cv::VideoCapture reader(fname);
    
        cv::cuda::GpuMat d_frame;
        std::cout<<"read rtsp through cuda..."<<std::endl;
        cv::Ptr<cv::cudacodec::VideoReader> d_reader = cv::cudacodec::createVideoReader(fname);
        cv::TickMeter tm;
        std::vector<double> cpu_times;
        std::vector<double> gpu_times;
        std::cout<<"test"<<std::endl;
        for (int i = 0;i<500;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
    
  • 结果如下安装成功

opencv-gpu版本编译(添加java支持,可选)实现硬解码,QT/C++进阶之路,opencv,java,人工智能文章来源地址https://www.toymoban.com/news/detail-673851.html

到了这里,关于opencv-gpu版本编译(添加java支持,可选)实现硬解码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用cmake编译opencv过程中的可选参数说明

    opencv版本:4.5.5 通过源码编译opencv时,cmake可以带有很多可选参数,这里对这些可选参数进行说明。 配置选项可以通过几种不同的方式设置: 命令行:cmake-Doption=value… 初始缓存文件:cmake-C my_options.txt… 通过Cmake-GUI进行设定 在本参考中,我们将使用常规命令行。 最常用和有

    2024年02月16日
    浏览(49)
  • opencv 编译cuda版本 error: “cudaUnbindTexture“ is undefined cuda_compile_1_generated_gpu_mat.cu.o

    这是由于cuda的版本问题造成的,下面介绍方案  如果你的cuda版本是11.x,在opencv 4.5.0的项目根目录的CMakelists.txt的开头加一句 参考:Ubuntu16.05+CUDA8下编译OpenCV错误 [...cuda_compile_generated_gpu_mat.cu.o] Error 1 没有验证过,如果有同学验证过,并成功了。希望在评论区积极反馈 如果你

    2024年02月21日
    浏览(47)
  • java生成pdf表格并支持下载可选另存为

    直接复制以上代码即可完成,但是也要引入一些依赖 引入以后修修补补增增改改就可以了

    2024年02月10日
    浏览(49)
  • Intellij idea 编译报错:Error : java 不支持发行版本5(error: release version 5 not supported)

    问题:在 IntelliJ IDEA 中创建一个Maven项目时,出现以下错误并且无法构建它。 我设法解决了错误并进行到可以构建的地步,因此我将介绍如何处理它。 环境 方法 – 如何处理“错误:java:错误:不支持发布版本 5” – 如何处理“错误:java:当前不支持源选项 5。请使用 6 或

    2024年02月12日
    浏览(40)
  • 查看电脑显卡(GPU)是否支持CUDA及其版本

    最近想要试一下tensorflow和mindspore的GPU版本,于是乎倒腾了一下电脑,想要看一下电脑是否支持GPU以及是哪一个版本 预备知识: 什么是GPU? CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解

    2024年02月11日
    浏览(54)
  • Win10安装GPU支持的最新版本的tensorflow

    我在安装好cuda和cudnn后,使用pip install tensorflow安装的tensorflow都提示不能找到GPU, 为此怀疑默认暗转的tensorflow是不带GPU支持的。 在tensorflow官网提供了多个版本的GPU支持的windows的安装包 https://www.tensorflow.org/install/pip?hl=zh-cn#system-install 下载后再安装就可以成功安装GPU支持的t

    2024年02月13日
    浏览(41)
  • 【JetsonNano】onnxruntime-gpu 环境编译和安装,支持 Python 和 C++ 开发

    若编译识别,内存不足,可进行扩大交换内存 https://labelnet.blog.csdn.net/article/details/136538479 编译完成标识 (1) 整个 build 目录,包含 build/Linux/Relase https://download.csdn.net/download/LABLENET/88943160 (2) 仅 Python3.8 安装文件, onnxruntime-gpu-1.16.0-cp38-cp38-linux-aarch64.whl https://download.csdn.net/downloa

    2024年04月15日
    浏览(41)
  • linux如何查看编译器支持的C++版本(支持C++11、支持C++14、支持C++17、支持C++20)(编译时不指定g++版本,默认使用老版本编译)

    C++11 C++11是一个重要的C++标准版本,于2011年发布。C++11带来了许多重要的改进,包括: 智能指针:引入了shared_ptr和unique_ptr等智能指针,用于更好地管理动态内存分配。 新的循环语句:引入了for循环中的范围语法,以更简洁的方式遍历容器。 初始化列表:允许使用初始化列表

    2024年02月02日
    浏览(40)
  • Python OpenCV配置CUDA以支持GPU加速 (不使用Visual Studio)

    Welcome to My Blog 文章唯一地址:https://blog.csdn.net/REAL_liudebai/article/details/119356958 问题:   1)Python通过pip或conda安装的OpenCV库仅支持CPU;   2)网上找到的教程基本都是通过VS配置CUDA环境( VS太强大了,但并不想安装 ); 解决办法:   3)可以使用官方预构建源代码配置支

    2024年01月22日
    浏览(60)
  • 支持硬件加速的opencv编译

    为了降低cpu的使用率提升系统的接入能力,需要将编解码模块移至GPU处理,opencv默认的发行版中不支持GPU加速,所以需要重新编译opencv使其支持GPU硬件加速。 本文的读者须具备一定的Linux使用经验,如常规软件安装等操作不在本文档中描述。 cuda:统一计算设备架构(Compute

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包