在wsl2上安装opencv4.9.0(包括opencv相关模块,如cuda-opencv、cudacodec等)
作者环境配置及版本信息:
因版本不同原因可能会产生很多不同的错误,如不同opencv版本,支持的显卡架构不同,显卡驱动、Video SDK和显卡兼容性问题,英伟达安装包、OpenCV版本、显卡硬件三者关系会导致各式各样的问题,本文仅供参考。
系统: wsl2_ubuntu22.04
显卡:4060Ti (架构:Ada Lovelace)
显卡驱动:NVIDIA-Linux-x86_64-550.67
cuda版本:11.8
cuDNN版本:8.7.0
tensorrt版本:8.5.3
OpenCV与OpenCV_contrib版本:4.9.0
Video_Codec_SDK版本:11.1.5
一、安装英伟达相关包(cuda、cuDNN、tensorrt)
1、安装英伟达GPU驱动
cd ~
mkdir NVIDIA && cd NVIDIA
#赋予权限:
sudo chmod +x *.run
sudo chmod +x *.deb
#驱动安装:
sudo ./NVIDIA-Linux-x86_64-550.54.14.run
检查驱动是否安装成功:
nvidia-smi
Thu Apr 11 10:56:41 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.73.01 Driver Version: 552.12 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 Ti On | 00000000:01:00.0 On | N/A |
| 0% 50C P0 26W / 160W | 1436MiB / 8188MiB | 4% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
可以看到当前安装的驱动信息,需要注意CUDA Version: 12.4
指当前驱动支持的最高版本,而不是cuda版本。
2、安装cuda:
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
验证nvcc:
nvcc -V
会提示如下:
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit(不需要)
装上cuda后nvcc其实已经存在,可通过建立连接搞定
vim ~/.bashrc
# 在末尾添加:
# cuda_nvcc
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
# 刷新环境变量
source ~/.bashrc
再次nvcc -V就可以看到版本信息了
3、安装cuDNN:
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.7.0.84_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/ # 终端有输出提示,可直接复制终端
sudo apt-get update
sudo apt-get install libcudnn8=8.7.0.84-1+cuda11.8
sudo apt-get install libcudnn8-dev=8.7.0.84-1+cuda11.8
sudo apt-get install libcudnn8-samples=8.7.0.84-1+cuda11.8
cuDNN验证:
cp -r /usr/src/cudnn_samples_v8/ ~/
cd ~/cudnn_samples_v8/mnistCUDNN
make clean && make
# 可能报错:test.c:1:10: fatal error: FreeImage.h: No such file or directory
# 解决办法:sudo apt-get install libfreeimage3 libfreeimage-dev
# 重新 make clean && make
./mnistCUDNN
4、安装Tensorrt:
cd ~/NVIDIA # 回到NVIDIA路径下
sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-8.5.3-cuda-11.8_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-ubuntu2204-8.5.3-cuda-11.8/*-keyring.gpg /usr/share/keyrings/ # 最好直接复制终端提示
sudo apt-get update
sudo apt-get install tensorrt
验证安装:
dpkg -l | grep TensorRT
# 成功后会输出:
ii libnvinfer-bin 8.5.3-1+cuda11.8 amd64 TensorRT binaries
ii libnvinfer-dev 8.5.3-1+cuda11.8 amd64 TensorRT development libraries and headers
ii libnvinfer-plugin-dev 8.5.3-1+cuda11.8 amd64 TensorRT plugin libraries
ii libnvinfer-plugin8 8.5.3-1+cuda11.8 amd64 TensorRT plugin libraries
ii libnvinfer-samples 8.5.3-1+cuda11.8 all TensorRT samples
ii libnvinfer8 8.5.3-1+cuda11.8 amd64 TensorRT runtime libraries
ii libnvonnxparsers-dev 8.5.3-1+cuda11.8 amd64 TensorRT ONNX libraries
ii libnvonnxparsers8 8.5.3-1+cuda11.8 amd64 TensorRT ONNX libraries
ii libnvparsers-dev 8.5.3-1+cuda11.8 amd64 TensorRT parsers libraries
ii libnvparsers8 8.5.3-1+cuda11.8 amd64 TensorRT parsers libraries
ii tensorrt 8.5.3.1-1+cuda11.8 amd64 Meta package for TensorRT
二、安装OpenCV:
1、安装OpenCV工具库(选择性安装):
通用工具:
sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall
图像 I/O 库:
sudo apt install libjpeg-dev libpng-dev libtiff-dev
视频/音频库 - FFMPEG、GSTREAMER、x264 等:
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev
sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev
OpenCore - 自适应多速率窄带 (AMRNB) 和宽带 (AMRWB) 语音编解码器:
sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev
相机编程接口库:
sudo apt-get install libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils
cd /usr/include/linux
sudo ln -s -f ../libv4l1-videodev.h videodev.h
cd ~
用于来自 OpenCV highghui 模块的图形用户功能的 GTK 库:
sudo apt-get install libgtk-3-dev
# 或者
sudo apt-get install libgtk-2.0-dev
CPU 并行库 C++ :
sudo apt-get install libatlas-base-dev gfortran
可选库:
sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
2、安装OpeCV:
下载opencv、opencv_contrib、Video Codec SDK 源码(opencv、opencv_contrib版本需要相同),并解压
opencv:Releases · opencv/opencv · GitHub
opencv_contrib:Tags · opencv/opencv_contrib · GitHub
Video Codec SDK:Video Codec SDK Archive | NVIDIA Developer
进入Video Codec SDK路径:(使用OpenCV调用NVIDIA硬解码,此步骤很重要)
cd Interface
sudo cp *.h /usr/local/cuda/include/
cd Lib/linux/stubs/x86_64
sudo cp *.so /usr/local/cuda/lib64/
进入OpenCV路径:
mkdir build && cd build
cmake命令配置:
# 作者命令配置:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_NVCUVID=ON \
-D WITH_OPENGL=ON \
-D WITH_FFMPEG=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \
-D CUDA_ARCH_BIN=8.9 \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.9.0/modules ..
# 编译
make -j
# 安装
sudo make install
至此OpenCV安装完毕!
3、卸载安装
卸载wsl (手动卸载ubuntu后,管理员身份进入Windows Powershell):
wsl -l # 显示 Ubuntu-22.04
wsl.exe --unregister Ubuntu-22.04
卸载opencv:
# 在opencv_src/build目录下
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
# 检查
pkg-config opencv --libs
pkg-config opencv --modversion
tips:卸载apt安装的opencv:
sudo apt purge libopencv*
sudo apt autoremove
sudo apt update