4

OpenPose 编译指引(含 python 接口)

 2 years ago
source link: https://exp-blog.com/deeplearn/openpose-bian-yi-zhi-yin/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
OpenPose 编译指引(含 python 接口)

OpenPose 人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以 Caffe 为框架开发的开源库。

可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人,具有极好的鲁棒性。是世界上首个基于深度学习的实时多人二维姿态估计应用。

官方 Release 版是没有 python 接口的(但是有 python 样例),所以其他程序要调用 openpose 接口就必须自己编译。

pose_face_hands.gif
  • Windows10-x64
  • Nvidia Driver-496.49
  • CUDA-10.0
  • Python-3.8
  • CMake-3.22.1
  • VisualStudio-2017
  • OpenPose-1.7.0
  • caffe-1.0
  • pubind11-2.8.1

上述环境为本项目构建时使用的版本,建议新手同学要么自行查找兼容关系要么严格遵守,毕竟涉及深度学习的计算项目对版本(尤其是硬件版本)要求较高、兼容性问题突出,版本并非越新越好。

  1. 官网下载并安装最新的 CMake(本项目构建时为 3.22.1)
  2. 到官网下载并安装 Visual Studio Community 2017 (version 15.9) (目前测试只有 2017 版本正常,太新的版本编译时会报奇怪的错误)
  3. 根据个人的 NVIDIA 显卡版本,到官网下载或更新驱动(未测试过 AMD,可能不支持)
  4. 执行命令 nvidia-smi 查看显卡的硬件信息(主要关注第一行【驱动版本】和【CUDA 版本】)
02.png
  1. 官网下载安装兼容的 CUDA (本项目构建时为 10.0,主要是为了使用 CUDA 的编译器 nvcc)
03.png

CUDA 与能够使用它的 Nvidia 驱动版本

OpenPose 源码下载

  1. 下载 OpenPose 项目: git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
  2. 在项目根目录下执行命令 git submodule update --init --recursive 递归下载子模块 caffepybind11
  3. 若下载子模块失败,请手动修改 .gitmodules 中的 urlgit ssh 连接,再重新执行命令 git submodule update --init --recursive 尝试下载(若还是下载失败,你可能需要设置 git 代理翻墙了)
01.png

OpenPose 依赖和模型下载

官方脚本位置:

  • openpose/3rdparty/windows/getCaffe.bat
  • openpose/3rdparty/windows/getCaffe3rdparty.bat
  • openpose/3rdparty/windows/getFreeglut.bat
  • openpose/3rdparty/windows/getOpenCV.bat
  • openpose/3rdparty/windows/getSpinnaker.bat
  • openpose/models/getModels.bat

若某些依赖或模型下载失败,可执行对应脚本重新下载。

04.png

编译 OpenPose

  1. 假设工程的根目录为 ${REPO_ROOT_DIR} (建议在 OpenPose 项目的上一级目录)
  2. 新建目录 ${REPO_ROOT_DIR}/build
  3. 运行 CMake,设置 openpose 源代码目录为 ${REPO_ROOT_DIR}/openpose,设置 openpose 编译目录为 ${REPO_ROOT_DIR}/build
05.png
  1. 点击 Configure, 选择所安装的 Visual Studio 版本为 Visual Studio 15 2017,选择 Platform 为 x64,点击 Finish
06.png
  1. 此时会自动生成 CMake 配置,等待下方信息框显示 Configuring done,然后增加勾选:
    • BUILD_PYTHON: 提供 python 接口
    • DOWNLOAD_BODY_COCO_MODEL: 提供 COCO 模型
    • DOWNLOAD_BODY_MPI_MODEL: 提供 MPI 模型
07.png

其实 DOWNLOAD_xxxx_MODEL 都可以全部勾上,这些就是前面下载的全部动作训练模型文件,其中 COCO 和 MPI 模型识别关节点最多,而且是基于标准 CUDA 运行的,这两者也各有不同的优缺点。

  1. 点击 Genetate 按钮,此时会生成 Visual Studio 工程文件,等待下方信息框显示 Genetate done
08.png
  1. 并点击 Open Project 触发 Visual Studio 打开工程(此后不再需要 CMake)
  2. 在 Visual Studio 上方的【活动解决方案配置】中选择 Release,【活动解决方案平台】中选择 x64
  3. 右键点击 pyopenpose,点击【生成】等待工程发布即可
10.png

生成过程中,将会产生非常多的 warning,它们是因为中文编码与英文不兼容导致的,无需理会

  1. 在【输出】看到 生成: 成功 2 个,失败 0 个,最新 0 个,跳过 0 个 即表示工程发布成功
11.png

生成 python 库

此时需要的 python 库文件已全部生成好。

但因为文件过于分散,这里写了一个 powershell 脚本 gen_oplib.ps1,将其放在 ${REPO_ROOT_DIR} 运行即可一键生成名为 oplib 的 python 库:

powershell
# 生成 openpose 库文件
# ------------------------------------------------
# 示例: ./gen_oplib.ps1
# ------------------------------------------------

Write-Output "Genetate OpenPose Library ..."

$OP_LIB_DIR = "./oplib"
If(!(Test-Path $OP_LIB_DIR)) {
    New-Item -ItemType Directory -Path $OP_LIB_DIR
}

Write-Output "Copy [pyopenpose.cp3x-win_amd64.pyd] ..."
Copy-Item "build/python/openpose/Release/*.pyd" -Destination $OP_LIB_DIR

Write-Output "Copy [__init__.py] ..."
Copy-Item "build/python/openpose/__init__.py" -Destination $OP_LIB_DIR

Write-Output "Copy [openpose.dll] ..."
Copy-Item "build/x64/Release/openpose.dll" -Destination $OP_LIB_DIR

Write-Output "Copy [bin] ..."
Copy-Item "build/bin/*" -Destination $OP_LIB_DIR

Write-Output "Copy [models] ..."
Copy-Item "openpose/models" -Destination $OP_LIB_DIR -Recurse

Write-Output "Finish ."

使用时 python 可直接调用这个库:

python
# 调用 openpose 接口示例
# ------------------------------------------------
from oplib import pyopenpose as op
opWrapper = op.WrapperPython()
BODY_25.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK