公司软件使用笔记
文章目录
- bvh_to_smpl_vis-master
- 使用(渲染单个npz)
- 把BVH转成SMPL.npz
- 批量渲染.npz文件夹
- Blender 可视化方式
- somaX
- Npz2bvh
- soma_retargeter
- mjlab
bvh_to_smpl_vis-master
把 BVH 动作捕捉文件转换成 SMPL 人体模型动画,然后渲染成视频。
文件结构:
bvh_to_smpl_vis-master/ │ ├── bvh_to_smpl.py ← 核心①:单个 BVH → npz(SMPLX 参数) ├── bvhs2smpls.py ← 核心①批量版:整个文件夹的 BVH → npz ├── bvhs2smpls_lafan1.py ← 核心①特化版:针对 lafan1 数据集格式 │ ├── smpl_render.py ← 核心②:单个 npz → 渲染视频 ├── smpls_render.py ← 核心②批量版:整个文件夹的 npz → 视频 │ ├── import_motion_blender.py← 备选方案:在 Blender 里可视化(不用 PyTorch3D) ├── mujoco_vis.py ← 备选方案:在 MuJoCo 物理引擎里可视化 ├── npz_test.py ← 工具:测试 npz 文件内容 │ ├── utils/ ← 工具库(渲染器、坐标变换、SMPL 构建) │ ├── renderer.py → PyTorch3D 渲染器封装 │ ├── geo_transform.py → 3D 几何变换工具 │ ├── smpl_utils.py → SMPL/SMPLX 模型构建 │ └── renderer_tools.py → 渲染辅助函数 │ ├── body_model/ ← SMPL 模型依赖文件 │ ├── smpl_neutral_J_regressor.pt → 关节回归器 │ ├── smplx2smpl_sparse.pt → SMPLX→SMPL 转换矩阵 │ └── smpl_model/ → SMPL/SMPLX 原始模型参数 │ ├── SMPLSim/ ← 第三方库:SMPL 物理仿真相关 ├── retarget/ ← 动作重定向(将动作迁移到不同角色) │ ├── bvh_files/ ← 你自己的 BVH 动作文件(中文命名) ├── lafan1/ ← lafan1 数据集 ├── data/ ← 其他测试数据 ├── video_output/ ← 渲染出的视频输出目录 │ └── requirements.txt ← Python 依赖列表使用(渲染单个npz)
如果你已经有 SMPL 格式的 .npz 动作文件,可以直接运行:
cd/home/zww/bvh_to_smpl_vis-master conda activate smpl_vis python smpl_render.py--filepath/你的路径/xxx.npz把BVH转成SMPL.npz
如果你现在是 .bvh 文件,需要先转成 SMPL 格式:
cd/home/zww/bvh_to_smpl_vis-master conda activate smpl_vis python bvhs2smpls.py /你的/bvh文件夹路径 /保存npz的路径zb:
python bvhs2smpls.py /home/zww/下载/Date_set注意:第一个参数是 BVH 文件夹,不是单个 .bvh 文件。
批量渲染.npz文件夹
如果你已经有一整个文件夹的 .npz,可以用:
python smpls_render.py--npzpath/你的npz文件夹路径Blender 可视化方式
如果你想在 Blender 里看动作,README 说需要:
- 安装 Blender 2.9.0
- 安装 SMPL add-on
- 在 Blender 里添加 SMPL 人体模型
- 打开 Blender 的 Scripting 面板
- 运行:
import_motion_blender.pysomaX
这一步是将上一步转换出来的npz文件进行格式统一,然后才能进入到soma_retargeter里面进行动作查看和修改。
为了方便,直接进行整个文件夹的转换,然后文件输出的位置就是输入文件夹的下面,然后名称加了_somaX的后缀。
python-mtools.convert_amass_to_soma_REN_somaX\--input-dir /home/zww/下载/Date_set/Date_set_npz\--no-render\--batch-size32还额外加了一个保护:因为输出文件夹是在输入文件夹里面,如果第二次运行,程序不会把已经转换出来的 *_somaX 文件夹再次当作输入去重复转换。否则会出现越转越多的问题。
如果你想覆盖已经生成过的文件,可以加:
--no-skip-existing完整命令:
python-mtools.convert_amass_to_soma_REN_somaX\--input-dir /home/zww/SOMA-X/out\--no-render\--no-skip-existingNpz2bvh
然后使用npz2bvh_root_translation_keep_hips_base_Retageter_auto_output.py将文件转化成为bvh文件:
python npz2bvh_root_translation_keep_hips_base_Retageter_auto_output.py\--input/home/zww/下载/Date_set/Date_set_npz/Date_set_npz_somaX/move_front_small_normal_001_feng.npz\--template-bvh assets/motions/bvh/Neutral_walk_forward_002__A057.bvh\--translation-transform x-90\--position-transform same_as_translation\--model-rotate x-90\--ground-axis y\--zero-origin\--translation-joint-name Root\--root-joint-name Hips\--ground-offset-105\--position-channels-mode root_translation_keep_hips_basesoma_retargeter
启动虚拟环境:
conda activate soma-retargeter打开newton:
PYTHONPATH=/home/zww/soma-retargeter:$PYTHONPATHpython ./app/bvh_to_csv_converter.py\--config./assets/default_bvh_to_csv_converter_config.json\--viewergl然后是进行一系列的参数调整,其中在soma_to_x3_retargeter_config.json中:
t_weight 大: 脚更贴近人体脚的位置 脚更不容易漂 但膝盖可能被拉弯、身体可能被压低 t_weight 小: 脚位置更自由 膝盖更容易自然 但脚可能漂浮、穿地、滑动 r_weight 大: 脚掌朝向更贴近人体动作 脚尖角度更准确 但可能导致脚掌侧翻、踝关节扭得厉害 r_weight 小: 脚掌方向更自由 踝关节压力小 但脚尖方向可能不准mjlab
在更换完成soma_retargeter的模型之后需要再增加mjlab的模型,然后再进行训练。
soma_retargeter输出的文件是csv形式的,想要进行训练的话需要提前将文件转换成mjlab可以接受的npz模式:
uv run python src/mjlab/scripts/csv_to_npz_x03_fixed.py\--input-file /home/zww/soma-retargeter/output/date_walk.csv\--output-name date_walk\--input-fps30\--output-fps50\--devicecuda:0然后再使用如下命令进行训练:
MUJOCO_GL=eglCUDA_VISIBLE_DEVICES=0uv run train\Mjlab-Tracking-Flat-X03B\--registry-name1023949235-usst/csv_to_npz/date_walk:latest\--env.scene.num-envs1024使用如下命令进行训练:
uv run play Mjlab-Tracking-Flat-X03B\--wandb-run-path1023949235-usst/mjlab/709e1z2a使用如下命令进行训练结果查看
uv run play Mjlab-Tracking-Flat-X03B\--wandb-run-path1023949235-usst/mjlab/709e1z2a