系统:Ubuntu14.04
显卡:NVIDIA950M
cuda:8.0
cudnn:5.1
opencv:3.4
配置openpose的过程相对于之前手动安装NVIDIA375.26以至于重装无数次系统的经历来说,相对而言要简单一些.
一般配置过程,在你的cuda,NVIDIA和opencv配置好的前提下,先进入models文件夹下getModels,再进入我们的/3rdparty/caffe将符合你系统配置的(例)“Makefile.config.Ubuntu14_cuda8.example”重命名为“Makefile.config”,然后双击进入gedit修改参数,前面我们已经配置好opencv,所以只需要将“#OPENCV_VERSION := 3”前面的“#”号去掉然后保存(如果需要其他接口可根据需要修改),之后在我们的caffe文件夹下执行“make all -j8 && make distribute -j8”,在“j”后面的数字是由你CPU的核心数来决定的,如果是4核的话则都修改为“-j4”,执行,就进行openpose自带caffe的编译环节,会等待一段时间。
编译过程中提示:
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning)
只是warning不是error,可以不用管它,不碍事。
编译过程提示:
/usr/bin/ld: warning: libopencv_core.so.3.4, needed by //usr/local/lib/x86_64-linux-gnu/libopencv_imgcodecs.so, may conflict with libopencv_core.so.2.4
/usr/bin/ld: .build_release/examples/cpp_classification/classification.o: undefined reference to symbol '_ZN2cv6String10deallocateEv'
//usr/local/lib/x86_64-linux-gnu/libopencv_core.so.3.4: error adding symbols: DSO missing from command line
刚开始以为是我opencv版本太高,以为需要降级,于是又卸载掉opencv3.4,折腾了好久,配置3.0或3.2的过程又出现许许多多的bug,后来还是只得装回opencv3.4,再研究研究这个问题了。结果是opencv多版本共存导致的问题,所以执行下列语句即可解决问题,重新对caffe执行make clean然后重新编译即可。
sudo apt-get autoremove libopencv-dev
最后自带的caffe编译好之后,回到我们的openpose-master文件夹下面,先从ubuntu里面复制出符合你系统配置的“Makefile.config.Ubuntu14_cuda8.example”更名为“Makefile.config”放到openpose-master文件夹下面,和之前编译caffe前做的操作一样,进入gedit编辑参数,和之前一样去掉“#OPENCV_VERSION := 3”前面的“#”号就行了,然后执行“make all -j8”,等待编译完成。
编译完成之后运行我们的样例:
./build/examples/openpose/openpose.bin --video examples/media/video.avi
结果提示:
./build/examples/openpose/openpose.bin: error while loading shared libraries: libopencv_core.so.3.4: cannot open shared object file: No such file or directory
是共享链接库出现了问题,所以就搜索libopencv_core.so.3.4,我最后是在/usr/local/lib/x86_64-linux-gnu下面找到的,所以要把这个路径添加到系统进去。可以根据你这个库的名字新建一个。
sudo gedit /etc/ld.so.conf.d/libopencv_core.conf
我这里是libopencv_core.conf,你可以改为对应你的xxx.conf。然后把我们找到的libopencv_core.so.3.4的路径以及它的上一个路径添加进去,我是这样子添加的:
/usr/local/lib/
/usr/local/lib/x86_64-linux-gnu/
然后执行 sudo ldconfig -v 有输出东西就行了,接下来再回到我们的openpose的样例,发现可以了,没有刚才那问题。
但遇到提示:“已放弃 (核心已转储)”,赋予运行的root权限即可。
如果有显存不足的情况,会提示:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
使用:
./build/examples/openpose/openpose.bin --help
可以得到openpose的接口调用,可以直接使用。
例如:执行:
sudo ./build/examples/openpose/openpose.bin --image_dir demo/ --write_images result
是调用openpose.bin将在openpose-master下面,demo里面的图片提取骨架信息,并保存到openpose-master下面的result文件夹中。
[外链图片转存失败(img-ty7C69Ma-1564126952447)(http://p.qlogo.cn/qqmail_head/I4Dy9s9xbBgB5VibkE50Y61PyqUFVlMGmibQsCGfLtEz9YpUgUNdI8Wc15LPNUqytWHjMUVIibYLWI/0)]
[外链图片转存失败(img-2UI3fYo4-1564126952448)(http://p.qlogo.cn/qqmail_head/I4Dy9s9xbBgB5VibkE50Y61PyqUFVlMGmibQsCGfLtEzicd4ic5OAXnPDm6hibOlvdUVqnicztz4dzm7Q/0)]