在wsl使用的过程中,opencv默认安装的都是不带cuda加速,对cpu的要求比较高,我们通过编译with cuda可以大大加速opencv的图像性能,鉴于我们的环境使用的都是conda,所以在conda中能够进行cuda操作也很关键。
首先我们先安装一下依赖:
sudo apt-get install -y \
build-essential \
cmake \
git \
gfortran \
libatlas-base-dev \
libavcodec-dev \
libavformat-dev \
libavresample-dev \
libcanberra-gtk3-module \
libdc1394-22-dev \
libeigen3-dev \
libglew-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-good1.0-dev \
libgstreamer1.0-dev \
libgtk-3-dev \
libjpeg-dev \
libjpeg8-dev \
libjpeg-turbo8-dev \
liblapack-dev \
liblapacke-dev \
libopenblas-dev \
libpng-dev \
libpostproc-dev \
libswscale-dev \
libtbb-dev \
libtbb2 \
libtesseract-dev \
libtiff-dev \
libv4l-dev \
libxine2-dev \
libxvidcore-dev \
libx264-dev \
pkg-config \
python-dev \
python-numpy \
python3-dev \
python3-numpy \
python3-matplotlib \
qv4l2 \
v4l-utils \
zlib1g-dev
之后,我们去github下载对应的版本,这里以opencv 4.8.0版本为例:
https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip
https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.zip
下载好以后,找一个自己喜欢的文件夹解压一下,在这里我的路径为
~/Documents:
解压以后能看到2个文件夹,分别为opencv-4.8.0 和 opencv_contrib-4.8.0
接下来我们
cd opencv-4.8.0/
mkdir build
cd build
进行cmake环境配置,这里有几个前提条件,首先得确定自己的显卡ARCH版本,不懂的小伙伴可以从英伟达官网查询:CUDA GPUs - Compute Capability | NVIDIA Developer
例如我的显卡是4090,经查询版本为8.9
接下来我们在build 目录下执行
sudo cmake \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_CUBLAS=1 \
-D WITH_CUFFT=ON \
-D WITH_CUBLAS=1 \
-D WITH_NVCUVID=OFF \
-D WITH_OPENMP=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D WITH_GSTREAMER=ON \
-D OPENCV_DNN_CUDA=0N \
-D CUDA_ARCH_BIN=8.9 \
-D CUDA_ARCH_PTX=8.9 \
-D OPENCV_EXTRA_MODULES_PATH=/home/dai/Documents/opencv_contrib-4.8.0/modules \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D CMAKE_INSTALL_PREFIX=/usr/local ..
需要注意的地方CUDA_ARCH_BIN配置成上述查询的代号,OPENCV_EXTRA_MODULES_PATH配置成你实际的路径
接下来就只需要运行
sudo make -j16
sudo make install
等待编译完成即可,最后执行完毕以后,即可在默认的环境中进行测试,
运行
那么我们发现在conda环境中无法使用cv2,或者以前安装过opencv,需要通过conda或者pip删除,我们可以通过创建软连接来使得虚拟环境中能查找到cv2的packet,我使用以下代码创建链接以后,就可以在conda环境中正确import cv2了
ln -s /usr/local/lib/python3.10/dist-packages/cv2 ~/miniconda3/envs/pytorch/lib/python3.10/site-packages/cv2