环境
windows 10 64bit
openpose 1.7.0
cuda 11.1
cudnn 8.0.5.39
visual studio 2019
cmake 3.20.2
基础环境安装
cuda
和cudnn
的部分,这个前面讲过了,不会的话,看这篇
windows 10安装CUDA和cuDNN
由于需要使用到cmake-gui
,因此还需要去下载安装cmake
,地址: https://cmake.org/download/,安装文件拉下来傻瓜式安装,将安装路径加入系统环境变量Path
中
编译openpose
这里使用的源码是1.7.0版本,地址是:https://github.com/CMU-Perceptual-Computing-Lab/openpose/archive/refs/tags/v1.7.0.zip,下载后解压,在源码根目录新建个文件夹build
,这个文件夹是用来存放编译生成的文件的。另外,openpose
还依赖caffe
和pybind11
(这是为了能在python
中去调用openpose
的api
)
caffe
pybind11
下载zip
后解压,分别存放在3rdparty\caffe
和3rdparty\pybind11
打开cmake-gui
,填写源码位置和编译后产生的文件的位置,也就是上面刚创建的build
目录
接下来点击下方的Configure
这个步骤,会去下载几个主要的依赖,包括opencv
、caffe
、caffe3rdparty
,还有工程中需要用到的模型文件。
这里经常会碰到网络问题而导致某些文件下载失败,从而导致Configure
失败。
如果cmake-gui
一直不成功,可以逐个去下载所需要的软件包。
模型文件可以通过双击执行models\getModels.bat
脚本进行下载
而依赖的caffe
和opencv
则可以进入到文件夹3rdparty/windows
,依次执行几个bat
脚本文件下载
接下来,就可以点击Generate
生成visual studio
的解决方案了
如果出现下面类似的错误,就是因为之前的几个依赖,没有下载好导致的,最简单的方法就去看看下载下来的几个zip
包大小是否正常
目前1.7.0依赖于caffe
、caffe3rdparty
、freeglut
、opencv
和spinnaker
这5个包,自行下载后解压,注意解压后文件夹的名称和文件目录结构,如下图
接下来就可以继续点击Generate
成功之后,点击Open Project
进入visual studio
右键点击解决方案中的OpenPoseDemo
,选择 生成,开始编译
结果报错了
看错误提示
calling a __host__ function("__floorf") from a __global__ function("op::resize8TimesKernel<float> ") is not allowed openpose F:\dl\openpose-1.7.0\src\openpose\net\resizeAndMergeBase.cu 142
为解决这个问题,需要修改相应报错的源文件,将floor
改为floorf
,包括openpose-1.7.0\include\openpose_private\gpu\cuda.hu
和openpose-1.7.0\src\openpose\net\resizeAndMergeBase.cu
修改完成后再次编译,就可以成功了
demo测试
右击解决方案中的OpenPoseDemo
,选择设为启动项目
点击visual studio
中的本地windows
调试器,运行程序,由于接着usb
摄像头,openpose
打开了摄像头进行预测
如果想使用某个视频文件来跑跑OpenPoseDemo
,可以在visual studio
中增加命令行参数,方法是右键打开解决方案中的OpenPoseDemo
,选择属性
选择调试,然后在命令行参数处添加
--video F:\dl\openpose-1.7.0\examples\media\video.avi
最后重新运行
openposedemo常用参数
预测视频
OpenPoseDemo.exe --video examples\media\video.avi
如果想讲预测后的视频保存下来,可以将预测结果保存成图片
OpenPoseDemo.exe --video examples\media\video.avi --write_images examples\media\images
预测图片,将图片文件放在文件夹中
OpenPoseDemo.exe --image_dir examples\media
使用face
、hand
模型,这里以图片预测为例,视频也一样。需要更多的gpu memory
OpenPoseDemo.exe --image_dir examples\media --face --hand
保存关键点信息,json
格式
OpenPoseDemo.exe --video examples\media\video.avi --write_json examples\media\
在python中调用
在cmake-gui
中勾选BUILD_PYTHON
和'BUILD_UNITY_SUPPORT'编译选项
重新Configure
和Generate
,在打开visual studio
后,选中pyopenpose
,启动生成。待代码编译完成后,会在build\x64\Debug
下生成openposed.dll
文件,在build\python\openpose\Debug
下生成pyopenpose.cp38-win_amd64.pyd
文件,这2个文件非常重要,后面在执行python
示例代码时会用到。
接下来进入到python
的示例代码目录,这里跑一下01_body_from_image.py
,运行之前,需要做一点点修改,主要是4个路径的修改
if platform == "win32":
# Change these variables to point to the correct folder (Release/x64 etc.)
# 第一处
sys.path.append(dir_path + '/../../build/python/openpose/Debug');
# sys.path.append(dir_path + '/../../python/openpose/Release');
# os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;'
# 第二处
os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../build/x64/Debug;' + dir_path + '/../../build/bin;'
import pyopenpose as op
# 测试图片的路径和模型文件夹的路径也都要改一下
parser = argparse.ArgumentParser()
# 第三处
parser.add_argument("--image_path", default="../../examples/media/COCO_val2014_000000000192.jpg", help="Process an image. Read all standard formats (jpg, png, bmp, etc.).")
args = parser.parse_known_args()
# Custom Params (refer to include/openpose/flags.hpp for more parameters)
params = dict()
# 第四处
params["model_folder"] = "../../models/"
然后执行
python 01_body_from_image.py
openpose
输出的关键点信息如下图,总共有25个关节点
序列对应的关节名称如下
{0, "Nose"},
{1, "Neck"},
{2, "RShoulder"},
{3, "RElbow"},
{4, "RWrist"},
{5, "LShoulder"},
{6, "LElbow"},
{7, "LWrist"},
{8, "MidHip"},
{9, "RHip"},
{10, "RKnee"},
{11, "RAnkle"},
{12, "LHip"},
{13, "LKnee"},
{14, "LAnkle"},
{15, "REye"},
{16, "LEye"},
{17, "REar"},
{18, "LEar"},
{19, "LBigToe"},
{20, "LSmallToe"},
{21, "LHeel"},
{22, "RBigToe"},
{23, "RSmallToe"},
{24, "RHeel"},
{25, "Background"}
资源下载
已经将1.7.0所需的所有文件都打包了,需要的话自行下载
链接:https://pan.baidu.com/s/1RBeuuZVTnn13iDSeFLttVA
提取码:ncvb
参考资料
https://github.com/CMU-Perceptual-Computing-Lab/openpose
https://xugaoxiang.com/2020/10/26/openpose-build/