RobustCap
这是我们发表在SIGGRAPH ASIA 2023上的论文"融合单目图像和稀疏IMU信号实现实时人体运动捕捉"的代码。本仓库包含系统实现和评估。详见项目主页。
安装
conda create -n RobustCap python=3.8
conda activate RobustCap
pip install -r requirements.txt
从官方网站安装pytorch cuda版本。
数据
SMPL文件、预训练模型和测试数据
- 从这里或官方网站下载smpl文件。解压并放置在
models/
目录下。 - 下载预训练模型和数据并放置在
data/
目录下。 - 对于AIST++评估,下载未对齐文件并放置在
data/dataset_work/AIST
目录下。
评估
我们提供了AIST++、TotalCapture、3DPW和3DPW-OCC的评估代码。由于优化的随机性,结果可能与论文中报告的数值略有不同。
python evaluate.py
可视化
使用open3d或叠加方式进行可视化
我们提供了AIST++的可视化代码。你可以使用evaluate.py中的view_aist函数来可视化结果。通过指定seq_idx和cam_idx,你可以可视化特定序列和相机的结果。设置vis=True可以可视化叠加结果(你需要下载原始AIST++视频并将它们放在config.paths.aist_raw_dir中)。使用body_model.view_motion可以可视化open3d结果。
使用Unity进行可视化
你可以使用evaluate.py中的view_aist_unity函数来可视化结果。通过指定seq_idx和cam_idx,你可以可视化特定序列和相机的结果。
- 从这里下载Unity资产。
- 创建一个Unity 3D项目并使用下载的资产,然后创建一个UserData/Motion目录。
- 对于Unity脚本,使用Set Motion(将Fps设置为60)并不要使用Record Video。
- 运行view_aist_unity并将生成的文件复制到UserData/Motion。
然后你可以运行Unity脚本来可视化结果。
实时演示
我们使用6个Xsens Dot IMU和一个单目网络摄像头。对于不同的硬件,你可能需要修改代码。
- 在
config.Live
中配置IMU和相机参数。 - 校准相机。我们在
articulate/utils/executables/RGB_camera_calibration.py
中提供了一个简单的校准代码。然后将相机内参复制到config.Live.camera_intrinsic
。 - 使用
articulate/utils/executables/xsens_dot_server_no_gui.py
代码连接IMU。按照命令行中的指示进行操作,包括"连接、开始流式传输、重置航向、打印传感器角度(确保在对齐IMU时角度相似)"。 - 运行实时检测器代码
live_detector.py
,你可以看到相机读数。 - 运行Unity场景来渲染结果。你可以编写自己的代码或使用Transpose(https://github.com/Xinyu-Yi/TransPose)中的场景。
- 运行实时服务器代码
live_server.py
来运行我们的网络并将结果发送到Unity。
完成这些步骤后,你可以在Unity中看到实时结果。如果遇到任何问题,请随时提出问题。
训练
运行net/sig_mp.py
。
引用
@inproceedings{pan2023fusing,
title={Fusing Monocular Images and Sparse IMU Signals for Real-time Human Motion Capture},
author={Pan, Shaohua and Ma, Qi and Yi, Xinyu and Hu, Weifeng and Wang, Xiong and Zhou, Xingkang and Li, Jijunnan and Xu, Feng},
booktitle={SIGGRAPH Asia 2023 Conference Papers},
pages={1--11},
year={2023}
}