欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

windows编译openpose及在python中调用

算法 迷途小书童 3年前 (2021-05-29) 17269次浏览 15个评论

环境

  • windows 10 64bit
  • openpose 1.7.0
  • cuda 11.1
  • cudnn 8.0.5.39
  • visual studio 2019
  • cmake 3.20.2

视频看这里

YouTube

Bilibili

基础环境安装

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_PYTHONBUILD_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"}

常见问题

out of memory

如果是使用显存较小的显卡,比如 1050Ti,它只有4G的显存,在正常跑视频测试的时候就会报错

Check failed: error == cudaSuccess (2 vs. 0) out of memory.

据项目作者所说,要运行 openpose,至少需要 4G 。默认情况,caffe 会占用大约 12G,如果使用 cudnn 的话,就能降低至 2.2G,这个是针对人体25个关键点检测而言的,如果是 COCO 的话,大概是 1.5G

碰到上述问题,可以通过减小网络大小来解决,使用参数 --net_resolution,如

OpenPoseDemo.exe --video examples\media\video.avi --net_resolution 320x320

需要说明一点的是,网络小了,速度变快了,但是准确率就会降低

cudaSuccess (3 vs. 0)

Check failed: error == cudaSuccess (3 vs. 0) initialization error *** Check failure stack trace: **

这个一般是 nvidia 的驱动版本低了,直接使用 Geforce Experience 进行版本更新,这里我碰到过更新报错的情况,也不清楚是怎么回事,就是安装不上,这时可以到 nvidia 的官网去下载 exe 文件进行版本更新

资源下载

已经将1.7.0所需的所有文件都打包了,需要的话自行下载

链接:https://pan.quark.cn/s/0e063caf7cb7

参考资料

喜欢 (3)

您必须 登录 才能发表评论!

(15)个小伙伴在吐槽
  1. 你好,VS2019中,无法打开前摄像头识别是为什么?点调试之后弹出的框一直是空白
    ZQ2023-10-05 21:27
  2. 上一個問題已經找到了,只是我不知道怎麼刪留言,謝謝。 目前遇到的問題是按下BUILD_PYTHON之後的configure,cmake會直接跳出,閃退。
    Jeff Sung2023-08-27 22:27
    • 迷途小书童
      需要提供具体错误信息,不然不清楚问题所在。建议: 1. 先不勾选 BUILD_PYTHON,然后configure操作 2. PYTHON环境是否OK?
  3. 請問可以提供3rdparty\windows中的五個檔案嗎? 或是提供下載網址? 因為我載了之後cmake還是有報錯誤
    Jeff Sung2023-08-27 21:22
  4. 想问一下在matlab 上调用openpose可行吗,如果可以大概要这么操作啊?
    匿名2022-03-04 19:18
  5. 博主你好,我在一开始点击configure的时候就报错CMake Error: The source directory "C:\openpose" does not appear to contain CMakeLists.txt.请问这个CMakeList.txt应该怎么生成呢
    匿名2022-02-06 12:47
  6. Error:Cuda check failed (35 vs. 0): CUDA driver version is insufficient for CUDA runtime version 博主你好,请问这个问题要怎么解决呢
    匿名2021-11-07 14:56
  7. Error: OpenPose library could not be found. Did you enable `BUILD_PYTHON` in CMake and have this Python script in the right folder? No module named 'pyopenpose' 博主,我按照你的教程已经改了地址,但是它依旧会报错,这是为什么呢,您分享的文件我也使用了,但还是有相同的问题
    匿名2021-09-14 17:28
  8. G:\anaconda\python.exe: can't open file '.\01_body_from_image': [Errno 2] No such file or directory 博主你好,请问这个报错应该怎么修复呢
    匿名2021-09-10 16:30