使用单RGB帧进行野外实时3D手部姿态估计
本仓库包含测试工作的脚本: "使用单RGB帧进行野外实时3D手部姿态估计"
您可以从此处下载完整论文
概述
我们的方法使用单个普通RGB相机实时估计一个或多个人手的完整3D姿态。这一领域的最新工作在使用RGBD输入时取得了令人印象深刻的进展。然而,自RGBD传感器推出以来,针对单色输入的情况鲜有进展。
我们利用最新的深度学习进展,结合生成式手部姿态估计技术的威力,实现了在无限制场景中的实时单RGB 3D手部姿态估计。具体而言,给定一个RGB图像和相关的相机标定信息,我们使用最先进的检测器来定位手部。
随后,我们运行一个预训练的网络,估计手部关节的2D位置(即Gouidis et al或Simon et al的方法)。在最后一步,我们使用非线性最小二乘法,将3D手模型拟合到估计的2D关节位置上,从而恢复3D手部姿态。
要求
这项工作依赖于一组(目前)封闭源代码的C++库,这些库是在CVRL-FORTH开发的。我们提供了Ubuntu 16.04二进制版本。请按照此处的说明下载并正确设置环境。
您需要Python 3.x来运行脚本。 需要以下Python库:
sudo pip3 install numpy opencv-python
如果您使用Goudis等人提供的2D关节预训练网络,您还需要安装tensorflow。
pip3 install tensorflow-gpu
注意:该脚本经过了tensorflow 1.12.0和CUDA 9.0的测试
如果您使用Simon等人的2D关节估计器,您需要安装Openpose和PyOpenPose。请按照这些项目的安装说明进行操作。
手部检测器
在我们的论文中,我们使用重新训练的YOLO检测器来检测(左、右)手部和头部。 该项目中的代码库不包括该管道的一部分。 示例脚本使用初始边界框和跟踪来裁剪用户的手部,并将其传递给2D关节估计器。
使用
您可以使用任何2D关节估计器进行3D手部姿态估计。我们提供了两个不同的示例脚本:
handpose.py
handpose.py脚本使用Gouidis等人提出的2D手部关节估计器。
handpose_simon_backend.py
此脚本使用Simon等人提出的2D手部关节估计器。您需要先正确安装Openpose和PyOpenPose,然后才能运行此脚本。
Docker
由于这是一个(非常)旧的项目,在现代Linux发行版上测试它的唯一好办法就是使用Docker。
您需要从Nvidia下载cudnn7 deb软件包(需要注册),并将它们放在cudnn文件夹中。 有关详细信息,请参见此处。
最后,请前往openpose_models文件夹,运行getModels.sh脚本来下载所需的openpose模型。
您可以使用带有vscode的devcontainer,或者从CLI使用docker-compose进行构建。 这将创建一个带有ubuntu16.04和所有必需库的映像,以测试该项目。 您可以从CLI使用以下命令进行构建和运行:
docker-compose build
docker-compose up -d
xhost +
docker exec -it devcontainer_dev_1 python3 handpose_simon_backend.py