编译opencv cuda 版本
因为要测试人脸识别算法,于是需要安装opencv的cuda的版本
本次编译机器环境 (Intel® Core™ i7-6700K CPU @ 4.00GHz × 8 GeForce GTX 1060 6GB/PCIe/SSE2)
系统环境: ubuntu 18.04
gcc 6.0
g++ 6.0
cuda 10.0
nvcc 10.0
编译前安装
# 安装编译工具
sudo apt-get install build-essential
# 安装依赖包
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
# 安装可选包
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
1. 下载opencv和opencv_contrib代码
2. 将opencv_contrib源码放到opencv文件夹
3. cd opencv
4. mkdir build
5. cd build
6. cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=~/Software/OpenCV \
-D WITH_CUDA=ON \
-D CUDA_GENERATION=Pascal \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_CUDNN=ON \
-D WITH_OPENCL=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
8. make -j8
9. make install
注:
- opencv和opencv_contrib下载链接
- 安装目录并不是大多数的/usr/local/ 而是安装在我的个人文件夹
- 其中WITH_CUDA=ON是一个编译cuda模块的开关
cmake之后会有这样的显示,显示有那些模块将会被编译
-- OpenCV modules:
-- To be built: aruco bgsegm bioinspired calib3d ccalib core
cudaarithm cudabgsegm cudacodec cudafeatures2d
cudafilters cudaimgproc cudalegacy cudaobjdetect
cudaoptflow cudastereo cudawarping cudev
datasets dnn dnn_objdetect dnn_superres dpm face
features2d flann freetype fuzzy gapi hdf hfs
highgui img_hash imgcodecs imgproc line_descriptor
ml objdetect optflow phase_unwrapping photo plot
python2 python3 quality reg rgbd saliency sfm shape
stereo stitching structured_light superres
surface_matching text tracking ts video videoio
videostab xfeatures2d ximgproc xobjdetect xphoto
-- Disabled: world
-- Disabled by dependency: -
-- Unavailable: cnn_3dobj cvv java js matlab ovis viz xfeatures2d
-- Applications: tests perf_tests examples apps
-- Documentation: NO
-- Non-free algorithms: NO
安装过程出现的问题
问题一:
cc: error trying to exec 'cc1plus': execvp: No such file or directory
CMake Error at cuda_compile_1_generated_gpu_mat.cu.o.Release.cmake:219 (message):
Error generating
/home/z/Software/opencv_412/build/modules/core/CMakeFiles/cuda_compile_1.dir/src
/cuda/./cuda_compile_1_generated_gpu_mat.cu.o
modules/core/CMakeFiles/opencv_core.dir/build.make:63: recipe for target 'modules/
core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o'
failed make[2]: *** [modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda
/cuda_compile_1_generated_gpu_mat.cu.o] Error 1
原因: 因为gcc 和g++版本不一致, 将gcc 和个g++ 切换为一致版本, 并且建议使用较低版本的gcc 和g++ 否则可能会报错,而ubuntu18.04自带两个版本的gcc和g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 70
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 70
update-alternatives 是用于管理gcc 和g++ 版本的工具, 通过查看
ls /usr/bin | grep gcc
ls /usr/bin | grep g++
可以发现gcc g++ 其实只是一个只是一个软连接, 链接到别处,通过update-alternatives 中间工具指向真正的gcc和g++ 在让/usr/bin/gcc /usr/bin/g++指向这个工具,就可以在不同版本之间切换
问题二
ERROR: Fermi, Kepler, Maxwell, Pascal, Volta, Turing, Auto Generations are
suppered.
原因: 需要添加cuda的显卡的架构
-D CUDA_GENERATION=Pascal
具体的:参考一下网站
linux平台编译cuda版本opencv 维基百科的CUDA, 重点关注那个表格
Build OpenCV with CUDA support
问题三
fatal error: features2d/test/test_detectors_regression.impl.hpp:
No such file or directory
解决方法:
将/opencv_412/opencv/modules/features2d/test/test_descriptors_regression.impl.hpp
拷贝到 /home/z/Software/opencv_412/opencv/opencv_contrib/modules/xfeatures2d/test
问题四
boostdesc_bgm.i: No such file or directory
- 参考编译OpenCV以及openc_contrib提示缺少boostdesc_bgm.i文件出错的解决
- 采用的是源码编译的方式,所以可以查看 build 文件夹下的日志文件 CMakeDownloadLog.txt,在日志文件CMakeDownloadLog.txt中搜索 boostdesc_bgm.i 关键词 (不是在文件夹中搜索),
发现这个文件下载失败了。日志文件里就有它的下载地址,直接复制其下载地址到网页可以看该到文件的源码,直接拷贝源码并生存同名文件,放在 opencv_contrib/modules/xfeatures2d/src/ 路径下即可
总的来说,编译opencv前前后后话了一天的时间,中间因为一些问题一时间搜不到答案,于是暂停了.
中间出现过一个错误,cuda的版本是cuda10.0 但是系统环境下指向的是nvcc9.1的cuda编译器
,导致出现莫名其妙的错误,知道我使用cuda程序的时候,发现nvcc版本于cuda版本不匹配,才解决这个问题,因此编译opecv最终才得以成功, 但是当你成功编译opencv的时候,能了解到的东西就值了!