软硬件环境
- 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上面开源,项目地址是 github.com/facebookres…
基本原理
frankmocap算法使用SMPL-X人体模型。给定一张彩色图片,通过两个网络模块分别预测手部姿态和人体姿态,然后再通过整合模块将手和身体组合在一起,得到最终的3D全身模型,整个流程如下图所示

更多理论性的内容请参考对应论文,地址是 arxiv.org/pdf/2008.08…
安装步骤
首先我们准备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,pytorch1.6和CUDA10.1可以使用下面的命令安装
python -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/torch1.6/index.html
如果你的pytorch和CUDA的版本跟我的不一样,可以到链接 github.com/facebookres… ,选择自己的环境,获取对应的安装命令

如果想做姿态渲染,则需要安装Pytorch3D
pip install pytorch3d
下载第三方库和模型文件
sh scripts/install_frankmocap.sh
这个install_frankmocap.sh会去调用另外四个sh脚本,主要是去下载一些文件、压缩包,还有就是编译安装hand_object_detector,下载期间是各种网络问题,而且,需要吐槽一下的是,这几个sh写的并不友好,已经存在的文件或文件夹,重新执行的话,还是会重新下载。所以,如果是自己下载这些文件时,可以在对应sh脚本中将已经结束的步骤注释掉,这样可以省掉很多的时间。
最后所有相关的模型文件都在存储在一个extra_data的文件夹里,我把它打包好了,放在网盘里,自己去下。
百度网盘链接:pan.baidu.com/s/1JYyKQcNx…, 提取码:ljha
这里还需要注意一点,在安装hand_object_detector的时候,我的环境出现了如下的错误

经过翻看官方issues,发现是gcc的版本引起的,默认18.04系统自带gcc7.5,要解决上述的错误,需要将gcc降低至7.3以下,而且无法通过apt install的方法解决,需要从源码去编译gcc,这样的话风险就比较大了,由于我目前的机器,内容较多,就不去测试了。关于这个问题的具体的内容可以参考文末给出的链接。
最后去下载SMPL/SMPL-X模型,来到官方的网站 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,工程化还有很长的路要走,我们持续关注。