ORIN上的openCV编译安装 cuda加速和gstream编译

ORIN上的openCV编译安装 cuda加速和gstream编译

一. 卸载Jetpack安装的默认openCV

  • 输入命令
  sudo jtop
  • 按数字6查看INFO页面,可以看到openCV版本信息
openCV: 4.6.4 complied CUDA: NO
  • 所哟默认的openCV版本没有CUDA加速,无法利用ORIN的GPU性能

二. 卸载openCV

  • 卸载默认版本的openCV
sudo apt purge libopencv*
sudo apt autoremove
sudo apt update
  • 卸载其他版本的openCV
cd .../opencv-4.6.0/build
sudo make uninstall
cd .../opencv-4.6.0
sudo rm -r build

三. 安装依赖项及解决报错

1. 依次输入以下命令

sudo apt install -y build-essential checkinstall cmake pkg-config yasm git gfortran
sudo apt update
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install -y libjpeg8-dev libjasper-dev libpng-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils
sudo apt install python3-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
  • 出现问题及问题解决方案
    • 若遇到第一条命令无法跑通则先换源

      # 默认注释了源码仓库,如有需要可自行取消注释
      deb [arch=arm64] http://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
      # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ focal main main restricted universe multiverse
      deb [arch=arm64] http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
      # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
      deb [arch=arm64] http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
      # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
      deb [arch=arm64] http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
      # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
      
    • 若遇到无法定位libjasper-dev软件包,执行如下命令即可安装

      • 方法一:
      sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"
      sudo apt update
      sudo apt install libjasper1 libjasper-dev
      
      • 方法二:
      sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
      sudo apt update
      sudo apt install libjasper1 libjasper-dev
      

四. 下载 OpenCV 和 opencv_contrib 源码

  • 分别前往 OpenCVopencv_contrib 的 github 仓库下载 Latest release 源码 ( 👈 点击超链接跳转)
  • 点击红框所标注的位置即可下载
  • 注意 OpenCV 和 opencv_contrib 的版本要对应正确

五. 编译和安装 OpenCV

  • 将 opencv-4.6.0.zip 和 opencv_contrib-4.6.0.zip 放在同一文件夹并解压,将解压后的opencv_contrib-4.6.0放在opencv-4.6.0文件中!

    • 执行如下命令
    cd opencv-4.6.0
    mkdir build
    cd build
    
  • 执行cmake进行构建

     cmake -D CMAKE_BUILD_TYPE=RELEASE\
        -D CMAKE_INSTALL_PREFIX=/usr/local\
        -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules\
        -D CUDA_ARCH_BIN='8.7'\
        -D CUDA_ARCH_PTX='8.7' \
        -D WITH_CUDA=1\
        -D BUILD_opencv_python3=1\
        -D BUILD_opencv_python2=1\
        -D WITH_FFMPEG=1 \
        -D WITH_V4L=ON\
        -D WITH_QT=ON\
        -D WITH_OPENGL=ON\
        -D ENABLE_FAST_MATH=1 \
        -D CUDA_FAST_MATH=1\
        -D WITH_CUBLAS=1\
        -D OPENCV_GENERATE_PKGCONFIG=1\
        -D WITH_GTK_2_X=ON\
        -D WITH_GSTREAMER=ON\
        ..
    
    
    • CMAKE_BUILD_TYPE=RELEASE        ~~~~~~        # 表示编译发布版本
    • CMAKE_INSTALL_PREFIX=/usr/local        ~~~~~~        #指定安装路径
    • OPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/modules opencv——contrib modules        ~~~~~~        #路径
    • CUDA_ARCH_BIN=‘8.7’        ~~~~~~        #指定GPU算力,可以在NVIDIA官网查询,也可以使用jtop查询
    • WITH_CUDA=1        ~~~~~~        # 使用CUDA加速
    • WITH_GSTREAMER=ON        ~~~~~~        #如果使用openCV的Gstreamer包,这里设置为ON
    • 执行完之后在build目录下查找download_with_wget.sh文件,如果这个文件不存在说明第三方依赖全部下载成功,下载的文件全部默认在opencv-master文件夹的“.cache”目录下,大概111.5MB
  • 编译openCV

    • 注意,如果安装有anaconda,建议执行以下命令,关闭anaconda环境

    • 似乎是conda屏蔽了某些系统库,导致编译时链接到了conda的库而引起冲突,编译CUDA相关的模块会出错。如果系统有安装conda,在编译之前要屏蔽conda。注意是在构建之后,编译之前。

      • 1.终端中关闭conda环境

        ```
        conda deactivate
        ```
        
      • 2.修改bashrc配置文件,屏蔽anaconda环境

        ```
        # >>> conda initialize >>>
        # !! Contents within this block are managed by 'conda init' !!
        __conda_setup="$('/home/nvidia/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
        if [ $? -eq 0 ]; then
            eval "$__conda_setup"
        else
            if [ -f "/home/nvidia/anaconda3/etc/profile.d/conda.sh" ]; then
                . "/home/nvidia/anaconda3/etc/profile.d/conda.sh"
            else
                export PATH="/home/nvidia/anaconda3/bin:$PATH"
            fi
        fi
        unset __conda_setup
        # <<< conda initialize <<<
        ```
        
        • 将conda的环境配置命令使用#注释掉

        • 更新被指文件

          source ~/.bashrc
          
        • 重新打开终端后    ~~   (bash)消失

    • 开始编译

      make -j7 # 设置编译使用的线程数
      
      • jx中x表示使用几线程进行源码编译,可以使用jtop查看设备线程数量。
  • 编译完成,安装openCV

    sudo make install
    
    • 至此openCV安装完成,编译生成的安装文件都会复制到CMAKE_INSTALL_PREFIX为前缀的目录下。

六. 环境配置

  • 配置链接库,使用了opencv库的程序在运行时会通过这个配置链接库,否则即使代码编译成功也无法运行(可以先跳过这一步,后续测试就会发现display.cpp编译成功但找不到库以致无法运行)。
apt-get install pkg-config
 
gedit /etc/ld.so.conf.d/opencv.conf   # (打开后加入/usr/local/lib(构建编译文件时的路径CMAKE_INSTALL_PREFIX/lib ),然后保存退出)
sudo ldconfig
  • 配置pkg-config方便编译小型OpenCV程序
sudo /etc/bash.bashr
# 在文档最后加入openCV的环境配置路径,下面两行
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<CMAKE_INSTALL_PREFIX>/lib/pkgconfig
export PKG_CONFIG_PATH    

source /etc/bash.bashrc # 更新配置环境
  • 环境配置验证
find ./ -name opencv4.pc
# ./unix-install/opencv4.pc
 
pkg-config --cflags opencv4
# -I/usr/local/include/opencv4

七. 验证测试

  • 1.使用jtop查看openCV配置,编译配置正确输出如下
openCV: 4.6.0 compiled CUDA: YES
  • 2.使用以下命令查看openCV的版本号
pkg-config --modversion opencv4
  • 3.程序测试
    • 编写一个简单程序display.cpp测试编译和环境配置是否成功。读取图像并显示和打印图像的尺寸:
    • 程序如下
    #include<iostream>
    #include<string>
    #include<opencv2/core.hpp>
    #include<opencv2/highgui.hpp>
    
    int main(int args, char** argv){
        std::string filename = "/home/<user_name>/picture/xx.jpg";
        if (args >= 2){
            filename = argv[1];
            std::cout << "Image file: " << filename << std::endl;
        }
    
        cv::Mat image = cv::imread(filename, cv::IMREAD_COLOR);
        if (image.empty()){
            std::cout << "please input an image file path." << std::endl;
            return 0;
        }
    
        std::cout << "Image size is: " << image.size() << std::endl;
    
        cv::namedWindow("image", cv::WINDOW_NORMAL);
        cv::imshow("image", image);
        cv::waitKey(0);
        cv::destroyAllWindows();
    
        return 0;
    }
    
    
    • 编译:
    g++ display.cpp -o display `pkg-config --cflags opencv4 --libs opencv4`
    
    • `是ESC键下面那个键输入的符号,不是单引号’。

    • 运行:

    ./display /home/<user_name>/picture/xx.jpg
    
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值