软硬件环境
- 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
,工程化还有很长的路要走,我们持续关注。