本文是cmu开源项目MonocularTotalCapture在ubuntu上的编译过程,把一些比较大的坑记录好说不定哪天得再编译一遍。环境是Ubuntu 18.04,gtx1060,显卡驱动4.10。cuda和cudnn版本因为在配置openpose和MonocularTotalCapture,我装了两个版本,留在下面再说。
Dependencies
- ffmpeg
- Python 3.5 (with TensorFlow 1.5.0, OpenCV, Matplotlib, packages installed with pip3)
- cmake >= 2.8
- OpenCV 2.4.13 (compiled from source with CUDA 9.0, CUDNN 7.0)
- Ceres-Solver 1.13.0 (with SuiteSparse)
- OpenGL, GLUT, GLEW
- libigl
- wget
- openPose
配置过程中遇到问题较多的是配置Opencv 2.4.13+CUDA 9.0+CUDNN对应版本,以及配置openpose。CUDNN不一定要7.0版本,与CUDA9.0适配即可。在ubuntu18.04配置openpose需要安装cuda10以及对应版本,我装的是cuda10.0。
首先说明其他问题不是很大的依赖项:
- ffmpeg下载最新版压缩包解压编译即可。
- Python 3.5 (with TensorFlow 1.5.0, OpenCV, Matplotlib, packages installed with pip3):如果你常用的python版本不是3.5,建议创建一个conda 环境,然后安装TensorFlow 1.5.0和对应依赖项,我装的是不带gpu版本。tensorflow各版本与cuda,cudnn的对应关系看:tensorflow各个版本的CUDA以及Cudnn版本对应关系
- cmake,Ceres-Solver 1.13.0 (with SuiteSparse),OpenGL, GLUT,wget都可以通过apt直接装,GLEW到官网下载压缩包编译即可,libigl可以
git clone
github上的源码安装。
编译openpose
主要参考文章: openpose环境搭建
ubuntu18.04+caffe+cuda10.1 + openpose工作环境搭建-2019-07-03
由于我是在Ubuntu18.04安装openpose,需要安装cuda10.0和对应cudnn版本,安装cuda10.0和对应cudnn版本的有关文章网上很多,我这里就不写了。完整的安装过程看openPose的安装文档。
关于依赖项Prerequisites
重要!如果已经安装了Anaconda,要卸载anaconda里面的Protobuf ,不然后面会报错。
关于Custom Caffe
openpose配置文档建议用cmu自家的caffe,但我配置的时候出错了。貌似是Protobuf的版本问题我一直不能解决。上面的文章建议安装官方的caffe,但我最后发现最新版的caffe修改了一些网络层,导致caffe的预训练不能用了。所以我安装的是:caffe f019。
其他没有什么很大的问题了。
编译Opencv 2.4.13+CUDA 9.0+CUDNN对应版本
参考文章:
[ubuntu16.04 在cuda9.0环境下编译安装opencv2.4.13.7](https://blog.csdn.net/zhuangwu116/article/details/81136117)
ubuntu16.04+CUDA8.0+GTX1050Ti+caffe(GPU)的opencv2.4.10+CUDA环境配置
按照上面文章修改opencv的一部分配置文件来适配cuda9.0,没错,这里需要装一个cuda9.0和对应cudnn版本。
编译错误记录
首先看这篇文章,里面有一些常见的坑: 编译cuda版opencv遇到的坑
我的gpu是gtx1060,GPU arch/PTX archs都要设置为6.1,不然后面运行代码会报错。
其他错误:
modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:230: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/src/cap_ffmpeg.cpp.o' failed
参考: Error in building opencv with ffmpeg
relocation R_ARM_MOVW_ABS_NC against a local symbol' can not be used when making a shared object; recompile with -fPIC
参考: opencv交叉编译错误处理
[ 50%] Linking CXX executable extract_cpu
/usr/bin/ld: cannot find -lopencv_dep_nppial
/usr/bin/ld: cannot find -lopencv_dep_nppicc
/usr/bin/ld: cannot find -lopencv_dep_nppicom
/usr/bin/ld: cannot find -lopencv_dep_nppidei
/usr/bin/ld: cannot find -lopencv_dep_nppif
/usr/bin/ld: cannot find -lopencv_dep_nppig
/usr/bin/ld: cannot find -lopencv_dep_nppim
/usr/bin/ld: cannot find -lopencv_dep_nppist
/usr/bin/ld: cannot find -lopencv_dep_nppisu
/usr/bin/ld: cannot find -lopencv_dep_nppitc
collect2: error: ld returned 1 exit status
CMakeFiles/extract_cpu.dir/build.make:121: recipe for target 'extract_cpu' failed
make[2]: *** [extract_cpu] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/extract_cpu.dir/all' failed
make[1]: *** [CMakeFiles/extract_cpu.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
参考: cannot find nppi series when building dense_flow with opencv2.4.13
How can you link GLEW to a project with CMake?
参考: