默认已经装好了anaconda和显卡驱动。
#装完了之后在bashrc里面写入路径
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64{LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
使其生效:
source ~/.bashrc
测试用例验证:
cd /usr/local/cuda-10.1/samples/1_Utilties/deviceQuery
sudo make
./deviceQuery
出现Resut=PASS表示验证通过。
不要下载.deb格式的,直接下载cuDNN Library for Linux
解压之后进入这个文件夹,里面有一个cuda,在这里打开终端:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
验证是否正确:(这个命令有点问题 cat出来的肯定对啊)
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
5.1 安装依赖
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
sudo apt-get install libgtk-3-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgphoto2-dev libavresample-dev
5.2 下载项目文件
OpenCV 4.2.0:
https://github.com/opencv/opencv/releases/tag/4.2.0
OpenCV Contib 4.2.0:
https://github.com/opencv/opencv_contrib/releases/tag/4.2.0
ippicv_2019_lnx_intel64_general_20180723.tgz
链接: https://pan.baidu.com/s/1eyG7mqKLY6CvUQdh7CbUgA 提取码: 1miu (感谢好心人分享)
都解压好了放一起:
/home/ubuntu/opencv4.2/
opencv-4.2.0/
opencv_contrib-4.2.0/
ippicv_2019_lnx_intel64_general_20180723.tgz
6.1 进入opencv-4.2.0(就是opencv的源码目录)新建一个build文件夹然后进入文件夹
cd /home/username/opencv4.2/opencv-4.2.0
mkdir build
cd build
6.2 安装cmake
pip install cmake
6.3 cmake
cmake之前要在要在OpenCV的项目目录中的CMakeLists.txt的开头,第17行左右加一句话
include_directories("modules")
然后下载一些文件:
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
点击这里(z7dp),把他们复制到opencv_contrib/moudles/xfeatures2d/src
开始Cmake:
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D PYTHON_DEFAULT_EXECUTABLE=$(python -c "import sys; print(sys.executable)") \
-D PYTHON3_EXECUTABLE=$(python -c "import sys; print(sys.executable)") \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python -c "import numpy; print (numpy.get_include())") \
-D PYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D CUDA_ARCH_BIN='7.5' \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_OPENGL=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
-D WITH_CUBLAS=1 \
-D OPENCV_EXTRA_MODULES_PATH=/home/ubuntu/opencv4.2/opencv_contrib-4.2.0/modules \
-D OPENCV_GENERATE_PKGCONFIG=ON \
..
如果这个报错还可以试试这个:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D CUDA_ARCH_BIN='7.5' \
-D WITH_CUDA=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/ubuntu/opencv4.2/opencv_contrib-4.2.0/modules \
-D BUILD_EXAMPLES=ON \
-D HAVE_opencv_python3=ON \
-D ENABLE_FAST_MATH=1 \
-D WITH_CUDNN=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON ..
注意对应你自己的显卡算力 CUDA_ARCH_BIN
对应OPENCV_EXTRA_MODULES_PATH的路径,就是旁边那个文件夹的
cmake完成后记得检查
NVIDIA CUDA 和 CUDNN 是不是yes
如果不是yes就是驱动/CUDA/CUDNN没装好或者版本没对上。
2020-11-25补充:
① 97%左右报一个找不到cuda.hpp的问题,sudo apt-get install libcurl4-openssl-dev 之后清除build里面的所有文件,再跑一次cmake会找不到ippv,重复跑一次就过去了,不知道为什么,然后用了 make -j2 编译成功。
② 中途有一个 /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn.so.7 is not a symbolic link.的错误,cd /usr/local/cuda-10.1/lib64/ 下面,发现有libcudnn.so.7和libcudnn.so.7.6.5 正常情况下应该只有一个libcudnn.so.7.6.5 ,在终端执行 sudo ln -sf /usr/local/cuda-10.1/lib64/libcudnn.so.7.6.5 /usr/local/cuda-10.1/lib64/libcudnn.so.7 重新搭建软连接。即可解决
6.4 make
make
不要用多线程,每次用多线程都会有一些莫名其妙的问题,这个要编译很久,一小时多一点。
6.5 安装
sudo make install
如果make没出问题这一步肯定不会出问题的
6.6 其他
安装完成后执行:
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
7.1 如果上述配置成功,则会在/usr/local/lib/
文件夹中出现一个pkgconfig
文件夹,里面有一个opencv.pc
文件,内容大致如下:
# Package Information for pkg-config
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv4/opencv2
includedir_new=${prefix}/include/opencv4
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.2.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_cvv -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
Libs.private: -lm -lpthread -L/usr/lib/x86_64-linux-gnu -lGL -lGLU -lcudart_static -ldl -lrt -lnppc -lnppial -lnppicc -lnppicom -lnppidei -lnppif -lnppig -lnppim -lnppist -lnppisu -lnppitc -lnpps -lcublas -lcudnn -lcufft -L-L/usr/local/cuda -llib64 -L-L/usr/lib -lx86_64-linux-gnu
Cflags: -I${includedir_old} -I${includedir_new}
如果没有就要自己手写一个,如果已经存在就要在第6行最后加个2
7.2 在bashrc中加入路径
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
记得
source ~/.bashrc
判断路径是否生效:
# 判断路径时候添加成功,返回:/usr/local/lib/pkgconfig即可
echo $PKG_CONFIG_PATH
这个时候安装基本完成了,可以再Python下面import cv2试试看会不会报错,不报错也不代表真的安装成功了
要用这个去试,具体放到下个帖子讲。
net.setPreferableBackend(DNN_BACKEND_CUDA)
net.setPreferableTarget(DNN_TARGET_CUDA)
最后:
ubuntu下的联合编译基本没什么人写,找到的也大都漏洞百出,不是少个.就是多个/,真是太难了。
============================2022.4.13更新==============================
【1】ippv这个压缩包要重命名为:
c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz
要放在 opencv4.2-cuda/opencv4.2/opencv-4.2.0/.cache/ippicv 这个文件夹里面
他找到之后会自动解压
【2】xfeatures2d里面一大堆东西 让他自己下载吧 我下好了改名放进去也没用 贼傻逼 如果能想办法用手机流量热点的话 可能会快一点
【3】保持各个版本一致,上面的opencv源代码的版本为4.2.0(注意没有第四位版本号),那么opencv-contrib也要保持4.2.0,这两个部分你可以理解为后端的安装,前端(python环境里面)还是要pip install opencv-python==4.2.0.32(注意这个部分要保持一致的版本,但是第四位版本号我选择的32,其他版本没试过)