以下是在 Windows 11 系统下,使用 Conda 虚拟环境通过 Python 运行 OpenPose 的详细教程。我们将从环境配置到实际运行逐步操作:
1. 确认系统环境
-
操作系统:Windows 11
-
显卡:NVIDIA 独立显卡(已安装 CUDA 12.1 和对应驱动)
-
IDE:Visual Studio 2022(已安装“使用 C++ 的桌面开发”工作负载)
-
包管理:Conda 已安装
2. 安装 Visual Studio 必要组件
-
打开 Visual Studio Installer。
-
确保勾选以下组件:
-
使用 C++ 的桌面开发
-
Windows 10/11 SDK
-
C++ CMake 工具
-
3. 创建 Conda 虚拟环境
# 打开 Anaconda Prompt 或系统终端
conda create -n openpose python=3.9
# 推荐 Python 3.9(兼容性最佳)
conda activate openpose
4. 安装 OpenPose 的 Python 依赖
# 安装基础依赖
conda install -y numpy opencv matplotlib
pip install pybind11
# 安装 CMake(用于编译 C++ 部分)
conda install -y cmake
5. 下载 OpenPose 源码
# 下载官方仓库(建议在非中文路径下操作)
git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git
cd openpose
6. 编译 OpenPose(关键步骤)
(1) 配置 CMake
-
在
openpose
目录下创建build
文件夹:mkdir build cd build
-
运行 CMake(根据你的 CUDA 路径调整):
cmake .. -G "Visual Studio 17 2022" -A x64 ^ -DCMAKE_INSTALL_PREFIX=../install ^ -DCUDA_TOOLKIT_ROOT_DIR="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.1" ^ -DPYTHON_EXECUTABLE="C:/Users/你的用户名/anaconda3/envs/openpose/python.exe" ^ -DBUILD_PYTHON=ON
-
如果 CMake 报错,检查 CUDA 和 Python 路径是否正确。
-
确保输出中显示
Python bindings: ON
。
-
(2) 编译安装
cmake --build . --config Release --target install
-
此过程可能需要 30分钟~2小时(取决于硬件)。
-
如果编译失败,检查:
-
是否以管理员身份运行终端。
-
Visual Studio 的 C++ 工具链是否完整。
-
7. 设置 Python 接口
(1) 添加环境变量
将编译生成的 pyopenpose
模块路径加入 Python:
# 获取生成的 .pyd 文件路径(通常在 build/python/openpose/Release 下)
set PYTHONPATH=%PYTHONPATH%;D:/path/to/openpose/build/python/openpose/Release
(2) 验证安装
# 在 Python 中测试
import pyopenpose as op
print(op.__file__) # 确认路径正确
8. 运行示例代码
import cv2
import pyopenpose as op
# 配置参数
params = {
"model_folder": "D:/path/to/openpose/models/", # 替换为你的模型路径
"net_resolution": "368x368",
"render_threshold": 0.5
}
# 初始化
op_wrapper = op.Wrapper()
op_wrapper.configure(params)
op_wrapper.start()
# 处理图像
image = cv2.imread("input.jpg")
datum = op.Datum()
datum.cvInputData = image
op_wrapper.emplaceAndPop([datum])
# 显示结果
print("Keypoints:", datum.poseKeypoints)
cv2.imshow("Output", datum.cvOutputData)
cv2.waitKey(0)
9. 常见问题解决
-
CUDA 版本不匹配:
-
如果报错
CUDA error: no kernel image
,可能是 CUDA 12.1 与 OpenPose 的兼容性问题。 -
尝试降级到 CUDA 11.x 或修改
CMakeLists.txt
中的计算能力设置。
-
-
DLL 缺失错误:
-
将
C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.1/bin
加入系统PATH
。
-
-
模型文件缺失:
-
从 OpenPose 模型仓库手动下载
models/
文件夹。
-
10. 性能优化建议
-
GPU 模式:确保
params
中设置"num_gpu": 1
。 -
分辨率调整:降低
net_resolution
(如256x256
)以提升速度。 -
多线程:在
params
中添加"number_people_max": 1
限制检测人数。