编程如画,我是panda!
最近学习要用要openpose,配了三天的环境,快疯了,踩了很多坑,在这里和大家分享一下
目录
前言
一、安装openpose
二、运行openpose
三、常见的两个错误
1. No module named 'pyopenpose'
2. DLL load failed while importing pyopenpose: 找不到指定的模块
前言
OpenPose 是一款开源的人体姿势估计库,能够在图像或视频中检测和估计人体的关键点位置,包括头部、身体、四肢等部位。OpenPose使用深度学习技术,特别是卷积神经网络(CNN),来实现高效且准确的人体姿势估计。该库的目标是为计算机视觉、机器学习和人机交互等领域提供一个通用、易用的工具,使开发者能够轻松地获取有关人体动作和姿势的信息。由于其强大的功能和开放源代码的特性,OpenPose在许多领域,如人体行为分析、虚拟现实、健康监测等方面得到广泛应用。
一、安装openpose
安装openpose的话可以参考官方给出的文档:(对英语基础不好的小伙伴可能看着有点头疼)openpose/doc/installation/0_index.md at master · CMU-Perceptual-Computing-Lab/openpose · GitHub
也可以看一下这个up主的视频:windows编译openpose及在python中调用_哔哩哔哩_bilibili
我的话在网上搜了很多教程,但是一直编译不好,一个接一个的错误,太难受了,我建议如果想省事的话,直接用我给出的链接吧:
链接:https://pan.baidu.com/s/1O27lKereBU4VsDEeh_DpYQ
提取码:duk8
里面有两个版本,一个是pyhton3.7的一个是python3.8的,python3.8的里面没有CPU版本的,只有GPU版本的。
python3.7版本来自:openpose环境搭建(详细教程CPU/GPU)windows 10+python 3.7+CUDA 11.6+VS2022_openpose安装
python3.8版本来自:windows编译openpose及在python中调用 - 迷途小书童的Note迷途小书童的Note (xugaoxiang.com)
两个博主讲的都很好,跟着他们一步一步做没有什么问题,如果出现了编译的问题,检查一下是不是需要下载的资源没有下;
如果是出现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'或者DLL load failed while importing pyopenpose: 找不到指定的模块,这两个问题,请看我下面的讲解。
如果使用GPU版本的openpose,一定要确认好自己有英伟达的显卡,并且下载好了CUDA和cuDNN,如果没有安装好的可以参考我之前发的博客:
不同版本CUDA和cudnn下载安装并配置环境变量
二、运行openpose
这里以python3.7GPU为例:
首先创建自己的工程文件夹 :
然后将build文件夹里面的model文件夹复制过去,然后创建bin文件夹:
将 openpose_py3.7\buildGPU\python\openpose\Release路径下的文件:
复制到你自己工程项目文件的bin目录和根目录下,然后打开openpose_py3.7\buildGPU\x64\Release,将这个文件同样复制到你的项目bin目录下:
最后打开这个目录openpose_py3.7\buildGPU\bin,将里面的文件全部复制到你的项目bin目录里,最后你的项目文件夹应该是这样的:
用你的IDE打开这个项目文件,我这里选用VSCode:
python环境一定要是python3.7的不然会报错,然后提前下载好opencv:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
在bin目录下创建pyhton文件test.py:
在test.py中输入以下代码:
import os
import sys
import cv2
from sys import platform
import argparse
dir_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(dir_path)
os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/bin;'
import pyopenpose as op
print(op)
print("成功引入pyopenpose")
parser = argparse.ArgumentParser()
# 修改成你自己测试图片的路径
parser.add_argument("--image_path", default="w.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/"
# Add others in path?
for i in range(0, len(args[1])):
curr_item = args[1][i]
if i != len(args[1])-1: next_item = args[1][i+1]
else: next_item = "1"
if "--" in curr_item and "--" in next_item:
key = curr_item.replace('-','')
if key not in params: params[key] = "1"
elif "--" in curr_item and "--" not in next_item:
key = curr_item.replace('-','')
if key not in params: params[key] = next_item
params["net_resolution"] = "368x256"
# Starting OpenPose
opWrapper = op.WrapperPython()
opWrapper.configure(params)
opWrapper.start()
# Process Image
datum = op.Datum()
imageToProcess = cv2.imread(args[0].image_path)
datum.cvInputData = imageToProcess
opWrapper.emplaceAndPop(op.VectorDatum([datum]))
# Display Image
print("Body keypoints: \n" + str(datum.poseKeypoints))
cv2.imshow("OpenPose 1.7.0 - Tutorial Python API", datum.cvOutputData)
cv2.waitKey(0)
然后点击运行,得到结果:
三、常见的两个错误
1. No module named 'pyopenpose'
出现这个错误的可能有很多种,我说一下最常见的两种,一种是你的python解释器并不是对应版本,另一种是这个文件你只放了一个地方,项目文件的bin目录和根目录都要有这个文件。
2. DLL load failed while importing pyopenpose: 找不到指定的模块
出现这个问题的原因是程序找不到你的DLL文件,一定要把python文件放在bin目录下才能运行,或者使用官方示例给出的添加路径的办法,但是添加了我有时候也运行不起来,所以我建议还是直接放在bin目录里面吧,省事。