OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人,具有极好的鲁棒性。是世界上首个基于深度学习的实时多人二维姿态估计应用,基于它的实例如雨后春笋般涌现。人体姿态估计技术在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,人们更加熟悉的应用就是抖音尬舞机。
1.首先下载openpose开源软件包
git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
2.进入openpose目录,并执行sh文件进行安装
cd openpose
bash scripts/osx/install_brew.sh
3.配置Cmake GUI
brew install --cask cmake
我这里已经安装好了,所以出现了一个error。
4.部署Caffe,OpenCV等组件
brew install --cask cmake
5.下载Cmake,并安装,并在openpose文件夹下新建build目录。
Cmake的使用如下图所示:
6.替换caffe文件夹
git clone https://github.com/CMU-Perceptual-Computing-Lab/caffe
替换目录:
/openpose/3rdparty
7.下载对应的模型,放在/models文件夹中。
cd models
bash getModels.sh
8.进入build目录,执行命令
make -j`sysctl -n hw.logicalcpu`
但是很可惜,会报错。因此,我们需要解决报错的问题。
报错信息1:
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find vecLib (missing: vecLib_INCLUDE_DIR)
Call Stack (most recent call first):
/Applications/CMake.app/Contents/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
cmake/Modules/FindvecLib.cmake:24 (find_package_handle_standard_args)
cmake/Dependencies.cmake:135 (find_package)
CMakeLists.txt:49 (include)
解决方案:
1.查找vecLib.h
命令:
find / -name vecLib.h |grep Accelerate.framework
我这里使用的文件是:
/Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/Headers/vecLib.h
解决方法:
打开build/caffe/src/openpose_lib-build/CMakeCache.txt文件,找到vecLib_INCLUDE_DIR:PATH=vecLib_INCLUDE_DIR-NOTFOUND一行,从本机搜索找到vecLib.h文件后将其路径覆盖掉vecLib_INCLUDE_DIR-NOTFOUND。
报错信息2:
too many arguments to function call, expected single argument ‘total_bytes_limit’, have 2 arguments
coded_input->SetTotalBytesLimit(kProtoReadBytesLimit, 536870912);
/opt/homebrew/include/google/protobuf/io/coded_stream.h:384:8: note: ‘SetTotalBytesLimit’ declared here
void SetTotalBytesLimit(int total_bytes_limit);
很明显,参数多了,函数void SetTotalBytesLimit(int total_bytes_limit);多了一个参数,需要把第二个参数注释掉,进入出错代码:
vim /openpose/3rdparty/caffe/src/caffe/util/io.cpp
找到对应的行,改掉函数
报错信息3:
#include <cblas.h>
^~~~~~~~~
In file included from /Users/wanghaitao/Desktop/content/openpose/src/openpose/net/netCaffe.cpp:6:
In file included from /Users/wanghaitao/Desktop/content/openpose/build/caffe/include/caffe/net.hpp:12:
In file included from /Users/wanghaitao/Desktop/content/openpose/build/caffe/include/caffe/layer.hpp:12:
In file included from /Users/wanghaitao/Desktop/content/openpose/build/caffe/include/caffe/util/math_functions.hpp:11:
/Users/wanghaitao/Desktop/content/openpose/build/caffe/include/caffe/util/mkl_alternate.hpp:14:10: fatal error: ‘cblas.h’ file not found
#include <cblas.h>
找不到cblas.h的文件
操作方法也是和vecLib.h的一样,通过find / -name cblas.h来寻找我们的目标文件,
cp -p /Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/Headers/cblas.h ./openpose/build/caffe/include/caffe/util/
我这里将我查找到的cblas.h的文件复制到了调用该文件的cpp目录下。
同时将报错文件中的cblas.h的中括号改为双引号。
修改后重新运行
make -j`sysctl -n hw.logicalcpu`
成功编译openpose。