windows编译openpose及在python中调用

本文详细介绍了在Windows 10环境下,如何编译OpenPose 1.7.0,包括CUDA、CUDNN、Visual Studio和CMake的安装,以及OpenPose的源码下载、编译过程。在编译过程中遇到的错误,如调用非法函数的问题,通过修改源代码得以解决。此外,还展示了如何配置Python环境,运行OpenPose的示例代码,并解析了OpenPose输出的关键点信息。
摘要由CSDN通过智能技术生成

环境

  • windows 10 64bit

  • openpose 1.7.0

  • cuda 11.1

  • cudnn 8.0.5.39

  • visual studio 2019

  • cmake 3.20.2

基础环境安装

cudacudnn的部分,这个前面讲过了,不会的话,看这篇

windows 10安装CUDA和cuDNN

由于需要使用到cmake-gui,因此还需要去下载安装cmake,地址: https://cmake.org/download/,安装文件拉下来傻瓜式安装,将安装路径加入系统环境变量Path

openpose windows

编译openpose

这里使用的源码是1.7.0版本,地址是:https://github.com/CMU-Perceptual-Computing-Lab/openpose/archive/refs/tags/v1.7.0.zip,下载后解压,在源码根目录新建个文件夹build,这个文件夹是用来存放编译生成的文件的。另外,openpose还依赖caffepybind11(这是为了能在python中去调用openposeapi)

caffe

pybind11

下载zip后解压,分别存放在3rdparty\caffe3rdparty\pybind11

openpose windows

openpose windows

打开cmake-gui,填写源码位置和编译后产生的文件的位置,也就是上面刚创建的build目录

openpose windows

接下来点击下方的Configure

openpose windows

openpose windows

这个步骤,会去下载几个主要的依赖,包括opencvcaffecaffe3rdparty,还有工程中需要用到的模型文件。

openpose windows

这里经常会碰到网络问题而导致某些文件下载失败,从而导致Configure失败。

openpose windows

如果cmake-gui一直不成功,可以逐个去下载所需要的软件包。

模型文件可以通过双击执行models\getModels.bat脚本进行下载

openpose windows

而依赖的caffeopencv则可以进入到文件夹3rdparty/windows,依次执行几个bat脚本文件下载

openpose windows

接下来,就可以点击Generate生成visual studio的解决方案了

如果出现下面类似的错误,就是因为之前的几个依赖,没有下载好导致的,最简单的方法就去看看下载下来的几个zip包大小是否正常

openpose windows

目前1.7.0依赖于caffecaffe3rdpartyfreeglutopencvspinnaker这5个包,自行下载后解压,注意解压后文件夹的名称和文件目录结构,如下图

openpose windows

openpose windows

接下来就可以继续点击Generate

openpose windows

成功之后,点击Open Project进入visual studio

openpose windows

右键点击解决方案中的OpenPoseDemo,选择 生成,开始编译

openpose windows

结果报错了

openpose windows

看错误提示

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.huopenpose-1.7.0\src\openpose\net\resizeAndMergeBase.cu

修改完成后再次编译,就可以成功了

openpose windows

demo测试

右击解决方案中的OpenPoseDemo,选择设为启动项目

openpose windows

点击visual studio中的本地windows调试器,运行程序,由于接着usb摄像头,openpose打开了摄像头进行预测

openpose windows

如果想使用某个视频文件来跑跑OpenPoseDemo,可以在visual studio中增加命令行参数,方法是右键打开解决方案中的OpenPoseDemo,选择属性

openpose windows

选择调试,然后在命令行参数处添加

--video F:\dl\openpose-1.7.0\examples\media\video.avi

openpose windows

最后重新运行

openpose windows

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

使用facehand模型,这里以图片预测为例,视频也一样。需要更多的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'编译选项

openpose windows

重新ConfigureGenerate,在打开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 windows

openpose输出的关键点信息如下图,总共有25个关节点

openpose windows

序列对应的关节名称如下

{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/

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷途小书童的Note

请博主喝矿泉书!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值