当前位置: 首页 > news >正文

人体姿态检测算法OpenPose环境配置

Ubuntu18.04 人体姿态检测算法OpenPose环境配置

      • Ubuntu18.04 人体姿态检测算法OpenPose环境配置
        • 资源的准备
        • Caffe搭建
        • OpenPose编译

Ubuntu18.04 人体姿态检测算法OpenPose环境配置

最近项目中需要实现一个人体姿态检测算法的需求,GitHub中也有Pytorch版本的OpenPose但是跑起视频来惨不忍睹,只有2-3FPS;于是就考虑使用CMU官方的代码,就进行了一波漫长的环境配置。

资源的准备

首先在Github上获取OpenPose项目文件:

git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git

根据网络情况可能有快有慢,还是建议挂一下梯子下载速度快一些。

OpenPose的项目环境需要Caffe与OpenCV,于是先行安装OpenCV,可以从OpenCV官网下载OpenCV官网,也可以通过git:

git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git

下载成功后,可以在你的home目录下看见opencv和opencv_contrib两个文件夹,将opencv_contrib目录移到opencv目录下。

在下载的过程中,我们可以添加opencv所需要的依赖库:

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

安装build-essential可能会出现安装不上的问题,需要安装可以使用:

apt depends build-essential

查看build-essential所需要的依赖。

在各项依赖安装完成之后mkdir build在opencv目录下创建build目录,cd build进入build目录,执行:

cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..

注意:最后的两个点不能丢
在这里插入图片描述

cmake编译成功出现Configuring done和Generating done,接下来进行下一步输入

sudo make -j8

如果顺利的话就会出现
在这里插入图片描述

这就意味着opencv编译成功了,如果出现了编译错误,那就需要找一找是否是有哪些依赖没有事先安装。

接下来运行:

sudo make install

可以在/usr/local/lib目录下看到一系列libopencv_xxx.so等这样的动态库,这样成功安装OpenCV,可以适用于各种语言。

Caffe搭建

安装相关依赖库

sudo apt-get --assume-yes install build-essential
 
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
 
sudo apt-get install --no-install-recommends libboost-all-dev
 
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
 
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
 
sudo -H pip install --upgrade numpy protobuf

Caffe的下载

可以直接从OpenPose的GitHub项目中的3rdparty的第三方目录中Caffe中获取:

git clone https://github.com/CMU-Perceptual-Computing-Lab/caffe.git

将下载好的Caffe文件放在OpenPose项目的Caffe目录下进行编译,以免一些未知的错误,打开下载好的Caffe文件,目录下新建一个build目录

修改MakeFile.config进入caffe,将 Makefile.config.example 文件复制一份并更名为Makefile.config,也可以在caffe目录下直接调用以下命令完成复制操作 :

sudo cp Makefile.config.example Makefile.config

修改Makefile.config文件,在caffe目录下打开该文件:

...
将
#USE_CUDNN := 1
修改成: 
USE_CUDNN := 1
...
 
...
#如果此处是OpenCV2,则不用修改
将
#OPENCV_VERSION := 3 
修改为: 
OPENCV_VERSION := 3
...
 
...
将
#WITH_PYTHON_LAYER := 1 
修改为 
WITH_PYTHON_LAYER := 1
...
 
...
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
修改为: 
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial       
...
 
...
将
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
		-gencode arch=compute_20,code=sm_21 \
		-gencode arch=compute_30,code=sm_30 \
		-gencode arch=compute_35,code=sm_35 \
		-gencode arch=compute_50,code=sm_50 \
		-gencode arch=compute_52,code=sm_52 \
		-gencode arch=compute_60,code=sm_60 \
		-gencode arch=compute_61,code=sm_61 \
		-gencode arch=compute_61,code=compute_61
修改为
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
		-gencode arch=compute_35,code=sm_35 \
		-gencode arch=compute_50,code=sm_50 \
		-gencode arch=compute_52,code=sm_52 \
		-gencode arch=compute_60,code=sm_60 \
		-gencode arch=compute_61,code=sm_61 \
		-gencode arch=compute_61,code=compute_61
...

然后修改 Caffe 目录下的Makefile 文件:

...
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
...
 
...
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
...

然后修改/usr/local/cuda/include/host_config.h文件

...
将
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
...

编译 ,在caffe目录下执行:

sudo make all -j8

在编译的过程中遇到了:

libcudart.so.10.0: cannot open shared object file: No such file or directory

显示连接不上cuda的相关动态库,首先确认了环境变量/etc/profile~/.bashrc中有含了:

export PATH=$PATH:/usr/local/cuda-10.0/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-10.0/lib64
source /etc/profile

使得配置文件生效之后在编译

若仍提示相同的错误,则执行以下命令,将相应的库文件复制到/usr/lib

sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig

ldconfig命令是一个动态链接库管理命令,是为了让动态链接库为系统共享。

然后重新进入Caffe目录下进行编译

sudo make clean
sudo make all -j8

再测试Caffe是否安装成功:

sudo make runtest -j8

测试时间较长,但是觉得还是有必要进行一下,因为如果Caffe编译不成功导致后面OpenPose编译不成功,问题不好排查,当终端出现RUN OK等绿色字样意味着编译成功了,便可以进行下一步

OpenPose编译

首先安装Cmake GUI

sudo apt-get install cmake-gui

下载官方给的caffemodel

cd models
./getModels.sh
cd ..

下载速度看网络情况,也可选择一下连接手动下载模型权重,放在对应的模型目录下

http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/body_25/pose_iter_584000.caffemodel
http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/coco/pose_iter_440000.caffemodel
http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/mpi/pose_iter_160000.caffemodel
http://posefs1.perception.cs.cmu.edu/OpenPose/models/face/pose_iter_116000.caffemodel
http://posefs1.perception.cs.cmu.edu/OpenPose/models/hand/pose_iter_102000.caffemodel

打开Cmake GUI对OpenPose进行编译,进入图形化界面后where is the source codeWhere to build the binaries分别填写OpenPose项目目录和build目录

然后在左下角的configure

在这里插入图片描述

默认就这两个选项,点击Finish,完成之后选择
在这里插入图片描述

这个时候要填写之前配置的caffe路径Caffe_INCLUDE_DIRS这个填写caffe目录下的include目录/home/user/openpose/3rdparty/caffe/include

caffe_LIBS填写home/user/openpose/3rdparty/caffe/build/lib/libcaffe.so然后去掉最上面的BUILD_CAFFE选项,点击下方的Generate,结束

编译OpenPose:

cd build
sudo make -j8

可能会出现fatal error:caffe/proto/caffe.pd.h : No such file or diretory 解决方案:找到最初编译caffe的文件夹,使用命令行(生成caffe.pb.h,然后新建空文件夹移过去)

protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto

接下来就可以编译成功了

测试OpenPose

测试视频:

# human pose
./build/examples/openpose/openpose.bin --video examples/media/video.avi
# human pose with face and hands
./build/examples/openpose/openpose.bin --video examples/media/video.avi --face --hand

摄像头测试:

# human pose
./build/examples/openpose/openpose.bin
# human pose with face and hands
./build/examples/openpose/openpose.bin --face --hand

最后成功显示
在这里插入图片描述

相关文章:

  • Fibonacci数列实现C++
  • 剑值offer之替换空格
  • 剑指offer之反转链表
  • 剑指offer之重建二叉树、用两个栈实现队列、旋转数组的最小数字
  • 剑指offer(c++)-01.数组中重复的数字
  • 剑指offer(c++)-02.二维数组中的查找
  • 操作系统-01.操作系统的运行机制和体系结构
  • 剑指offer(c++)-03.替换空格
  • 剑指offer(c++)-04.从尾到头打印链表
  • 操作系统-02.中断与异常及系统调用
  • 操作系统-03.进程的定义、组成、组织方式、特征
  • 操作系统-04.进程的状态与切换
  • 操作系统-05.进程控制
  • 操作系统-06.进程通信
  • 操作系统-06.线程概念、多线程模型
  • [译] 怎样写一个基础的编译器
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • android 一些 utils
  • js算法-归并排序(merge_sort)
  • Python进阶细节
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Vue 重置组件到初始状态
  • vue2.0项目引入element-ui
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 入门级的git使用指北
  • 三栏布局总结
  • 使用common-codec进行md5加密
  • - 转 Ext2.0 form使用实例
  • Android开发者必备:推荐一款助力开发的开源APP
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #13 yum、编译安装与sed命令的使用
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (1)Android开发优化---------UI优化
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2020)Java后端开发----(面试题和笔试题)
  • (python)数据结构---字典
  • (多级缓存)缓存同步
  • (二)构建dubbo分布式平台-平台功能导图
  • (三)终结任务
  • (算法)N皇后问题
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Mysql的优化设置
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .describe() python_Python-Win32com-Excel
  • .net mvc 获取url中controller和action
  • .Net Redis的秒杀Dome和异步执行
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?