zoukankan      html  css  js  c++  java
  • 源码编译OpenCV


    1. 源码编译

    官网: Install OpenCV-Python in Ubuntu

    1. 下载源码

      下载opencv与opencv-contrib的源码包,注意版本对应

      opencv:https://github.com/opencv/opencv/releases
      opencv-contrib:https://github.com/opencv/opencv_contrib/releases
      
    2. 安装依赖

      # to support gtk2:
      sudo apt-get install libgtk2.0-dev
      # to support gtk3:
      sudo apt-get install libgtk-3-dev
      

      可选依赖

      sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libwebp-dev
      sudo apt-get install libopenexr-dev
      
    3. 编译安装

      mkdir build && cd build && cmake ..  # 编译选项
      make -j4
      sudo make install
      
    4. 验证

      pkg-config --modversion opencv4
      

    1.1. Jetson编译最新版本

    Install OpenCV 4.4.0 on Jetson Nano

    csdn: Jetson带CUDA编译的opencv4.5安装教程与踩坑指南,cmake配置很重要!

    由于Jetson自带的是4.1.1的老版本OpenCV(基于Ubuntu18.04),且apt包未提供CUDA支持。所以需要自己编译OpenCV,这里是基于4.5.1版本。

    mv opencv_contrib opencv
    cd opencv && madir build && cd build
    

    cmake编译选项说明:

    cmake -DCMAKE_BUILD_TYPE=RELEASE     #表示编译发布版本
        -DCMAKE_INSTALL_PREFIX=/usr/local     #指定安装路径
        -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules 
        -DCUDA_ARCH_BIN='7.2'     #指定GPU算力,在NVIDIA官网查询,也可在jtop中查询
        -DWITH_CUDA=ON     #使用CUDA
        -DWITH_V4L=ON 
        -DWITH_QT=ON     #使用QT支持
        -DWITH_OPENGL=ON 
        -DENABLE_FAST_MATH=1 
        -DCUDA_FAST_MATH=1 
        -DWITH_CUBLAS=1 
        -DOPENCV_GENERATE_PKGCONFIG=1     #用于生成opencv4.pc文件,支持pkg-config功能,没有这一项的话需要自己手动生成
        -DCUDA_GENERATION=Pascal 
        -DWITH_GTK_2_X=ON ..    #解决Gtk-ERROR的关键
    

    关于 CUDA_GENERATION ,对于常见的几个嵌入式设备的CUDA架构如下:

    • Jetson Nano: Maxwell
    • Jetson TX2: Pascal
    • Xavier NX: Volta
    • AGX Xavier: Volta

    github_issue

    cmake配置中 -D ENABLE_FAST_MATH=1 会导致莫名的错误,建议去掉;

    -D CUDA_GENERATION=Pascal 对于 -D CUDA_ARCH_BIN='7.2' 来说是多余的,建议去掉;

    make -j6 多核编译会出现莫名的错误,建议单核编译 make VERBOSE=1

    以下参数是针对jetson的优化

    $ cmake -D CMAKE_BUILD_TYPE=RELEASE 
            -D CMAKE_INSTALL_PREFIX=/usr/local 
            -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules 
            -D EIGEN_INCLUDE_PATH=/usr/include/eigen3 
            -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=OFF 
            -D CUDA_FAST_MATH=ON 
            -D OPENCV_DNN_CUDA=ON 
            -D ENABLE_NEON=ON 
            -D WITH_QT=OFF 
            -D WITH_OPENMP=ON 
            -D WITH_OPENGL=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 BUILD_EXAMPLES=ON 
            -D INSTALL_C_EXAMPLES=ON 
            -D INSTALL_PYTHON_EXAMPLES=ON 
            -D PYTHON_DEFAULT_EXECUTABLE=$(which python3) 
            -D BUILD_NEW_PYTHON_SUPPORT=ON 
            -D BUILD_opencv_python3=TRUE 
            -D OPENCV_GENERATE_PKGCONFIG=ON 
            -D WITH_GTK_2_X=ON ..
    

    编译时,注意添加 -j4 可以有效提升编译速度。

    sudo make install -j4
    

    额,经过测试,多核编译确实可以提速编译,但最后会莫名的卡死在100%的状态下,ps 的状态标识为 D 。此时重新编译,去除多核编译选项,即可完成编译

    1.2. 编译报错

    1.2.1. xfeatures2d缺少boostdesc_lbgm.i等文件

    cmake会自动下载配置文件,但由于网络问题,导致数据下载失败。

    .cache
    └───xfeatures2d
        ├───boostdesc
        │       0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i
        │       0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i
        │       202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i
        │       232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i
        │       324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i
        │       98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i
        │       e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i
        └───vgg
                151805e03568c9f490a5e3a872777b75-vgg_generated_120.i
                7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i
                7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i
                e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i
    

    可以从以下地址: github: opencv_contrib_files 下载,并解压到 build/.cache/xfeatures2d/ 代替原有的boostdesc和vgg两个文件夹。

    1.2.2. face_landmark_model.dat等文件缺失

    csdn: 一次性解决opencv源码安装文件下载问题:ippicv_2017u3_lnx, face_landmark_model.dat, tiny-dnn

    1. face_landmark_model.dat

      下载地址:github: opencv_3rdparty-face_landmark_model.dat

      gitee备份: gitee: opencv_3rdparty-face_landmark_model.dat

      配置: opencv_contrib/modules/face/CMakeLists.txt ,第19行,把网址改成下载路径 "file://${path_dir}" (注意,不用指定文件,dir即可)。

    2. ippicv_2017u3_lnx_intel64_general_20170822.tgz

      下载地址:github: opencv_3rdparty-ippcv

      另提供gitee的备份: gitee: opencv_3rdparty-ippcv

      配置:打开 opencv/3rdparty/ippicv/ippicv.cmake ,第47行 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" ,改成:"file://${path}"

    3. tiny-dnn-1.0.0a3.tar.gz

      下载地址:github: opencv_3rdparty-tinydnn

      gitee备份: gitee: opencv_3rdparty-tinydnn

      配置:${opencv_contrib_folder}/modules/dnn_modern/CMakeLists.txt ,第23行,修改方法和前面一样

    1.3. 编译opencv-python

    安装依赖:

    sudo apt-get install python3-dev python3-numpy
    

    You should see these lines in your CMake output (they mean that Python is properly found):

    --   Python 2:
    --     Interpreter:                 /usr/bin/python2.7 (ver 2.7.6)
    --     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6)
    --     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.8.2)
    --     packages path:               lib/python2.7/dist-packages
    --
    --   Python 3:
    --     Interpreter:                 /usr/bin/python3.4 (ver 3.4.3)
    --     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.4m.so (ver 3.4.3)
    --     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.8.2)
    --     packages path:               lib/python3.4/dist-packages
    
    --   Python (for build):            /usr/bin/python2.7
    

    能够正常找到python环境,但默认选择了 python2.7 匹配?解决方法如下:

    PYTHON_DEFAULT_EXECUTABLE=$(which python3) 决定了生成 cv2.so 对应的python版本。如果你需要自定义numpy和site_package(例如venv环境下的依赖包),可以使用以下选项

    -D INSTALL_PYTHON_EXAMPLES=ON 
    -D PYTHON_EXECUTABLE=/home/user/anaconda3/bin/python3.7m 
    -D PYTHON_INCLUDE_DIR=/home/user/anaconda3/include/python3.7m 
    -D PYTHON_LIBRARY=/home/user/anaconda3/lib/libpython3.7m.so 
    -D PYTHON_PACKAGES_PATH=/home/user/anaconda3/lib/python3.7/site-packes
    -D PYTHON_NUMPY_INCLUDE_DIR=/home/user/anaconda3/lib/site-packages/numpy/core/include 
    -D PYTHON3_PACKAGES_PATH=/home/user/anaconda3/lib/python3.7/site-packages
    

    注意:如果编译时使用了编译选项 -D BUILD_opencv_world=NO 那么完成后在 build/lib 文件夹下也找不到cv2.so的。

    测试

    python3 -c "import cv2; print(cv2.__version__)"
    

    2. OpenCV-Python

    2.1. 使用CUDA加速dnn

    csdn: opencv-python dnn模块使用CUDA加速

    How to use OpenCV’s “dnn” module with NVIDIA GPUs, CUDA, and cuDNN

    net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
    

    3. 编译cv代码

    g++ main.cpp `pkg-config opencv4 --cflags --libs`
    
  • 相关阅读:
    allocator类
    智能指针shared_ptr
    字面值常量类
    转换构造函数
    委托构造函数
    访问说明符&封装
    const成员函数
    函数指针
    constexper和常量表达式
    函数返回数组指针
  • 原文地址:https://www.cnblogs.com/brt2/p/14437560.html
Copyright © 2011-2022 走看看