天晴动作工具组文档
首页
C3相关
天晴盒子
脚本文档
开发公约
  • MAXScript2020 Help (opens new window)
  • 3dsmax-2023-MAXScript Help (opens new window)
  • 3dsmax-2023-Max-Python Help (opens new window)
  • DeveloperSDK2023 Help (opens new window)
教程
更新
关于
  • 动画重定向
  • 3ds Max 文件降版本
  • GIF播放器
  • 表情绑定助手
  • MAXtoUnrealTools
  • MMD4Max
  • AnimFiltersMax2021
  • 分类
  • 标签
  • 归档
首页
C3相关
天晴盒子
脚本文档
开发公约
  • MAXScript2020 Help (opens new window)
  • 3dsmax-2023-MAXScript Help (opens new window)
  • 3dsmax-2023-Max-Python Help (opens new window)
  • DeveloperSDK2023 Help (opens new window)
教程
更新
关于
  • 动画重定向
  • 3ds Max 文件降版本
  • GIF播放器
  • 表情绑定助手
  • MAXtoUnrealTools
  • MMD4Max
  • AnimFiltersMax2021
  • 分类
  • 标签
  • 归档
  • CATRig

    • 创建CAT
    • 创建特别注意
    • 动画-图层
    • 动画-IK_Arm_手
    • 动画-IK_Leg_腿
    • 动画-导入-bip
    • 动画-IK固定
    • 动画-缩放拉伸
    • 导出-Motion-Extraction-Node
  • NetSDK(C#)动画曲线插件课程
  • 蒙皮增强
  • 游戏中的动画拉伸效果 - 上
  • FBXMetaData
  • Engine

    • Unity上下半身动画融混合
    • Unity资源单位
    • UE4_AnimDynamics
    • UE4_Dynamic_Simulated_Ponytail
    • UE4_径向模糊
    • UE4CharacterMovement
    • montage
    • UE4基础材质
    • unity_DynamicBone
    • 快速创建包围盒UE4
    • 跳跃动作注意
    • 虚幻EditorUtilityBlueprint_动作资源批量工具
  • MaxPython_Msx

    • Python执行MAXScript
    • 3dsMax 安装 NumPy
    • Python 编译 pyd
    • Sublime Text 发送到 3ds Max
    • Visual Studio Code 发送到 3ds Max
    • 3dsMax_Python中文编码
    • 3dsMax PySide 控件键盘输入问题
    • Max不同版本的Python差异
    • FBX_SDK_动画操作
    • Python3编译Pyd-vc14.16
  • iPhone表情捕捉3dsMax流程
  • 面部蒙皮权重处理
  • Cascadeur动画调研
  • AI视频动捕产品调研
  • RigNet自动绑定角色-AI- 部署测试
  • MotoricaAI-MoGen 动画合成
  • 3dsMax与Spine互导工具
  • EasyMocap视频动捕部署测试
    • 安装 ffmpeg
    • 测试1
    • 输出数据
    • Keypoints3d 导入 Max
    • yolov5
    • 缺少 yolov4.weights
    • 缺少 parew3dpw_config.yaml
    • 缺少 Jregressorbody25.npy
    • 直接输出 数据
    • 数据格式
    • 单独的视频导出动作
  • FreeMocap无标记视频动捕部署
  • RootMotion和InPlace动画差异
  • 虚幻物理资产导出XML
  • 关闭骨骼移动带转父级的特性
  • 简易Biped绑定框架方案
  • 关于蒙皮权重镜像匹配问题介绍以及解决方案
  • GVHMR视频动捕部署
  • 教程
2025-01-15
目录

EasyMocap视频动捕部署测试

# EasyMocap视频动捕部署测试

EasyMocap 是浙江大学一团队在 2021 发布的多目和单目视频画面动捕项目,现以无人维护更新。

浙大三维视觉团队提出Neural Body,单目RGB视频重建人体三维模型,无需预训练网络 (CVPR'21 Best Paper Candidate) (opens new window)

# 结论

  • 单从摄像机空间来看,效果非常不错,但是从2D 人体姿态推导出 3D人体姿态效果较差。
  • 该项目无配套的动画数据导出工具,使用的二次开发成本较高。
  • 无导出相机运动数据,意味着只有固定相机拍摄的视频生成的动作数据才可用。
  • 有更多更好类似的项目供选择,如**Pose2Sim (opens new window)** ** , **FreeMocap (opens new window)

本次测试只涉及该项目中的单目视频动捕流程,多目视频流程并未测试。

测试体验主机

美术中心研发部 192.168.251.94 
D:\Anaconda\envs\easymocap\EasyMocap

1
2
3

# 创建虚拟环境

下载软件包

descript

单独下载 如上图 3 个软包

下载cuda116 CUDA Toolkit 11.6 Downloads | NVIDIA Developer (opens new window)

下载 torch-1.12+cu116 download.pytorch.org/whl/cu116/torch/ (opens new window)

下载 torchvision-0.13.0+cu116 download.pytorch.org/whl/cu116/torchvision/ (opens new window)

使用 git 下载 EasyMocap 项目到本地,本次测试在研发部公共主机 192.168.251.94

conda create -n easymocap python=3.9 -y
conda activate easymocap

pip install D:\wwwNDTools\easymocap_whl\torch-1.12.0+cu116-cp39-cp39-win_amd64.whl


pip install D:\wwwNDTools\easymocap_whl\torchvision-0.13.0+cu116-cp39-cp39-win_amd64.whl

python -m pip install -r D:\Anaconda\envs\easymocap\EasyMocap\requirements.txt

pip install spconv-cu116
# install pyrender if you have a screen
python -m pip install pyrender

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git clone https://github.com/zju3dv/EasyMocap.git
1

路径:D:\Anaconda\envs\easymocap\EasyMocap

descript

创建好虚拟环境之后,最好是 在 Anconda Prompt 中 Cd 到EasyMocap 项目文件中来执行 其他命令,如下,是安装 EasyMocap 项目

python setup.py develop
1

使用过程 中,建议是给系统设置 全局代理,项目启动过程中自动下载各种 模型,如果网络正常,更省事。

# 安装 ffmpeg

因为有涉及到 视频 处理,那肯定是少不了ffmpeg ,下载好 ffmpeg 放在任意文件夹,然后将 ffmpeg 的bin 文件夹路径添加导出 系统变量 中,如下图。

descript

打开命令行 cmd , 直接 输入 ffmpeg ,如果有下图 这样的显示,说明安装成功。

descript

# 生成模型和视频合成

descript

Quick Start | easymocap-public-doc (chingswy.github.io) (opens new window)

如上图,直接输入视频,自动合成带 SMPL模型的新视频。

# 测试1

如下图,在任意路径下,创建 videos 文件夹,然后将 mp4 视频放入,如下图。

descript

然后执行 以下 命令

emc --data D:\Anaconda\envs\easymocap\EasyMocap\config\datasets\svimage.yml --exp D:\Anaconda\envs\easymocap\EasyMocap\config\1v1p\hrnet_pare_finetune.yml --root D:\Anaconda\envs\easymocap\EasyMocap\data\\youtebe --ranges 0 59 1 --subs v01
1
emc 该项目的 集成运行工具
data 处理流程配置
exp 导出流程配置
root 视频文件夹路径
ranges 视频帧数, 开始帧,结束帧,间隔
subs 视频文件名

descript

实现类似效果的其他项目

mkocabas/VIBE: Official implementation of CVPR2020 paper "VIBE: Video Inference for Human Body Pose and Shape Estimation" (github.com) (opens new window)

# 输出数据

emc 命令输出,项目路径下的 output 文件夹,每次都会覆盖上一次的输出结果,注意改名文件夹。

descript

Keypoints2d pkl 单帧后缀文件,是什么数据不清楚
Keypoints3d json 单帧文件, yolov 人体姿态识别的 骨点数据 3D坐标
pare pkl 单帧文件,
person npy 单帧数据
smpl json 单帧,应该是 SMLP 模型的 pose 数据,但是项目提供的 convert2bvh.py (opens new window) 无法正常读取。
cfg_data.yml 处里的视频信息配置
cfg_exp.yml 输出处理流程配置
render.mp4 3D姿态的 SMPL 模型的视频合成
vis_keypoints2d 2D姿态识别的 视频合成

此流程使用 yolov5 进行人体姿态识别,可能是因为其引用的 yolov5 更新问题其提供的 convert2bvh.py (opens new window) 已无法正常使用,所以没法导出动画进入 3dsMax 中测试效果。

# Keypoints3d 导入 Max

因为项目并没有提供可用的将最终数据转换为骨骼动画的工具,为了验证数据的质量,只能将 Keypoints3d 的骨点位置数据导入 3dsMax 中查看。

注意,该Keypoints3d数据是相机空间运作数据,如果视频是非固定相机拍摄,那直接导入 3dsMax 之后会比奇怪,角色会有与动作无关的整体飘动,也没找到如何输出相机运动的数据用以处理。

Keypoints3d_To_3dsMax2022.py

from glob import glob
from os.path import join
import json

from pymxs import runtime as mxs

#https://chingswy.github.io/easymocap-public-doc/database/2_keypoints.html

def read_json(path):
    with open(path) as f:
        data = json.load(f)
    return data

def get_json_frame(path):
    filenames = sorted(glob(join(path, '*.json')))
    frame_data = []
    for ifile in filenames :
        json_data = read_json(ifile)
        json_data_pose = json_data[0]['keypoints3d']
        frame_data.append(json_data_pose)
    return frame_data

def create_body():
    body_root = mxs.point(name="Root")

    pt_body_25 = []
    for i in range(25):
        if i >= 15 and i < 19 :
            pass
        else:
            pt = mxs.Sphere(name=f"pt_{i}",radius=5)
            pt.parent = body_root
            pt_body_25.append(pt)

    return body_root,pt_body_25


#body_root,pt_body_25 = create_body()

path = r'\\TQ0301025011\Anaconda\envs\easymocap\EasyMocap\output\sv1p_internet-rotate\keypoints3d'

#根节点
body_root = mxs.getNodeByName(f"Root")
body_root.transform = mxs.execute("(matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0])")


json_frame = get_json_frame(path)

mxs.animationRange = mxs.interval(0,len(json_frame))
with pymxs.animate(True):
    for i in range(len(json_frame)):
        frame = json_frame[i]
        with pymxs.attime(i):
            for p in range(25):
                if i >= 15 and i < 19 :
                    pass
                else:
                    pt = mxs.getNodeByName(f"pt_{p}")
                    if pt :
                        x = frame[p][0] * 100.0  
                        y = frame[p][1] * 100.0  
                        z = frame[p][2] * 100.0  

                        pt.pos = mxs.point3(x,y,z)




body_root.transform = mxs.execute("matrix3 [1,0,0] [0,0,-1] [0,1,0] [0,0,0]")


1
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

# 报错解决

# yolov5

在执行 合成视频任务时,自动下载 https://github.com/ultralytics/yolov5 (opens new window) , 如果自动下载失败,可手动下载

descript

# 缺少 yolov4.weights

descript

https://objects.githubusercontent.com/github-production-release-asset-2e65be/75388965/ba4b6380-889c-11ea-9751-f994f5961796?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240905%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240905T031838Z&X-Amz-Expires=300&X-Amz-Signature=ec7e987d230e984b138d26bdaf4e5bbc00abe1684ef17f0eb76d5f87fe5f9b14&X-Amz-SignedHeaders=host&actor_id=18095923&key_id=0&repo_id=75388965&response-content-disposition=attachment%3B%20filename%3Dyolov4.weights&response-content-type=application%2Foctet-stream (opens new window)

https://github.com/AlexeyAB/darknet?tab=readme-ov-file (opens new window)

# 缺少 pare_w_3dpw_config.yaml

如下图,提示 缺少 pare_w_3dpw_config.yaml

是因为缺少 pare-github-data.zip 这个包里的文件,可以手动下载 之后解压。

descript

def try_to_download():
    model_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'models', 'pare')
    cmd = 'wget https://www.dropbox.com/s/aeulffqzb3zmh8x/pare-github-data.zip'
    os.system(cmd)
    os.makedirs(model_dir, exist_ok=True)
    cmd = 'unzip pare-github-data.zip -d {}'.format(model_dir)
    os.system(cmd)

CFG = 'models/pare/data/pare/checkpoints/pare_w_3dpw_config.yaml'
CKPT = 'models/pare/data/pare/checkpoints/pare_w_3dpw_checkpoint.ckpt'


1
2
3
4
5
6
7
8
9
10
11
12

Missing pare_w_3dpw_config.yaml · Issue #406 · zju3dv/EasyMocap (github.com) (opens new window)

也可以使用 gdown 这个谷歌网盘分享下载 工具 ,下载 pare-github-data.zip

gdown 1qIq0CBBj-O6wVc9nJXG-JDEtWPzRQ4KC
1

descript

# 缺少 J_regressor_body25.npy

如下图,同样工具的自动下载失效。

descript

descript

https://github.com/zju3dv/EasyMocap/raw/master/data/smplx/J_regressor_body25.npy (opens new window)

https://github.com/zju3dv/EasyMocap/raw/master/data/smplx/J_regressor_body25.npy
1

手动下载 过来即可。

descript

# 其他操作流程 (跑不通)

因为项目较老又无人维护,而且配套开发的文档也差,很多项目给的测试案例都无法跑通。

# 直接输出 数据

EasyMocap/doc/quickstart.md at master · zju3dv/EasyMocap (github.com) (opens new window)

# 数据格式

EasyMocap/doc/02_output.md at master · zju3dv/EasyMocap (github.com) (opens new window)

输出的 smpl json 帧文件导入 blender

1/3 Easymocap Install Raw Recording - 2021 04 29 04 21 43 (youtube.com) (opens new window)

MOCAP Import (gumroad.com) (opens new window)

# 单独的视频导出动作

convert2bvh.py reshape 错误 ·问题 #380 ·zju3dv/EasyMocap (github.com) (opens new window)

Hand/finger pose estimation · Issue #25 · zju3dv/EasyMocap (github.com) (opens new window)

carlosedubarreto/b3d_mocap_import: addon for blender to import mocap data from tools like easymocap, frankmocap and Vibe (github.com) (opens new window)

descript

3dsMax与Spine互导工具
FreeMocap无标记视频动捕部署

← 3dsMax与Spine互导工具 FreeMocap无标记视频动捕部署→

最近更新
01
GVHMR视频动捕部署
04-20
02
关于蒙皮权重镜像匹配问题介绍以及解决方案
03-19
03
简易Biped绑定框架方案
03-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 ND|99u:199505| 鄂ICP备2022012500号 | 鄂公网安备 42022202000122号

共产主义:是对生产资料的共享,不是对生活资料财产的均分

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×