GVHMR视频动捕部署
# AI视频动捕+GVHMR+部署
GVHMR(Gravity-View Human Motion Recovery)是一项基于重力视图坐标的AI视频动作捕捉技术,由浙江大学团队开发,并在SIGGRAPH Asia 2024上发表。该技术旨在从单目视频中恢复人体在世界坐标系下的三维运动,适用于动画制作、虚拟现实(VR/AR)、机器人学习等场景。
bilibili【GVHMR】【 千面】 视频生成动作效果对比 (opens new window)
- 单从相机视角来看效果和其他类似项目效果差不多,比较普通,
- 但是从世界视角视频可看出来,生成的动作非常的稳定而且保真度很高,不像其他项目,生成数据只能看摄像机视角效果,换其他视角就完全崩坏。
# 选取视频要点:
- 角色和画面背景 分明,不然生成手脚乱扯。
- 视频画面不要有镜头拼接,角色因剪辑出现位置变动,会干扰动作生成。
- 角色上下身分明,四肢清晰,像动捕演员穿的黑色连体服生成的效果较差。
- 空翻等涉及空中旋转的视频,生成效果较差,应该是SMPL模型的训练数据中没有这些动作。
# 生成数据
人体主要 21 根骨骼的动画,不包括手指,包含:
- 盆骨的世界坐标系旋转,位移。
- 其他骨骼的 局部坐标系 旋转值。
- 相机信息。
- 2D关节点数据,3D关节点数据。
- 帧率 30 。
建议直接使用 Blender , 有现成的代码,直接导入数据后转成 FBX。
可以自定义数据文件,但需要自行解析 旋转,位移,等骨骼动画数据。
# 部署
本文是在 win10 上部署,而原项目是 linux 项目,所以部分依赖库比较难( PDVO 就没安装成功).
主要是各种库,pypi 上没有 编译好的 whl 包,需要下载过来再编译,这样还得安装 Visual Studio ,非常麻烦。
个人建议是只是 WSL 上的Ubuntu 进行部署安装,更简单更完整。
如果有需要,可以直接复制 GVHMR 文件夹,到你自己的电脑上,无需再创建环境,只 需要安装 支持 的 CUDA 12.1 即可运行。
链接: https://pan.baidu.com/s/1hiVV0T9HN2PHeR7U7O0ztg (opens new window) 提取码: e9ai
直接下载 百度云上的 GVHMR 压缩包,解压成下面这样路径,然后下载 8GB的模型数据,应该就可以直接使用.
blender插件|模型FBX下载 https://sundaybox.cc/DownloadContent/Tools/GVHMR/ (opens new window)
# CUDA版本
先检查你电脑上的 CUDA 版本,本文测试时使用的 CUDA 12.1 版本,而且是可以多版本共存。
环境变量 PATH 中 的 CUDA 路径 哪个版本在前面,就用谁。
安装之后 可以 进入 命令行 工具 , 查看最后一次安装的版本,我这里是先 安装 121版本,后安装 113 ,所以显示 的11.3版本。
- nvcc -V
更多关于 安装 CUDA 细节 多cuda 共存_多个cuda版本共存-CSDN博客 (opens new window)
CUDA 下载 https://developer.nvidia.com/cuda-toolkit-archive (opens new window)
# 创建 Python 环境
Anaconda 或者 miniconda3 都是可以的。
这里,我是先把 gvhmr 拉下来,然后直接把项目文件夹创建为 python 虚拟环境。
我这里 使用 Anaconda Prompt (Anaconda3) 命令行工具,创建环境。
# python 310
# 我是先把 GVHMR 项目下载到 D:\Anaconda3\envs
git clone https://github.com/zju3dv/GVHMR
#进入 项目文件夹
cd GVHMR
#在当前文件夹创建 创建 python 环境
conda create -y -n gvhmr python=3.10
#激活环境
conda activate gvhmr
2
3
4
5
6
7
8
9
10
11
12
13
git clone https://github.com/zju3dv/GVHMR
这个命令是 从github.com (opens new window) 上把 GVHMR 项目下载过来,需要单独安装 git , 才有该命令。
# 模型数据
项目使用的模型需要从 huggingface.co 上单独下载,有近 8 GB,有科学上网都是比较慢的,所以这里我提供 百度云盘 下载:
链接: https://pan.baidu.com/s/1hiVV0T9HN2PHeR7U7O0ztg (opens new window) 提取码: e9ai
下载到的 inputs 文件夹 直接放到项目文件夹中即可。
# 安装各种依赖库
- 在使用 pip install 之前,先修改 pip 为国内的 清华源或者阿里源,这样安装会快很多。
先手动安装 Torch 系统系列, 然后直接 pip install -r requirements.txt 安装全部依赖。
aiohappyeyeballs==2.6.1
aiohttp==3.11.16
aiosignal==1.3.2
antlr4-python3-runtime==4.9.3
async-timeout==5.0.1
attrs==25.3.0
autocommand==2.2.2
av==13.0.0
backports.tarfile==1.2.0
black==25.1.0
certifi==2025.1.31
charset-normalizer==3.4.1
cheroot==10.0.1
CherryPy==18.10.0
chumpy==0.70
click==8.1.8
colorama==0.4.6
colorlog==6.9.0
contourpy==1.3.1
cycler==0.12.1
Cython==3.0.12
cython_bbox==0.1.5
einops==0.8.1
ffmpeg-python==0.2.0
filelock==3.18.0
fonttools==4.57.0
frozenlist==1.5.0
fsspec==2025.3.2
future==1.0.0
gvhmr==1.0.0
huggingface-hub==0.30.2
hydra-colorlog==1.2.0
hydra-core==1.3.0
hydra_zen==0.14.0
idna==3.10
imageio==2.34.1
intel-openmp==2021.4.0
iopath==0.1.10
jaraco.collections==5.1.0
jaraco.context==6.0.1
jaraco.functools==4.1.0
jaraco.text==4.0.0
Jinja2==3.1.6
joblib==1.4.2
kiwisolver==1.4.8
lapx==0.5.11.post1
lazy_loader==0.4
lightning==2.3.0
lightning-utilities==0.14.3
markdown-it-py==3.0.0
MarkupSafe==3.0.2
matplotlib==3.10.1
mdurl==0.1.2
mkl==2021.4.0
more-itertools==10.6.0
mpmath==1.3.0
multidict==6.4.2
mypy-extensions==1.0.0
networkx==3.4.2
numpy==1.23.5
omegaconf==2.3.0
opencv-python==4.11.0.86
packaging==24.2
pandas==2.2.3
pathspec==0.12.1
pillow==11.1.0
platformdirs==4.3.7
portalocker==3.1.1
portend==3.2.0
propcache==0.3.1
protobuf==6.30.2
psutil==7.0.0
py-cpuinfo==9.0.0
pycolmap==3.11.1
Pygments==2.19.1
pyparsing==3.2.3
python-dateutil==2.9.0.post0
pytorch-lightning==2.5.1
#pytorch3d @ file:///D:/Anaconda3/envs/pytorch3d-0.7.8%2Bpt2.3.0cu121-cp310-cp310-win_amd64.whl#sha256=b7a6628ea8939b11c7d73251dee54072732fea75144e146c3f6ccb216baf097c
pytz==2025.2
pywin32==310
PyYAML==6.0.2
requests==2.32.3
rich==14.0.0
safetensors==0.5.3
scikit-image==0.25.2
scipy==1.15.2
seaborn==0.13.2
six==1.17.0
smplx==0.1.28
sympy==1.13.3
tbb==2021.13.1
tempora==5.8.0
tensorboardX==2.6.2.2
termcolor==3.0.1
tifffile==2025.3.30
timm==0.9.12
tomli==2.2.1
#torch @ file:///D:/Anaconda3/envs/torch-2.3.0%2Bcu121-cp310-cp310-win_amd64.whl#sha256=002027d18a9c054f08fe9cf7a729e041229e783e065a71349015dcccc9a7137e
#torch_scatter @ file:///D:/Anaconda3/envs/torch_scatter-2.1.2%2Bpt23cu121-cp310-cp310-win_amd64.whl#sha256=14814e3f6b20af75b98ff35401f5e64baa2c2382266ba02005fbc93378b9f76b
#torchaudio @ file:///D:/Anaconda3/envs/torchaudio-2.3.0%2Bcu121-cp310-cp310-win_amd64.whl#sha256=969a49fb31afd3c0d1c4b01d74514d61c44e25d7de4dbc2c4fec317fe31dc702
torchmetrics==1.7.1
#torchvision @ file:///D:/Anaconda3/envs/torchvision-0.18.0%2Bcu121-cp310-cp310-win_amd64.whl#sha256=4ab207a0f35c8c2a43da91f19ee9248520239633dc8e11a9e4a2e77b076bb9db
tqdm==4.67.1
transforms3d==0.4.2
trimesh==4.6.6
typing_extensions==4.13.1
tzdata==2025.2
ultralytics==8.2.42
ultralytics-thop==2.0.14
urllib3==2.3.0
wis3d==1.0.1
yacs==0.1.8
yarl==1.19.0
zc.lockfile==3.0.post1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
很多项目开源时提供的 requirements.txt 文件都没有标记 各种依赖库 版本号,导致过作者发布 几个月或一两年之后,再来拉取项目,因为各种依赖库都更新有变化 就很难跑起来。
# 手动安装 Torch
下面 4 个包,很多pypi 源上不一定有,所以得自行下载手动安装。
下载链接: download.pytorch.org/whl/cu121/ (opens new window)
- torch , torch-2.3.0+cu121-cp310-cp310-win_amd64.whl
- torch_scatter , torch_scatter-2.1.2+pt23cu121-cp310-cp310-win_amd64.whl
- torchaudio ,torchaudio-2.3.0+cu121-cp310-cp310-win_amd64.whl
- torchvision ,torchvision-0.18.0+cu121-cp310-cp310-win_amd64.whl
先安装 4 个包,再使用 requirements.txt 安装其他依赖,最好再 安装 一次 下面两个:
pip install torch-2.3.0+cu121-cp310-cp310-win_amd64.whl
pip install numpy==1.23.5
因为其他库,会修改 torch ,numpy 版本,所以最后再他们两,确保不会被修改。
# 安装 pytorch3d
清华源上没有这个包,如果直接 pip 安装,还得编译,所以还是直接去 其他人编译好的包方便。
Release pytorch3d-0.7.8 · MiroPsota/torch_packages_builder (opens new window)
- pytorch3d-0.7.8+pt2.3.0cu121-cp310-cp310-win_amd64.whl
至此 安装就算完成。
# 安装 ffmpeg
主要用来拼合视频,如果你不拼合视频,不安装 ffmpeg 也可以。
把下载 的 ffmpeg 文件夹路径 加到 系统环境变量中 就算是安装,如下图。
# 创建快速激活环境 bat
每次使用时,需要激活 GVHMR 这个 python环境,还要 进入 到 GVHMR 项目的 根目录底下。
创建 一个 activate_GVHMR.bat 文件,将下面内容黏贴进去。
@echo off
call C:\ProgramData\miniconda3\Scripts\activate.bat D:\Anaconda3\envs\GVHMR
cd /d D:\Anaconda3\envs\GVHMR
cmd /k
2
3
4
这样 双击 activate_GVHMR.bat 即可 激活 环境,还能进入 根路径,如下图。
# 生成身体部分
demo3.py
项目是没有 UI工具的,是 直接输入 命令 运行 py脚本 。
- python tools/demo/demo3.py --video=D:\Anaconda\envs\GVHMR\docs\gGfm7ARsN4Cb7UIB.mp4 -s --person=0
--video | 必填,是要生成的视频文件路径,不支持中文路径。 |
-s | 必填,静态相机,拍摄镜头是固定的,如不填,需要安装 依赖项目 PDVO |
--person | 必填,角色 编号,默认给 0 ,如果视频里有多个角色,可以选填其他的 , |
-output_root | 选填,输出路径文件,输出根目录,默认在 outputs/demo 下 |
其他的 可以 看 tools/demo/demo3.py
def parse_args_to_cfg()
用于解析 执行 demo.py 文件时的 命令 参数。
def render_incam()
渲染相机视角的视频。
def render_global()
渲染 世界 视角的视频
#渲染 世界视角 的参数 设置
def get_global_cameras_static()
cam_height_degree=25 # 上下方向的旋转,大角度是顶视角
target_center_height=1.0 # 相机距离系数,越大离角色远
vec_rot=30 #水平方向的 旋转, 0 是完全正面
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 输出数据
如果你各种依赖库安装的没问题,运行之后,可以得到一些文件。
- 0_input_vide.mp4 , 你用来生成动作的原始视频。
- 1_incam.mp4_person-0.mp4 , 以镜头视口渲染的结果画面和原始视频叠加的新视频。
- 2_global.mp4 , 以世界视角渲染的视频。
- 3_horiz.mp4 , 上面 3 个视频 拼合的视频。
- hmr4d_results.pt , 生成的角色数据,numpy 二进制格式。
- hmr4d_results.pt_person-0.pkl , 生成的 骨骼动画数据,pickle 二进制格式。
如下代码,保存 pkl 文件,其中 包含人体的 21 骨骼的动画数据,这个文件用来导进 Blender 中。
# 导人 Blender
hmr4d_results.pt_person-0.pkl 文件提取出骨骼动画数据,而角色模型和骨骼是 FBX 文件 .
在 tools/demo/demo3.py 这个py 脚本在渲染模型的同时 也会保存 动画数据,用插件解析成骨骼动画并导入 Blender 。
SMPL_maya.zip (opens new window) 是 SMPL 的角色模型FBX 文件,有 男女两种。
- basicModel_f_lbs_10_207_0_v1.0.2.fbx
- basicModel_m_lbs_10_207_0_v1.0.2.fbx
该模型文件单位为 米,导入 3dsMax 或 Maya 需要注意。
- import_anim_GVHMR_b4.2_v2.blend.zip (opens new window) ,Blender 文件和导入 插件。
如下图,填上你下载 的 fbx 模型
文件路径,生成得的 pkl 数据文件
, 执行脚本即可。
# Blender 导出 FBX
个人还是习惯在 3dsMax 或者 MotionBuilder 设置动画,所以可以将动画 从 Blender 中导出。
导出 FBX之后,就可以导进 3dsMax (cm单位) , 如果直接导入 MotionBuilder 模型会因单位问题非常小。
个人建议在 3dsMax 将模型和 骨骼的缩放数值设置为 100 ,然后用场景缩放插件,将模型缩放到合适大小。
# 导入 MotionBuilder
待研发
# 生成手指部分
手指部分是识别使用另外 一个项目:HaMeR 可以从单帧图片上识别出手势,而且不限制数量。
geopavlakos/hamer: HaMeR: Reconstructing Hands in 3D with Transformers (opens new window)
流程是将 视频 分解成多帧图片序列,交给 HAMER 生成的 手指数据帧 , 然后将数据合并进 GVHMR 生成的身体数据中。
将 HAMER 生成的 手指数据帧合并进 GVHMR 数据
D:\Anaconda\envs\GVHMR\Tools\demo\ptframe2pkl-v1.py
使用视频生成 手指 手掌 姿势数据
D:\Anaconda\envs\HAMER2\hamer\demo-video-2.py
2
3
4
5