目录
一、前期准备
0.运行前提
请确认你的电脑有英伟达显卡,否则一切白瞎~
整体安装顺序为:python→VS→CUDA→cuDNN→CMake→Openpose编译→运行自己的Demo
tips(一些,血泪教训):
(1)openCV要在装完python 就安装,否则等后面东西都搞完了,才发现没装就晚啦~
(2)不管你看哪个教程,软件版本尽量选择和教程一致,避免出现不必要的幺蛾子
(3)文件名、路径名,最好不要有中文哦~
1.python
1.1 安装
使用Anaconda来管理python环境,可以避免很多问题,所以,我们先下载一个Anaconda
进入官网下载(https://www.anaconda.com/download)
安装完成后确认以下环境变量有没有添加,如果没有,手动添加以下。
1.2 验证安装
(1)按下win+R,输入cmd,回车 进入命令行
(2)输入where python
回车,有这个就可以了。
(3)直接输入python 就能看到python的版本
我们需要的环境是python3.8,所以要建立一个python3.8的环境
1.3 建立python环境
(1)还是上面的窗口,输入exit() 退出python,
(2)输入conda create -n py38 pytyon=3.8
(3)回车,等他跑一跑,他会问你Proceed ([y]/n)? 输入y 回车
等他跑完,就建立了一个名为py38,python版本为3.8的新环境
(4)输入 conda activate py38 激活环境
这样就是进入这个py38的环境里啦~
(5)在这个环境下,输入conda info 回车
可以看conda的各种信息,最重要的是这个环境地址,要记住,后面要用。
(一般来说,环境路径应该在anaconda3的env文件夹里,但我的比较怪,在这个地方。)
1.4 openCV安装
(1)输入 pip list 确认一下已经有pip和numpy两个包
pip版本不宜过旧,如果conda选择较新的版本,一般这里不会有问题。
(2)直接输入
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
这里用清华镜像速度会比较快。
(3)安装完成后,验证一下openCV有没有安装成功
输入python 回车
再输入 import cv2 回车
没有报错就是成功啦~
1.5 pycharm
可以再顺便安装一个pycharm,可以通过官方连接,或者从conda进入,都一样的。
PyCharm官方正版下载2024最新版官方下载 (belacad.cn)
可以进入Pychar再输入以下 import cv2 没有标红,opencv就没问题啦。
2.Visual Studio 2019
(下载之前请先看一下3.1(2))
可以进入官网Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)下载,也可以借助一些 伙伴神 之类的公众号,里面有详细的安装步骤。
记得再选择要安装的工作负荷的时候,勾选 Python 开发(我不确定是否会用上,但是我勾了),和 C++开发相关组件就可以啦~
3.CUDA与cuDNN
3.1 cuda安装
(1)命令行输入 nvidia-smi ,查看显卡支持的最高CUDA版本
只要我们下载的版本不高于这个最高版本就可以啦,我们将选择11.1的版本进行安装。
(2)查看CUDA版本支持的VS版本
如果你的显卡不能支持11.1的CUDA,那只能选择更低的版本,那么需要确认一下CUDA支持的VS版本,先安装VS,再安装CUDA!
在官网查询
Installation Guide Windows :: CUDA Toolkit Documentation (nvidia.com)
(3)下载CUDA安装包,直接官网下载 CUDA Toolkit Archive | NVIDIA Developer
根据你的操作系统,选择安装包
一步一步按照系统点下来,下载安装包
(4)双击安装包,安装程序
这边选择自定义安装,
Other components和Driver components加号点开看一下,如果Other components和Driver components的新版本比当前版本低的话就不用勾选。
无脑下一步,
安装位置可以默认C盘,要记录一下,等下要用。
(5)检查一下是否安装成功
win+R打开cmd,命令行输入nvcc -V,出现版本信息,就是安装成功啦。
(6)检查环境变量
确认一下这几个有就可以啦,没有的话就手动添加一下
3.2 安装cuDNN
直接官网下载安装包,选择对应的cudnn版本,下载安装包
cuDNN Archive | NVIDIA Developer
解压后得到这些,
打开刚才CUDA安装的地方,将左边所有内容复制到右边文件夹
4.Cmake安装
直接官网下载,Download CMake
我这边用的是3.24.1的版本,更早版本的连接
Release v3.24.1 · Kitware/CMake · GitHub
点击下载,获得一个压缩包,解压这个压缩包,获得:
在bin文件夹中,找到cmake-gui.exe 文件就可以啦
5. OpenPose源码下载
这里提供一个完整的源码压缩包
通过百度网盘分享的文件:openpose_py3.8.zip
链接:https://pan.baidu.com/s/11qGZFZL_DXPIQb-N3POxNw?pwd=0707
提取码:0707
下载解压获得
到这里,准备工作就完成啦~
二、OpenPose编译
1.打开Cmake
双击cmake-gui.exe 运行
2.修改路径
3.添加Python接口
点击Add Entry,按照下图输入,这样就实现用想要的python版本来运行,这个很重要,用默认版本,可能会出问题哦~
4.点击OK后,再点击Configure
他问你没有这个文件夹,要不要给你创建一个,你说好。
5. 添加VS的版本
6.点击完成,然后等他跑完,得到下面
把BUILD_PYTHON、DOWNLOAD_BODY_COCO_MODEL 、DOWNLOAD_BODY_MPI_MODEL勾起来
7. 再一次点击Configure,
8.Configure运行完,没报错,再点击Generate
9.运行完,无报错,再点击open project
10. 它自动会打开VS,注意这里的Debug 模式
11. 右击这个OpenPoseDemo,点击重新生成
得到以下结果(如果有报错,可以尝试再点击一次重新生成。)
12.再右击OpenPoseDemo,,点击设置为启动项,
13.再右击OpenPoseDemo,,点击最下面的属性
在调试、命令参数中输入:(后面这个地址是源码地址)
--video C:\……\openpose_py3.8\examples\media\video.avi
14.点击确定后,直接运行。
就会有一个DEMO的运行结果。
15.找到pyopenpose,点击重新生成
运行成功得到:
到这里,就编译完成啦。
三、运行Demo
1. 建立自己的OpenposeDemo项目
在文件夹里建立bin 和 models 两个文件夹,bin文件夹用来放依赖的相关文件,models用来放模型文件。
2.找到刚刚cmake帮忙建立的GPU_build文件夹,按照下面这个路径,找到openpose.dll 复制到刚自己建立的项目文件夹的bin 目录下。
3.找到GPU_Build 文件夹下的bin文件夹,全选,复制到自己的bin里面。
4. 把C:\……\openpose_py3.8\GPU_build\python\openpose\Debug 下面pyopenpose.cp38-win_amd64.pyd文件夹分别复制到我们的bin目录和项目的根目录下
5. 把源码中的models文件夹里的所有模型,都复制到自己的项目的models文件夹里面。
6.打开PyCharm,一定要把python文件放在自己项目的bin目录下才可以。
7.输入以下代码
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()
# 把default= 改为自己的图片路径输
parser.add_argument("--image_path",
default="C:\\...\\PhotoRecognitionDemo\\pythonProject1\\COCO_val2014_000000000536.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)
点击运行,就可以获得
8.如果报错,请检查代码中的几处路径是否正确,特别是模型路径,建议改为具体路径。
有可能pyopenpose是标红的,但没事的,能运行,