如果你也像我一样没有服务器root权限,想在anaconda上配置openpose python API或caffe的话,希望你看到这篇文章,可以帮助你解决你的问题。
首先先说下openpose
下载源码https://github.com/CMU-Perceptual-Computing-Lab/openpose
conda activate yourenv
cd ./openpose
mkdir build
cd build
cmake前需要配置下,这里特别注意,建议在执行前看下自己的默认的配置,代码会自动找目前默认的python,opencv,protoc等。
opencv这里如果opencv系统和conda环境都有装,代码会默认选系统的opencv(即apt-get安装的)。
python会默认选择anaconda/py36/bin下的python,而不是yourenv下的python。这里后面会修改配置来解决。
protoc会默认找yourenv下的protoc,可以which protoc 查看,如果你的conda没有办法用清华源下载的安装 protobuf的话,这里可以参照https://blog.csdn.net/u013249853/article/details/79827491(我们的局域网就用不了,如果不用清华的下载源的话,conda装的不全,编译caffe会失败,会报错),可以在自己的目录下下载安装protoc,即非root的安装protobuf。这里参考这篇博客https://blog.csdn.net/Gransand/article/details/87777597
如果你已经配好了外部的protoc,直接卸载conda的protobuf和libprotobuf,
conda remove protobuf libprotobuf
执行
which protoc
看是否是你要用的protoc。
这里因为我们服务器已经装了protoc,我的路径是/usr/local/protoc
以上三大软件安装没有问题后,可以cmake编译openpose了
接下来执行:
cmake -DBUILD_PYTHON=ON ..
这种方式是你没有caffe,会自动下载caffe并和后面一起配置安装。
如果你想用你自己配好的caffe来编译openpose的话,需要修改以下命令执行:
cmake -DBUILD_PYTHON=ON -DCaffe_INCLUDE_DIRS=/home/"${USER}"/softwares/caffe/build/install/include \
-DCaffe_LIBS=/home/"${USER}"/softwares/caffe/build/install/lib/libcaffe.so -DBUILD_CAFFE=OFF
..
如果你的opencv不是apt装的,是源码包装的放在某个位置,那么就需要改以下命令执行:
cmake -DBUILD_PYTHON=ON .. -DOpenCV_INCLUDE_DIRS=/home/"${USER}"/softwares/opencv/build/install/include \
-DOpenCV_LIBS_DIR=/home/"${USER}"/softwares/opencv/build/install/lib ..
紧接着改下CMakeCache.txt文件,这个文件下会有所有用到的依赖包的位置,建议这个文件逐条检查是否是符合你的配置需求。
这里我主要是修改了一些配置,修改后:
PYTHON_EXECUTABLE:FILEPATH=/home/tanggy/anaconda3/envs/yourenv/bin/python3.6
PYTHON_LIBRARY:FILEPATH=/home/tanggy/anaconda3/envs/yourenv/lib/libpython3.6m.so
FIND_PACKAGE_MESSAGE_DETAILS_PYTHON:INTERNAL=/home/tanggy/anaconda3/envs/yourenv/bin/python3.6
FIND_PACKAGE_MESSAGE_DETAILS_PythonInterp:INTERNAL=[/home/tanggy/anaconda3/envs/yourenv/bin/python3.6][v3.6.2()]
PYTHON_INCLUDE_DIRS:INTERNAL=/home/tanggy/anaconda3/envs/yourenv/include/python3.6m
PYTHON_LIBRARIES:INTERNAL=/home/tanggy/anaconda3/envs/yourenv/lib/libpython3.6m.so
PYTHON_MODULE_EXTENSION:INTERNAL=.cpython-36m-x86_64-linux-gnu.so
这里我只改了python的相关配置,大家也要特别注意关于protoc和opencv的配置,修改成你需要调用的软件的位置,建议逐行检查。
编译:
make -j20
编译通过后测试下:
cd ./examples/tutorial_api_python
python 01_body_from_image.py
看是否能运行成功。
如果出现找不到pyopenpose错误,是因为cmake时候没有输入参数-DBUILD_PYTHON=ON。如果cv2没找到,是opencv没有配置对,建议确定前面CMakeCache.txt文件关于opencv配置是否正确。
以上是openpose python API的安装配置过程。
==========================下面为anaconda的caffe 配置==============================
首先进入conda环境:
conda activate yourenv
进入caffe目录并修改Makefile.config问下如下:
ANACONDA_HOME := $(HOME)/anaconda3/envs/yourenv
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.6m \
$(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include
PYTHON_LIBRARIES := boost_python3 python3.6m
PYTHON_LIB := $(ANACONDA_HOME)/lib
修改后:
make all -j20
make test -j20
make runtest -j20
make pycaffe
如果编译过程,protobuf出现问题,则参照前面的protoc的安装(可以用清华源conda安装或者是源码安装,再或者系统上有的话,可以卸载conda的protobuf和libprotobuf,会默认用系统的)。
另外如果还是报protobuf还是报错,可以尝试如下:
Makefile文件中:
protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
修改为:
/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
即将protoc修改成你的protoc安装路径。