windows编译openpose及在python中调用
source link: https://xugaoxiang.com/2021/05/29/build-openpose-for-windows-python-api/
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.
视频看这里
Youtube
Bilibili
基础环境安装
cuda
和cudnn
的部分,这个前面讲过了,不会的话,看这篇
由于需要使用到cmake-gui
,因此还需要去下载安装cmake
,地址: https://cmake.org/download/,安装文件拉下来傻瓜式安装,将安装路径加入系统环境变量Path
中
编译openpose
这里使用的源码是1.7.0版本,地址是:https://github.com/CMU-Perceptual-Computing-Lab/openpose/archive/refs/tags/v1.7.0.zip,下载后解压,在源码根目录新建个文件夹build
,这个文件夹是用来存放编译生成的文件的。另外,openpose
还依赖caffe
和pybind11
(这是为了能在python
中去调用openpose
的api
)
下载zip
后解压,分别存放在3rdparty\caffe
和3rdparty\pybind11
打开cmake-gui
,填写源码位置和编译后产生的文件的位置,也就是上面刚创建的build
目录
接下来点击下方的Configure
这个步骤,会去下载几个主要的依赖,包括opencv
、caffe
、caffe3rdparty
,还有工程中需要用到的模型文件。
这里经常会碰到网络问题而导致某些文件下载失败,从而导致Configure
失败。
如果cmake-gui
一直不成功,可以逐个去下载所需要的软件包。
模型文件可以通过双击执行models\getModels.bat
脚本进行下载
而依赖的caffe
和opencv
则可以进入到文件夹3rdparty/windows
,依次执行几个bat
脚本文件下载
接下来,就可以点击Generate
生成visual studio
的解决方案了
如果出现下面类似的错误,就是因为之前的几个依赖,没有下载好导致的,最简单的方法就去看看下载下来的几个zip
包大小是否正常
目前1.7.0依赖于caffe
、caffe3rdparty
、freeglut
、opencv
和spinnaker
这5个包,自行下载后解压,注意解压后文件夹的名称和文件目录结构,如下图
接下来就可以继续点击Generate
成功之后,点击Open Project
进入visual studio
右键点击解决方案中的OpenPoseDemo
,选择 生成,开始编译
结果报错了
看错误提示
calling a __host__ function("__floorf") from a __global__ function("op::resize8TimesKernel<float> ") is not allowed openpose F:\dl\openpose-1.7.0\src\openpose\net\resizeAndMergeBase.cu 142
为解决这个问题,需要修改相应报错的源文件,将floor
改为floorf
,包括openpose-1.7.0\include\openpose_private\gpu\cuda.hu
和openpose-1.7.0\src\openpose\net\resizeAndMergeBase.cu
修改完成后再次编译,就可以成功了
demo测试
右击解决方案中的OpenPoseDemo
,选择设为启动项目
点击visual studio
中的本地windows
调试器,运行程序,由于接着usb
摄像头,openpose
打开了摄像头进行预测
如果想使用某个视频文件来跑跑OpenPoseDemo
,可以在visual studio
中增加命令行参数,方法是右键打开解决方案中的OpenPoseDemo
,选择属性
选择调试,然后在命令行参数处添加
--video F:\dl\openpose-1.7.0\examples\media\video.avi
最后重新运行
openposedemo常用参数
OpenPoseDemo.exe --video examples\media\video.avi
如果想讲预测后的视频保存下来,可以将预测结果保存成图片
OpenPoseDemo.exe --video examples\media\video.avi --write_images examples\media\images
预测图片,将图片文件放在文件夹中
OpenPoseDemo.exe --image_dir examples\media
使用face
、hand
模型,这里以图片预测为例,视频也一样。需要更多的gpu memory
OpenPoseDemo.exe --image_dir examples\media --face --hand
保存关键点信息,json
格式
OpenPoseDemo.exe --video examples\media\video.avi --write_json examples\media\
在python中调用
在cmake-gui
中勾选BUILD_PYTHON
和'BUILD_UNITY_SUPPORT'编译选项
重新Configure
和Generate
,在打开visual studio
后,选中pyopenpose
,启动生成。待代码编译完成后,会在build\x64\Debug
下生成openposed.dll
文件,在build\python\openpose\Debug
下生成pyopenpose.cp38-win_amd64.pyd
文件,这2个文件非常重要,后面在执行python
示例代码时会用到。
接下来进入到python
的示例代码目录,这里跑一下01_body_from_image.py
,运行之前,需要做一点点修改,主要是4个路径的修改
if platform == "win32":
# Change these variables to point to the correct folder (Release/x64 etc.)
# 第一处
sys.path.append(dir_path + '/../../build/python/openpose/Debug');
# sys.path.append(dir_path + '/../../python/openpose/Release');
# os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;'
# 第二处
os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../build/x64/Debug;' + dir_path + '/../../build/bin;'
import pyopenpose as op
# 测试图片的路径和模型文件夹的路径也都要改一下
parser = argparse.ArgumentParser()
# 第三处
parser.add_argument("--image_path", default="../../examples/media/COCO_val2014_000000000192.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/"
python 01_body_from_image.py
openpose
输出的关键点信息如下图,总共有25个关节点
序列对应的关节名称如下
{0, "Nose"},
{1, "Neck"},
{2, "RShoulder"},
{3, "RElbow"},
{4, "RWrist"},
{5, "LShoulder"},
{6, "LElbow"},
{7, "LWrist"},
{8, "MidHip"},
{9, "RHip"},
{10, "RKnee"},
{11, "RAnkle"},
{12, "LHip"},
{13, "LKnee"},
{14, "LAnkle"},
{15, "REye"},
{16, "LEye"},
{17, "REar"},
{18, "LEar"},
{19, "LBigToe"},
{20, "LSmallToe"},
{21, "LHeel"},
{22, "RBigToe"},
{23, "RSmallToe"},
{24, "RHeel"},
{25, "Background"}
out of memory
如果是使用显存较小的显卡,比如1050Ti
,它只有4G的显存,在正常跑视频测试的时候就会报错
Check failed: error == cudaSuccess (2 vs. 0) out of memory.
据项目作者所说,要运行openpose
,至少需要 4G 。默认情况,caffe
会占用大约12G
,如果使用cudnn
的话,就能降低至2.2G
,这个是针对人体25个关键点检测而言的,如果是COCO
的话,大概是1.5G
。
碰到上述问题,可以通过减小网络大小来解决,使用参数--net_resolution
,如
OpenPoseDemo.exe --video examples\media\video.avi --net_resolution 320x320
需要说明一点的是,网络小了,速度变快了,但是准确率就会降低
已经将1.7.0所需的所有文件都打包了,需要的话自行下载
链接:https://pan.baidu.com/s/1RBeuuZVTnn13iDSeFLttVA
提取码:ncvb
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK