在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4

在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4_第1张图片

OpenCV 编译过程的截图。

安装一个预编译版本的OpenCV可能会导致你不能充分利用cuda硬件,而cuda硬件在GPU加速方面是非常强大的。。

本文,我们将使用带有 CUDA 和 cuDNN 的预安装环境从源代码构建 OpenCV。

1. 先决条件

1.1 CUDA 和 cuDNN

主要的先决条件是安装 NVIDIA CUDA 工具包和 NVIDIA CUDA 深度神经网络库 (cuDNN) 库。

如果你还没有安装这些,建议你按照我之前的指南安装它们:

https://medium.com/@juancrrn/installing-cuda-and-cudnn-in-ubuntu-20-04-for-deep-learning-dad8841714d6

设置好后,让我们继续依赖关系。

1.2 依赖项

需要 CMake 和 GCC 来配置安装和编译项目:

$ sudo apt install cmake

$ sudo apt install gcc g++

为了支持 Python 3 安装,我们需要 Python(大多数 Ubuntu 版本都预装了它)、Python-devel 和 Numpy:

$ sudo apt install python3 python3-dev python3-numpy

GUI 功能、相机支持 (v4l)、媒体支持 (ffmpeg、gstreamer...) 等都需要 GTK:

$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev

$ sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

$ sudo apt install libgtk-3-dev

下一个依赖项是可选的,但添加了对 PNG、JPEG、JPEG2000、TIFF、WebP 等格式的最新支持:

$ sudo apt install libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev

现在,使用 Git 下载 OpenCV 存储库:

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

我们还将下载 OpenCV 的额外模块 (CMake flag -D OPENCV_EXTRA_MODULES_PATH) 存储库。需要这些模块才能将 CUDA 功能与 OpenCV 一起使用。

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

2.确定CUDA架构版本

CMake 需要 CUDA_ARCH_BIN 设置一个标志才能使用正确的 CUDA 架构编译二进制文件。如果未正确设置此标志,则二进制文件的最终使用将失败。

要正确设置标志,我们首先使用nvidia-smi -L命令确定 NVIDIA GPU 型号:

在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4_第2张图片

现在转到https://developer.nvidia.com/cuda-gpus并查找你的 GPU 型号。

就我而言,我必须去启用 CUDA 的 GeForce 和 TITAN 产品,然后找到 GeForce GTX 1050:

在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4_第3张图片

在型号名称旁边,你会找到 GPU 的计算能力。这是 NVIDIA GPU 架构版本,它将是 CMake 标志的值:CUDA_ARCH_BIN=6.1.

3.准备使用CUDA和cuDNN支持编译

我们将使用一堆 CMake 标志来编译 OpenCV。你可以在本文末尾找到这些的详细参考。

准备构建目录:

$ cd ~/opencv

$ mkdir build

$ cd build

使用以下标志运行 CMake:

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_CUBLAS=ON \
-D WITH_TBB=ON \
-D OPENCV_DNN_CUDA=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D CUDA_ARCH_BIN=6.1 \
-D OPENCV_EXTRA_MODULES_PATH=$HOME/opencv_contrib/modules \
-D BUILD_EXAMPLES=OFF \
-D HAVE_opencv_python3=ON \
..

你应该有一个类似于以下的输出:

...
-- The CXX compiler identification is GNU 9.4.0
...
-- Performing Test...
...
-- General configuration for OpenCV 4.5.5-dev ======================
...
--   NVIDIA CUDA:                   YES (ver 11.6, CUFFT CUBLAS)
--     NVIDIA GPU arch:             61
--     NVIDIA PTX archs:
-- 
--   cuDNN:                         YES (ver 8.3.2)
...
-- Configuring done
-- Generating done
-- Build files have been written to: /home/j/opencv/build

这表明预构建是成功的。

4. 编译支持GPU加速的OpenCV

如果 CMake 没有任何错误,我们就可以编译 OpenCV。

我们只需要知道我们的 CPU 有多少个内核可用。为此,请使用以下lscpu命令:

在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4_第4张图片

查找CPU(s)设置,我们将在下一个命令中使用。

为了最终编译OpenCV,使用make-j--jobs选项,该选项指定要同时运行的作业数,其值必须等于我们之前找到的内核数:

$ make -j 8
在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4_第5张图片

就我而言,完全完成需要半个小时。

5. 安装 OpenCV

在通过 CUDA 和 cuDNN 编译支持 GPU 加速的 OpenCV 后,我们就可以像下载预编译包一样安装它了。

build目录中,运行以下命令:

$ sudo make install

然后用于ldconfig创建必要的链接并缓存到我们新安装的 OpenCV:

$ sudo ldconfig

最后一步是为 Python 3 创建指向 OpenCV 绑定的符号链接,以供全局使用。如果你使用默认的 Ubuntu 安装,这是必需的,因为它的可执行文件会在目录中查找包dist-packages,并且默认在site-packages安装 OpenCV 。

为此,请运行以下命令:

$ sudo ln -s /usr/local/lib/python3.8/site-packages/cv2 /usr/local/lib/python3.8/dist-packages/cv2

使用 python3 解释器和 cv2.cuda.printCudaDeviceInfo(0) 来验证库是否正常工作:

在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4_第6张图片

就是这样。

清理

安装后,有些文件我们将不再需要,可以安全删除:

$ cd ~

$ rm -rf opencv opencv_contrib

使用的 CMake 标志参考

  • CMAKE_BUILD_TYPE =RELEASE:禁用调试选项

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_general_debug

  • CMAKE_INSTALL_PREFIX =/usr/local: 设置生成的二进制文件的根目录

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_install_root

  • WITH_CUDA =ON:启用 CUDA 支持

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_func_hetero

  • WITH_CUDNN=ON:(未记录)启用 cuDNN 支持

  • WITH_CUBLAS=ON:(未记录)启用 cuBLAS 支持

  • WITH_TBB =ON:使用线程构建块启用并行编程

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_func_core

  • OPENCV_DNN_CUDA =ON:启用 CUDA 后端并构建dnn模块(需要 CUDA、cuDNN 和 cuBLAS)

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_dnn

  • OPENCV_ENABLE_NONFREE =ON:启用受专利保护的算法

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_misc

  • CUDA_ARCH_BIN =6.1:指定NVIDIA GPU架构版本(参考第3节)

    • https://github.com/opencv/opencv/blob/4.x/cmake/OpenCVDetectCUDA.cmake#L217

  • OPENCV_EXTRA_MODULES_PATH =$HOME/opencv_contrib/modules:包含 OpenCV 的额外模块

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_general_contrib

  • BUILD_EXAMPLES =OFF:禁用构建示例

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_general_tests

  • HAVE_opencv_python3 =ON:强制依赖opencv_python3

    • https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html#tutorial_config_reference_func

来源

  • 在 Ubuntu 中安装 OpenCV-Python:https://docs.opencv.org/4.5.5/d2/de6/tutorial_py_setup_in_ubuntu.html

  • OpenCV 安装概述:https://docs.opencv.org/4.x/d0/d3d/tutorial_general_install.html

  • OpenCV 配置选项参考:https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html

  • OpenCV 的额外模块存储库:https://github.com/opencv/opencv_contrib

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

在 Ubuntu 20.04 中使用 CUDA 安装 OpenCV 4_第7张图片

你可能感兴趣的:(linux,java,python,cmake,docker)