欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

3D人体和手势运动估计

人工智能 迷途小书童 3年前 (2020-11-09) 3612次浏览 0个评论

软硬件环境

  • 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 全身模型,整个流程如下图所示

frankmocap

更多理论性的内容请参考对应论文,地址是 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

如果想体验手部动作捕捉,则需要安装 Detectron2pytorch 1.6和 CUDA 10.1可以使用下面的命令安装

python -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/torch1.6/index.html

如果你的 pytorchCUDA 的版本跟我的不一样,可以到链接 https://github.com/facebookresearch/detectron2/blob/master/INSTALL.md ,选择自己的环境,获取对应的安装命令

frankmocap

如果想做姿态渲染,则需要安装 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 的时候,我的环境出现了如下的错误

frankmocap

经过翻看官方 issues,发现是 gcc 的版本引起的,默认 18.04 系统自带 gcc 7.5,要解决上述的错误,需要将 gcc 降低至7.3以下,而且无法通过 apt install 的方法解决,需要从源码去编译 gcc,这样的话风险就比较大了,由于我目前的机器,内容较多,就不去测试了。关于这个问题的具体的内容可以参考文末给出的链接。

最后去下载 SMPL/SMPL-X 模型,来到官方的网站 http://smplify.is.tue.mpg.de/login,需要注册账号

frankmocap

注册好了之后,就可以去下载模型文件、数据集和源代码了,这里我们只下载模型文件

frankmocap

将下载好的压缩包解压后,把其中的 SMPLX_NEUTRAL.pkl 文件拷贝到 extra_data/smpl 文件夹下

效果测试

捕捉身体运动

python -m demo.demo_bodymocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output

frankmocap

frankmocap

捕捉手部运动

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 报错,这边暂时没办法测试,后续有条件的时候再测,下图是官方给出的测试效果图。

3D人体和手势运动估计

3D人体和手势运动估计

最后需要说明的是,目前这套算法的处理速度还是很慢,在没有手部运动捕捉的情况下,1070Ti 也达不到 3fps,工程化还有很长的路要走,我们持续关注。

参考资料

喜欢 (0)

您必须 登录 才能发表评论!