软硬件环境
- ubuntu 18.04 64bit
- NVidia GTX 1070Ti
- cuda 10.1
- cudnn 7.6.35
- pytorch 1.6
- anaconda with python 3.7
前言
前文介绍过的 OpenPose人体姿态估计 实现的是2D
姿态估计,本文给大家介绍的是3D
的人体姿态估计,项目名称是frankmocap
,是香港中文大学联合Facebook AI
研究院提出的人体姿态和形状估计算法,已经在github
上面开源,项目地址是 https://github.com/facebookresearch/frankmocap
基本原理
frankmocap
算法使用SMPL-X
人体模型。给定一张彩色图片,通过两个网络模块分别预测手部姿态和人体姿态,然后再通过整合模块将手和身体组合在一起,得到最终的3D
全身模型,整个流程如下图所示
更多理论性的内容请参考对应论文,地址是 https://arxiv.org/pdf/2008.08324.pdf
安装步骤
首先我们准备python
的虚拟环境
conda create -n frankmocap python=3.7
conda activate frankmocap
然后开始拉取github
上的源码,并安装常规的依赖库
git clone https://github.com/facebookresearch/frankmocap.git
cd frankmocap
pip install cython
pip install -r docs/requirements.txt
如果想体验手部动作捕捉,则需要安装Detectron2
,pytorch
1.6和CUDA
10.1可以使用下面的命令安装
python -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/torch1.6/index.html
如果你的pytorch
和CUDA
的版本跟我的不一样,可以到链接 https://github.com/facebookresearch/detectron2/blob/master/INSTALL.md ,选择自己的环境,获取对应的安装命令
如果想做姿态渲染,则需要安装Pytorch3D
pip install pytorch3d
下载第三方库和模型文件
sh scripts/install_frankmocap.sh
这个install_frankmocap.sh
会去调用另外四个sh
脚本,主要是去下载一些文件、压缩包,还有就是编译安装hand_object_detector
,下载期间是各种网络问题,而且,需要吐槽一下的是,这几个sh
写的并不友好,已经存在的文件或文件夹,重新执行的话,还是会重新下载。所以,如果是自己下载这些文件时,可以在对应sh
脚本中将已经结束的步骤注释掉,这样可以省掉很多的时间。
最后所有相关的模型文件都在存储在一个extra_data
的文件夹里,我把它打包好了,放在网盘里,自己去下。
百度网盘链接:https://pan.baidu.com/s/1JYyKQcNxbnOIcEy1eKmzZQ, 提取码:ljha
这里还需要注意一点,在安装hand_object_detector
的时候,我的环境出现了如下的错误
经过翻看官方issues
,发现是gcc
的版本引起的,默认18.04
系统自带gcc
7.5,要解决上述的错误,需要将gcc
降低至7.3以下,而且无法通过apt install
的方法解决,需要从源码去编译gcc
,这样的话风险就比较大了,由于我目前的机器,内容较多,就不去测试了。关于这个问题的具体的内容可以参考文末给出的链接。
最后去下载SMPL/SMPL-X
模型,来到官方的网站 http://smplify.is.tue.mpg.de/login,需要注册账号
注册好了之后,就可以去下载模型文件、数据集和源代码了,这里我们只下载模型文件
将下载好的压缩包解压后,把其中的SMPLX_NEUTRAL.pkl
文件拷贝到extra_data/smpl
文件夹下
效果测试
捕捉身体运动
python -m demo.demo_bodymocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output
捕捉手部运动
python -m demo.demo_handmocap --input_path ./sample_data/han_hand_short.mp4 --out_dir ./mocap_output
捕捉全身运动
python -m demo.demo_frankmocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output
最后2个命令操作,由于上边hand_object_detector
报错,这边暂时没办法测试,后续有条件的时候再测,下图是官方给出的测试效果图。
最后需要说明的是,目前这套算法的处理速度还是很慢,在没有手部运动捕捉的情况下,1070Ti
也达不到3fps
,工程化还有很长的路要走,我们持续关注。