Ubuntu18.04编译MonocularTotalCapture

本文是cmu开源项目MonocularTotalCapture在ubuntu上的编译过程,把一些比较大的坑记录好说不定哪天得再编译一遍。环境是Ubuntu 18.04,gtx1060,显卡驱动4.10。cuda和cudnn版本因为在配置openpose和MonocularTotalCapture,我装了两个版本,留在下面再说。

Dependencies

  1. ffmpeg
  2. Python 3.5 (with TensorFlow 1.5.0, OpenCV, Matplotlib, packages installed with pip3)
  3. cmake >= 2.8
  4. OpenCV 2.4.13 (compiled from source with CUDA 9.0, CUDNN 7.0)
  5. Ceres-Solver 1.13.0 (with SuiteSparse)
  6. OpenGL, GLUT, GLEW
  7. libigl
  8. wget
  9. openPose

配置过程中遇到问题较多的是配置Opencv 2.4.13+CUDA 9.0+CUDNN对应版本,以及配置openpose。CUDNN不一定要7.0版本,与CUDA9.0适配即可。在ubuntu18.04配置openpose需要安装cuda10以及对应版本,我装的是cuda10.0。

首先说明其他问题不是很大的依赖项:

  1. ffmpeg下载最新版压缩包解压编译即可。
  2. 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版本对应关系
  3. 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?

参考:

Linking GLEW with CMake

updatedupdated2019-12-282019-12-28