前言
之前一直想做一个与Open Pose姿态估计相关的项目,一直没下手,这次有时间了就想着试一下,结果网上大多数都是GPU版本,而CPU版本有些时候还会报很多错误,我看了网上很多博客,最后成功运行,当然,本篇博客只能做到输出标记骨骼点后的图片,没有后续分类的部分。
特备感谢下面两位博主的文章,受益匪浅
win10环境下下载安装openpose(only cpu)并在pycharm中运行代码(超详细)_openpose下载-CSDN博客
【精选】openpose环境搭建(详细教程CPU/GPU)windows 10+python 3.7+CUDA 11.6+VS2022_openpose安装-CSDN博客
配置信息
1.Visual Studio 2017
2.Cmake3.22,下载地址如下
Release v3.22.2 · Kitware/CMake (github.com)
3.Pycharm2022.3.2
环境配置我是用Anaconda 新建的3.7版本的环境,其中安装有opencv-python,安装代码如下:
pip install opencv-python
注意:环境不同会导致报错,我之前就用3.8的,一直报错,显示找不到pyopenpose库。
首先,我们去Github上下载官方的OpenPose的Demo,网站如下:
下载解压后如下:
在以上目录下新建文件夹 build_cpu
现在下载的东西还是欠缺很多文件的
3rdparty文件下载
在以下目录:
下载caffe和pybind11两个文件解压缩后替换如下两个文件
下一级文件夹如下,一定要一模一样,我之前解压后还有一层,这个也会报错,并且解压后名字应该是caffe-master,得改成caffe,pybind11同理
打开是这样的:
如果打开文件后是只有一个文件夹,那得把它提出来
windows文件夹如下
可以直接点击bat文件下载,但是我也下不了,就是打开找网站了具体如下:
Caffe:
http://posefs1.perception.cs.cmu.edu/OpenPose/3rdparty/windows/caffe_16_2020_11_14.zip
Caffe3rdparty:
http://posefs1.perception.cs.cmu.edu/OpenPose/3rdparty/windows/caffe3rdparty_16_2020_11_14.zip
Freeglut
http://posefs1.perception.cs.cmu.edu/OpenPose/3rdparty/windows/freeglut_2018_01_14.zip
OpenCV
http://posefs1.perception.cs.cmu.edu/OpenPose/3rdparty/windows/opencv_450_v15_2020_11_18.zip
最后一个可以加不加,都没关系
最后如下,压缩包也放进去,cmake好像有判断是否有压缩包,没有他就去下,容易失败。
model下载
model里面是这样的,打开你会发现文件夹都是空的,这时,你可以通过点击bat文件下载,但我死活下载不了,直接把这个文件用记事本打开可以找到下载地址,用迅雷下载还是挺快的
各个下载地址如下:
face:http://posefs1.perception.cs.cmu.edu/OpenPose/models/face/pose_iter_116000.caffemodel
hand:
http://posefs1.perception.cs.cmu.edu/OpenPose/models/hand/pose_iter_102000.caffemodel
pose:
body_25:
http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/body_25/pose_iter_584000.caffemodel
coco:
http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/coco/pose_iter_440000.caffemodel
mpi
http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/mpi/pose_iter_160000.caffemodel
Cmake
把每个文件放进文件夹后运行cmake,可以在按下win标,搜索查找之前安装的cmake
第一行与第三行如上图所示填写,然后点击Add Entry
第三个找你的环境中的python.exe,点击OK添加
然后点击Configure
前两个如上设置,其他不变
这几个地方改就行了。
然后再按一次Configure
在下方出现Configuring done
点击General,General done后点击Open Project,如果打不开可以在文件夹如下位置的.sln文件打开
打开后设置为Release
然后在如下两个文件右击,点击生成
第一次生成后如下:
第二个如下
这时候,可以选中OpenPoseDemo,运训该文件,是一个调用电脑摄像头并实时检测的一个程序
运行项目
之后打开一下py文件中的一个,我这里举例第一个
运行后:
这个地方汇报一个找不到pyopenpose的错误,我真的被他折磨良久,后来我把vs,python环境全部重新搭建后就可以运行了
新建程序
那如何跑自己的图片呢?
我们随意的新建一个文件夹,我新建的如下:
在里面新建三个文件夹,bin,models,examples,examples这个可有可无,我是建出来放图片的
在原来那个文件夹里的pyopenpose.cp37-win丢到上述目录下
将下面的.dll文件和bin内文件全部放进新建文件夹的bin文件夹内
然后将下方所有文件放入models文件夹中
如何用pycharm打开这个文件夹,新建python文件,代码已准备好
import os
import sys
import cv2
from sys import platform
import argparse
dir_path = os.path.dirname(os.path.realpath(__file__))
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="examples/COCO_val2014_000000000623.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
# Construct it from system arguments
# op.init_argv(args[1])
# oppython = op.OpenposePython()
# 修改参数
# 修改分辨率,可以降低对显存的占用 (16的倍数)
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)
修改一下文件路径就可以跑自己的图片了
跑视频
你可能会问,可以跑图片,那我怎么跑视频呢?
我这边想到的方案是把视频一帧一帧解开,然后对每一帧进行处理,然后连成一个视频,这里使用oepncv库的函数实现
代码参考如下博客:
使用Python实现MP4格式视频与图片相互转换_python videowriter_fourcc-CSDN博客
尾言
如果想要用博主的文件做对照,可扫描下方二维码关注公众号,发送”深度学习-OpenPose_Demo(CPU)",获得网盘地址。