【OpenPose-Windows】基于Openpose1.4.0的新项目环境配置

OpenPose1.4.0-based Project Configuration

前期Example和Demo的安装与环境配置参见
【OpenPose-Windows】 OpenPose1.4.0+VS2017+CUDA9.2+cuDNN9.2+Windows配置教程


环境

操作系统:Windows 10 Enterprise x64
OpenPose:1.4.0
CUDA: cuda_9.2.148_win10
cuDNN:cudnn-9.2-windows10-x64-v7.2.1.38
Visual Studio:Visual Studio Enterprise 2017

步骤1:文件组织

在解决方案中新建项目【Windows控制台应用程序】,切换解决方案配置为Release,右击新建的项目设为启动项目,打开属性页备用。
【OpenPose-Windows】基于Openpose1.4.0的新项目环境配置


具体步骤如下:
  1. 项目文件夹
    进入 \$(SolutionDir)\$(ProjectDir)
    (e.g. C:\Users\Skaldak\Documents\Visual Studio 2017\Projects\HIS\Posture 其中\HIS为解决方案路径 $(SolutionDir),\Posture 为项目路径 $(ProjectDir)
  2. 动态链接库dll
    将\openpose目录下
    \include文件夹,
    \models文件夹与
    \openpose\build目录(\build为CMake生成工程的目录)下的
    \bin文件夹
    拷贝至\$(SolutionDir)\$(ProjectDir)。
    将\openpose\build\x64\Release目录下的
    openpose.dll
    (若是Debug配置则为\openpose\build\x64\Debug目录下的
    openposed.dll)
    拷贝至\$(SolutionDir)\$(ProjectDir)\bin
  3. 第三方3rdparty
    在\$(SolutionDir)\$(ProjectDir)目录下新建
    \3rdparty文件夹,
    将\openpose\3rdparty\windows目录下的
    \caffe文件夹,
    \caffe_cpu文件夹,
    \caffe3rdparty文件夹与
    \opencv文件夹
    拷贝至\$(SolutionDir)\$(ProjectDir)\3rdparty
  4. OpenPose静态库lib
    在\$(SolutionDir)\$(ProjectDir)\3rdparty目录下新建
    \openpose文件夹,
    将\openpose\build\src\openpose\Release目录下的
    openpose.lib
    (若是Debug配置则为\openpose\build\src\openpose\Debug目录下的
    openposed.lib库)
    拷贝至\$(SolutionDir)\$(ProjectDir)\3rdparty\openpose

最终文件结构如下:
  • $(SolutionDir)
    • $(ProjectDir)
      • 3rdparty
        • caffe
        • caffe_cpu
        • caffe3rdparty
        • freeglut
        • opencv
        • openpose
      • bin
      • include
      • models

【OpenPose-Windows】基于Openpose1.4.0的新项目环境配置

步骤2:属性配置

转到刚才备用的属性页,以下列出与默认配置所作改动:

关于仅使用 CPU(USE_CPU_ONLY)与使用 NVIDIA GPU(USE_CUDA):
注意电脑硬件支持否则运行时可能报错Cuda check failed
USE_CPU_ONLY配置需要caffe_cpu框架支持而USE_CUDA配置需要caffe框架支持;
USE_CPU_ONLY配置与USE_CUDA配置的预处理器不同;
USE_CUDA配置包含CUDA附加包含目录以及CUDA附加依赖项。
关于 DEBUG配置与 RELEASE配置:
注意以下lib/dll/.h一致性否则可能报错无法定位程序输入点于动态链接库
使用Debug配置CMake编译,生成OpenPose Library得到的lib/dll只能用于Debug配置;
使用Release配置CMake编译,生成OpenPose Library得到的lib/dll只能用于Release配置。
二者lib与dll有别: DEBUG配置附加依赖项中静态库部分末尾有d,动态链接库部分末尾有d;
RELEASE配置中预处理器包含NDEBUG。

  • 常规>全程序优化>无全程序优化

  • 调试>环境>
    (若仅使用CPU)
    PATH=$(ProjectDir)bin;$(ProjectDir)3rdparty\caffe_cpu\bin;$(ProjectDir)3rdparty\opencv\x64\vc14\bin;$(ProjectDir)3rdparty\freeglut\bin;$(ProjectDir)3rdparty\spinnaker\bin;$(LocalDebuggerEnvironment)
    (若使用NVIDIA GPU)
    PATH=$(ProjectDir)bin;$(ProjectDir)3rdparty\caffe\bin;$(ProjectDir)3rdparty\opencv\x64\vc14\bin;$(ProjectDir)3rdparty\freeglut\bin;$(ProjectDir)3rdparty\spinnaker\bin;$(LocalDebuggerEnvironment)
    注意这里不能出现空格,建议直接复制粘贴

  • C/C++>

    • 常规>

      • 附加包含目录>
        (若仅使用CPU)
        $(ProjectDir)3rdparty\opencv\include;$(ProjectDir)3rdparty\caffe_cpu\include;$(ProjectDir)3rdparty\caffe_cpu\include2;$(ProjectDir)3rdparty\caffe3rdparty\include\boost-1_61;$(ProjectDir)3rdparty\caffe3rdparty\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)
        (若使用NVIDIA GPU)
        $(ProjectDir)3rdparty\opencv\include;$(ProjectDir)3rdparty\caffe\include;$(ProjectDir)3rdparty\caffe\include2;$(ProjectDir)3rdparty\caffe3rdparty\include\boost-1_61;$(ProjectDir)3rdparty\caffe3rdparty\include;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)
      • 调试信息格式>C7 兼容 (/Z7)(启用该项在Debug配置下断点有效)
      • 多处理器编译>(是 (/MP))
    • 优化>
      (若为Release配置)

      • 优化>优化(优选速度) (/Ox)
      • 优选大小或速度>代码速度优先 (/Ot)

      (若为Debug配置)

      • 优化>已禁用 (/Od)
      • 内联函数扩展>已禁用 (/Ob0)
    • 预处理器>
      (若仅使用CPU)
      NDEBUG;USE_CAFFE;USE_CPU_ONLY;CPU_ONLY;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)
      (若使用NVIDIA GPU)
      NDEBUG;USE_CAFFE;USE_CUDA;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)
      (若为Debug配置则删除NDEBUG; 并将CMAKE_INTDIR="Release" 改为CMAKE_INTDIR="Debug"即可)

    • 代码生成>运行库>多线程 DLL (/MD)(启用该项否则在Debug配置下报错)

    • 语言>符合模式>否

    • 预编译头>不使用预编译头

    • 高级>编译为>编译为 C++ 代码 (/TP)

  • 链接器>

    • 常规>启用增量链接>否 (/INCREMENTAL:NO) (此项建议)

    • 输入>附加依赖项>
      (若仅使用CPU)
      $(ProjectDir)3rdparty\openpose\openpose.lib;$(ProjectDir)3rdparty\opencv\x64\vc14\lib\opencv_world310.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\gflags.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\glog.lib;$(ProjectDir)3rdparty\caffe_cpu\lib\caffe.lib;$(ProjectDir)3rdparty\caffe_cpu\lib\caffeproto.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\libboost_system-vc140-mt-1_61.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\libboost_filesystem-vc140-mt-1_61.lib;%(AdditionalDependencies)
      (若使用NVIDIA GPU)
      $(ProjectDir)3rdparty\openpose\openpose.lib;$(ProjectDir)3rdparty\opencv\x64\vc14\lib\opencv_world310.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\gflags.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\glog.lib;$(ProjectDir)3rdparty\caffe\lib\caffe.lib;$(ProjectDir)3rdparty\caffe\lib\caffeproto.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\libboost_system-vc140-mt-1_61.lib;$(ProjectDir)3rdparty\caffe3rdparty\lib\libboost_filesystem-vc140-mt-1_61.lib;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64\cudart_static.lib;%(AdditionalDependencies)

步骤3:程序调试

打开之前CMake建立的解决方案OpenPose.sln,复制任意项目Source Files文件夹下cpp源文件的内容到我们新建的项目源文件中,可以正常运行。


以上属性配置有若干冗余,部分为建议选项。
更新于2018/09/17,增加Debug配置。