【问题标题】:Build OpenCV-4.0.0 with cuda 11 on Ubuntu 18.04在 Ubuntu 18.04 上使用 cuda 11 构建 OpenCV-4.0.0
【发布时间】:2020-09-29 11:33:55
【问题描述】:

我正在尝试在 Ubuntu 18.04 上使用 cuda 11 构建 openCV 4.0.0。 以下是我的cmakefile

cmake -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_C_COMPILER=/usr/bin/gcc-7 \
  -D CMAKE_INSTALL_PREFIX=/usr/local/OpenCV-4.0.0 \
  -D INSTALL_PYTHON_EXAMPLES=ON \
  -D INSTALL_C_EXAMPLES=OFF \
  -D WITH_TBB=ON \
  -D WITH_CUDA=ON \
  -D WITH_CUDNN=ON \
  -D OPENCV_DNN_CUDA=ON \
  -D CUDA_ARCH_BIN=7.5 \
  -D BUILD_opencv_cudacodec=OFF \
  -D ENABLE_FAST_MATH=1 \
  -D CUDA_FAST_MATH=1 \
  -D WITH_CUBLAS=1 \
  -D WITH_V4L=ON \
  -D WITH_QT=OFF \
  -D WITH_OPENGL=ON \
  -D WITH_GSTREAMER=ON \
  -D OPENCV_GENERATE_PKGCONFIG=ON \
  -D OPENCV_PC_FILE_NAME=opencv.pc \
  -D OPENCV_ENABLE_NONFREE=ON \
  -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages \
  -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.0.0/modules \
  -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
  -D BUILD_EXAMPLES=ON ..

我收到以下错误

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppicom_LIBRARY (ADVANCED)
    linked by target "opencv_cudev" in directory /home/ali/opencv_contrib-4.0.0/modules/cudev
    linked by target "opencv_cudev" in directory /home/ali/opencv_contrib-4.0.0/modules/cudev
    linked by target "opencv_test_cudev" in directory /home/ali/opencv_contrib-4.0.0/modules/cudev/test
    linked by target "opencv_test_core" in directory /home/ali/opencv-4.0.0/modules/core
    linked by target "opencv_core" in directory /home/ali/opencv-4.0.0/modules/core
    linked by target "opencv_core" in directory /home/ali/opencv-4.0.0/modules/core
    linked by target "opencv_perf_core" in directory /home/ali/opencv-4.0.0/modules/core
    linked by target "opencv_test_cudaarithm" in directory /home/ali/opencv_contrib-4.0.0/modules/cudaarithm
    linked by target "opencv_cudaarithm" in directory /home/ali/opencv_contrib-4.0.0/modules/cudaarithm
    linked by target "opencv_cudaarithm" in directory /home/ali/opencv_contrib-4.0.0/modules/cudaarithm
    linked by target "opencv_perf_cudaarithm" in directory /home/ali/opencv_contrib-4.0.0/modules/cudaarithm
    linked by target "opencv_flann" in directory /home/ali/opencv-4.0.0/modules/flann
    linked by target "opencv_flann" in directory /home/ali/opencv-4.0.0/modules/flann
    linked by target "opencv_test_flann" in directory /home/ali/opencv-4.0.0/modules/flann
    linked by target "opencv_test_hdf" in directory /home/ali/opencv_contrib-4.0.0/modules/hdf
    linked by target "opencv_hdf" in directory /home/ali/opencv_contrib-4.0.0/modules/hdf
    linked by target "opencv_hdf" in directory /home/ali/opencv_contrib-4.0.0/modules/hdf
    linked by target "opencv_test_imgproc" in directory /home/ali/opencv-4.0.0/modules/imgproc
    linked by target "opencv_imgproc" in directory /home/ali/opencv-4.0.0/modules/imgproc
    linked by target "opencv_imgproc" in directory /home/ali/opencv-4.0.0/modules/imgproc
    linked by target "opencv_perf_imgproc" in directory /home/ali/opencv-4.0.0/modules/imgproc

我测试了 cuda/cudnn 示例,它们运行良好。 任何帮助将不胜感激。

【问题讨论】:

  • 很有可能 CMake 和您使用的 makefile 以及 opencv 实际上都没有 CUDA 11 支持。 4天前才发布
  • 根据NPP documentation请注意,NPP 自 NPP 11.0 起已弃用 nppicom JPEG 压缩库,请改用 NVJPEG 库。 所以 OpenCV 必须将其 CMakeLists 更新为支持这个改变。
  • @talonmies 现在我安装了 cuda-11.0。当我制作 opencv 时,make part 也检测到了我的 CUDA-11.0。但我仍然遇到与此人类似的错误。这些错误仅仅是因为 opencv4.x.x 与 CUDA-11.0 不兼容,还是还有其他原因?
  • @Ali 你能找到解决问题的方法吗?
  • @Johny 你能否详细说明一下。我是否必须卸载 NPP 并安装 NVJPEG。如果是,那么如何。以及我将如何在 opencv 的 Cmakelists 中进行更改。

标签: opencv opencv4


【解决方案1】:

似乎是因为版本兼容性问题。两个星期以来,我一直在寻找解决同一问题的方法。我试图让 OpenCV-4.2.0 在 Ubuntu-20.04 上与 CUDA-11.1 和 CUDNN-8.0.5 一起工作,但它从来没有成功过。

在阅读了@antb52 的评论后,我尝试安装 OpenCV-4.4.0,它成功了!现在,问题解决了!!!

【讨论】:

    【解决方案2】:

    对于我在 Ubuntu 18.04 上使用 OpenCV 4.4.0 的 CUDA 11.1,将 -DCUDA_nppicom_LIBRARY=true 添加到 Dockerfile 中的 cmake 解决了这个问题。

    【讨论】:

      【解决方案3】:

      我建议只从主分支中签出 FindCUDA.cmake 和 OpenCVDetectCuda.cmake

      (对于这个修复,您需要从 github 克隆它)

      如果没有:

      git clone https://github.com/opencv/opencv.git

      cd opencv; git checkout 4.2.0

      现在您可以从 master 获取文件了:

      git checkout master cmake/FindCUDA.cmake cmake/OpenCVDetectCUDA.cmake

      rm -r build/; mkdir build; cd build;#擦除缓存

      现在您可以开始构建了!

      cmake [ OPTIONS ] ..

      正如我之前所读到的,CUDA 发生了很大变化。在高于 7.5 的版本中,nppi 库似乎被拆分为多个库,并且 11 以上(我猜)nppicom 被删除了。更大的 OpenCV 版本可以处理这个问题,但 4.2 没有。

      【讨论】:

        【解决方案4】:

        尝试在构建文件夹中运行cmake-gui ..ccmake ..查看所有选项,错误表明cmake无法检测到依赖项的位置...

        cmake-gui 自带最新cmake,从here下载。

        如果你想安装最新的cmake,别忘了卸载旧的

        ccmake 类似,只是不同的gui...,安装sudo apt install cmake-curses-gui。安装ccmake时不需要卸载cmake,可以使用旧的。

        当你运行它时,你会看到很多配置,将说NOT FOUND(导致错误)的依赖文件夹设置为安装依赖的文件夹。

        如果您尚未安装依赖项,请安装它,指向文件夹并重新配置..

        如果安装时出现一个或多个问题,那么你决定不使用它,寻找选项WITH_the_dependencies,并设置它OFF以防止错误。

        【讨论】:

        • 我想在遇到错误的地方使用 cuda 支持来构建它。我尝试了命令行和gui。两者都有相同的错误。
        • 你必须明白opencv就像一个框架,就像把所有方法放在一个包里。意味着虽然每种方法都有效,但需要依赖关系,cuda 只是一个“连接器”,让您可以在 GPU 中进行所有计算。所以..,根据我多次安装绑定到cuda的opencv的经验,由于在CV中使用模块的依赖项不存在而引发错误..同时,我的配置设置为opencv推送添加它.所以面对这种情况的选择是:安装依赖项或牺牲模块。
        • 试试看这个,可能你的问题是类似的。 stackoverflow.com/questions/46584000/… @johny 已经回答了这个问题,因为需要的依赖项已被弃用。因此,如果您按照上面链接中 api55 推荐的步骤进行操作,也许您可​​以解决问题。
        【解决方案5】:

        我也有同样的问题,看起来 nppicom 已被弃用,因此您需要在 FindCUDA.cmake 文件中忽略它,如link所示

        【讨论】:

          【解决方案6】:

          不是那么直接,CUDA 11.0 需要 c++14 和一个最新的编译器 g++-9,但是 opencv 停留在 c++11,很多问题,最好等待 opencv 4.4。对于破坏 api 和包含的 libcudnn8(例如 cudnn_version_v8.h),同样的东西。祝你好运

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-11
            • 2019-02-20
            • 2021-12-01
            • 2019-02-05
            • 1970-01-01
            • 2011-07-14
            • 2019-01-18
            • 2019-04-09
            相关资源
            最近更新 更多