Datawhale之春晚机器人跳舞复刻

Datawhale之春晚机器人跳舞复刻

任务目标

  • 输入:文本动作描述或已有视频
  • 输出:机器人动作(robot_motion*.pkl)与可视化(Web/viser/MuJoCo)
  • 支持多人轨迹(all tracks)与多机器人 MuJoCo 录制

主要流程

复制代码
Prompt / Video -> PromptHMR -> SMPL-X -> GMR -> Robot Motion

常用命令:

cmd 复制代码
python scripts/generate_video.py --model seedance --action "动作序列:角色向前走四步"
python scripts/extract_pose.py --project data/video_001
python scripts/convert_to_robot.py --project data/video_001 --all-tracks
python scripts/visualize.py --project data/video_001 --robot-viser --robot-all

租用服务器,开始部署环境

如果大家的电脑算力不够的话可以租用服务器

租用服务器连接:算力市场

镜像选择isaaclab

点击进入jupyterlab

新机器复刻

在jupyterlab的命令行终端当中输入如下指令

cmd 复制代码
cd gpufree-data
git clone https://github.com/datawhalechina/every-embodied.git
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
cd third_party
# 3. 克隆 GMR 
git clone --depth 1 https://github.com/taeyoun811/GMR.git GMR
# 4. 克隆 PromptHMR 
git clone --depth 1 https://github.com/taeyoun811/PromptHMR.git PromptHMR
cd ..

如果下载速度过慢可以看这个链接进行github加速的配置
github加速配置

  • 默认进行位置: every-embodied/07-机器人操作、运动控制/Locomotion/video2robot

检测patch交付包

cmd 复制代码
git apply patches/main.patch
git -C third_party/PromptHMR apply ../../patches/prompthmr.patch
git -C third_party/GMR apply ../../patches/gmr.patch

使用YAML进行一键创建环境

cmd 复制代码
conda env create -f envs/gmr.yml
conda config --add envs_dirs /root/gpufree-data/conda_envs
# 第一个环境安装在系统盘,第二个安装在数据盘,避免超过磁盘负荷(系统和数据盘分别为30G和50G)
conda env create -f envs/phmr.yml

若环境名已经存在:

cmd 复制代码
conda env update -n gmr -f envs/gmr.yml --prune
conda env update -n phmr -f envs/phmr.yml --prune

GMR环境

在上述运行完YAML的过程当中会有

需要我们手动安装包

cmd 复制代码
conda create -n gmr python=3.10 -y
conda activate gmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
pip install -e .
# gmr下还需要安装

pip install loop-rate-limiters
pip install smplx
pip install imageio
pip install mink
pip install rich
pip install imageio[ffmpeg]

PromptHMR环境(4090场景)

cmd 复制代码
conda create -n phmr python=3.10 -y
conda activate phmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
# bash scripts/install.sh --pt_version=2.4 不推荐使用默认一键安装,bug较多

下面可以移动到手动配置的相关内容,从而可以稳定运行

cmd 复制代码
conda activate phmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
pip install -r requirements.txt

mkdir -p python_libs
git clone https://github.com/Arthur151/chumpy python_libs/chumpy
python -m pip install -e python_libs/chumpy --no-build-isolation

运行完如上内容之后打开一个新的终端,输入以下指令:

cmd 复制代码
export PYTHONPATH=$PYTHONPATH:/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
echo 'export PYTHONPATH=$PYTHONPATH:/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR' >> ~/.bashrc
source ~/.bashrc

返回phmr环境下的终端:

cmd 复制代码
conda install -c conda-forge eigen -y

下面就是一些编译内容的下载,大概是下面这些内容

这块大家在下载的时候请务必保持耐心

下载模型权重

下载相关模型权重(推荐方案):

注意镜像的一些操作

cmd 复制代码
git-lfs install
git lfs clone https://huggingface.co/Datawhale/spring-festival-wushu-robot-replication-model

下载相关模型权重(替代方案):

cmd 复制代码
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
bash scripts/fetch_smplx.sh
bash scripts/fetch_data.sh

更新模型下载文件

文件更新说明

跳转路径

cmd 复制代码
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR  

输入

cmd 复制代码
vim /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR/scripts/fetch_smplx.sh

然后将下面的代码进行复制粘贴

cmd 复制代码
#!/bin/bash
urle () { [[ "${1}" ]] || return 1; local LANG=C i x; for (( i = 0; i < ${#1}; i++ )); do x="${1:i:1}"; [[ "${x}" == [a-zA-Z0-9.~-] ]] && echo -n "${x}" || printf '%%%02X' "'${x}"; done; echo; }

download_with_auth () {
    local username="$1"
    local password="$2"
    local url="$3"
    local output="$4"

    if command -v aria2c >/dev/null 2>&1; then
        aria2c \
            --allow-overwrite=true \
            --continue=true \
            --check-certificate=false \
            --file-allocation=none \
            --max-connection-per-server=16 \
            --split=16 \
            --min-split-size=1M \
            --timeout=60 \
            --retry-wait=5 \
            --max-tries=0 \
            --header='Content-Type: application/x-www-form-urlencoded' \
            --post-data="username=${username}&password=${password}" \
            --out="$(basename "${output}")" \
            --dir="$(dirname "${output}")" \
            "${url}"
    else
        echo "warning: aria2c not found, falling back to wget"
        wget \
            --post-data "username=${username}&password=${password}" \
            "${url}" \
            -O "${output}" \
            --no-check-certificate \
            --continue
    fi
}

# # SMPL-X model
echo -e "\nYou need to register at https://smpl-x.is.tue.mpg.de"
read -p "Username (SMPL-X):" username
read -s -p "Password (SMPL-X):" password
echo
username=$(urle $username)
password=$(urle $password)

mkdir -p data/body_models
download_with_auth "$username" "$password" 'https://download.is.tue.mpg.de/download.php?domain=smplx&sfile=models_smplx_v1_1.zip' './data/body_models/smplx.zip'
unzip data/body_models/smplx.zip -d data/body_models/smplx
mv data/body_models/smplx/models/smplx/* data/body_models/smplx/
rm -rf data/body_models/smplx/models
rm -rf data/body_models/smplx.zip


# SMPL Male and Female model
echo -e "\nYou need to register at https://smpl.is.tue.mpg.de"
read -p "Username (SMPL):" username
read -s -p "Password (SMPL):" password
echo
username=$(urle $username)
password=$(urle $password)

mkdir -p data/body_models/smpl
download_with_auth "$username" "$password" 'https://download.is.tue.mpg.de/download.php?domain=smpl&sfile=SMPL_python_v.1.1.0.zip' './data/body_models/smpl/smpl.zip'
unzip data/body_models/smpl/smpl.zip -d data/body_models/smpl/smpl
mv data/body_models/smpl/smpl/SMPL_python_v.1.1.0/smpl/models/basicmodel_neutral_lbs_10_207_0_v1.1.0.pkl data/body_models/smpl/SMPL_NEUTRAL.pkl
mv data/body_models/smpl/smpl/SMPL_python_v.1.1.0/smpl/models/basicmodel_f_lbs_10_207_0_v1.1.0.pkl data/body_models/smpl/SMPL_FEMALE.pkl
mv data/body_models/smpl/smpl/SMPL_python_v.1.1.0/smpl/models/basicmodel_m_lbs_10_207_0_v1.1.0.pkl data/body_models/smpl/SMPL_MALE.pkl
rm -rf data/body_models/smpl/smpl
rm -rf data/body_models/smpl/smpl.zip

# Supplementary files
gdown --folder -O ./data/ https://drive.google.com/drive/folders/1JU7CuU2rKkwD7WWjvSZJKpQFFk_Z6NL7?usp=share_link
gdown -O ./data/body_models/smplx/ 1v9Qy7ZXWcTM8_a9K2nSLyyVrJMFYcUOk

写入失败时处理方法

  • 临时目录保存 :w /tmp/temp_smplx.sh
  • :q!退出Vim
  • 输入如下指令:sudo cp /tmp/temp_smplx.sh ~/gpufree-data/every-embodied/07-机器人操作、运动控 制/Locomotion/video2robot/third_party/PromptHMR/scripts/fetch_smplx.sh

Web UI启动 (稳定版)

cmd 复制代码
conda activate phmr
python -m pip install -U fastapi "uvicorn[standard]" jinja2 python-multipart

pkill -f "video2robot/visualization/robot_viser.py"
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
export VISER_FIXED_PORT=8789
python -m uvicorn web.app:app --host 0.0.0.0 --port 8000

访问:http://localhost:8000

说明:

  • 固定 VISER_FIXED_PORT 是为了避免 iframe 随机端口拒绝连接

  • Web 已支持中文界面、Seedance、上传视频、铁皮/彩色切换

  • 豆包网页端生成机器人视频prompt:帮我生成图片:帮我优化prompt,生成中国武术视频,人物需要完全在视频范围内

  • 上传视频执行即可,详见视频教程

  • 运行时会自动下载一些torch的小模型,如果下载失败,尝试手动

cmd 复制代码
mkdir -p /root/.cache/torch/hub/checkpoints && rm -f /root/.cache/torch/hub/v0.10.0.zip.*.partial && wget -O /root/.cache/torch/hub/v0.10.0.zip https://github.com/pytorch/vision/zipball/v0.10.0 && wget -O /root/.cache/torch/hub/checkpoints/deeplabv3_resnet50_coco-cd0a2569.pth https://download.pytorch.org/models/deeplabv3_resnet50_coco-cd0a2569.pth && ls -lh /root/.cache/torch/hub/v0.10.0.zip /root/.cache/torch/hub/checkpoints/deeplabv3_resnet50_coco-cd0a2569.pth

多人轨迹可视化

生成多轨机器人动作

cmd 复制代码
conda activate gmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
python scripts/convert_to_robot.py --project data/video_001 --all-tracks

robot-viser 显示所有轨迹

cmd 复制代码
python scripts/visualize.py --project data/video_001 --robot-viser --robot-all

视频导出

单机器人

cmd 复制代码
conda activate gmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/GMR
python scripts/vis_robot_motion.py \
  --robot unitree_g1 \
  --robot_motion_path /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/robot_motion.pkl \
  --record_video \
  --video_path /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/mujoco_robot.mp4

多机器人

cmd 复制代码
python scripts/vis_robot_motion_multi.py \
  --robot unitree_g1 \
  --robot_motion_paths \
    /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/robot_motion_track_1.pkl \
    /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/robot_motion_track_2.pkl \
  --record_video \
  --max_seconds 10 \
  --camera_azimuth 0 \
  --video_path /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/mujoco_multi_robot_10s_front.mp4

github加速配置

全局配置

直接配置gh-proxy.org的为全局代理,后续所有的git操作都将通过gh-proxy.org进行加速。

cmd 复制代码
# 配置全局代理
git config --global url."https://gh-proxy.org/https://github.com/".insteadOf "https://github.com/"

单次git clone加速

如果只需要单次git clone加速,可以在clone命令中添加代理参数。只需要将clone的地址前面添加https://gh-proxy.org/,不要用空格。

cmd 复制代码
git clone https://gh-proxy.org/https://github.com/WJQSERVER-STUDIO/ghproxy

环境名词前缀修改

这个环境名称太长了,利用如下命令修改:

cmd 复制代码
conda config --set env_prompt '({name})'
bash

手动配置方案参考(phmr环境)

cmd 复制代码
# =============================================================================
# 📦 第一部分:克隆主仓库并进入目标子目录
# =============================================================================

# 克隆 Every-Embodied 主仓库(Datawhale 开源项目)
git clone https://github.com/datawhalechina/every-embodied.git  

# 进入仓库中的视频驱动机器人控制模块目录
# 路径说明:07-机器人操作、运动控制 → Locomotion → video2robot
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot


# =============================================================================
# 🐍 第二部分:创建并激活 Conda 虚拟环境
# =============================================================================

# 创建名为 phmr 的虚拟环境,指定 Python 3.10,-y 表示自动确认
conda create -n phmr python=3.10 -y

# 激活刚创建的虚拟环境
conda activate phmr

# 进入 PromptHMR 第三方依赖目录(绝对路径,请根据你的实际路径调整)
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR

# 安装 PromptHMR 项目的基础 Python 依赖
pip install -r requirements.txt


# =============================================================================
# 🔧 第三部分:安装 chumpy 库(特殊处理)
# =============================================================================

# 创建本地第三方库存储目录
mkdir -p python_libs

# 克隆 chumpy 库(一个用于自动微分的旧版 NumPy 扩展,已不再维护)
# 注意:这里克隆到 python_libs/chumpy 子目录,避免污染全局环境
git clone https://github.com/Arthur151/chumpy   python_libs/chumpy

# 以可编辑模式安装 chumpy
# --no-build-isolation: 跳过构建隔离,避免依赖冲突(chumpy 需要特殊处理)
python -m pip install -e python_libs/chumpy --no-build-isolation


# =============================================================================
# ⚙️ 第四部分:配置 PYTHONPATH 环境变量
# =============================================================================

# 临时设置 PYTHONPATH,让 Python 能找到 PromptHMR 模块
# $PYTHONPATH: 保留原有路径;后面追加新路径
export PYTHONPATH=$PYTHONPATH:/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR

# 永久生效:将上述环境变量写入 ~/.bashrc(用户登录时自动加载)
echo 'export PYTHONPATH=$PYTHONPATH:/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR' >> ~/.bashrc

# 立即生效:重新加载 bash 配置文件
source ~/.bashrc


# =============================================================================
# 📐 第五部分:安装 Eigen 库(C++ 线性代数库)
# =============================================================================

# 通过 conda-forge 频道安装 eigen3 开发库(后续编译 C++ 扩展需要)
conda install -c conda-forge eigen -y


# =============================================================================
# 🔨 第六部分:编译 droidcalib 模块(相机标定工具)
# =============================================================================

# 【被注释掉的备选方案】手动设置 CPATH 并安装(如果下面方法失败可尝试)
# export CPATH="$CONDA_PREFIX/include/eigen3:${CPATH:-}" && cd ... && python setup.py install

# 重新加载 conda 环境配置(确保环境变量生效)
source /opt/conda/etc/profile.d/conda.sh

# 重新激活 phmr 环境(防止上下文丢失)
conda activate phmr

# 再次确保 eigen 已安装(防御性编程,避免后续编译失败)
conda install -c conda-forge eigen -y

# 设置 CPATH 环境变量,告诉编译器在哪里找 eigen3 头文件
# ${CPATH:-} 表示:如果 CPATH 已存在则保留,否则为空
export CPATH="$CONDA_PREFIX/include/eigen3:${CPATH:-}"

# 进入 droidcalib 源码目录
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR/pipeline/droidcalib

# 编译并安装 droidcalib(会调用 C++ 编译器)
python setup.py install


# =============================================================================
# 🔗 第七部分:配置 LD_LIBRARY_PATH(动态库路径)
# =============================================================================

# 临时设置动态链接库搜索路径,确保程序能找到:
# - PyTorch 的 C++ 库
# - 系统 CUDA 库
# - 其他系统级共享库
export LD_LIBRARY_PATH="/root/gpufree-data/conda_envs/phmr/lib/python3.10/site-packages/torch/lib:/usr/lib/x86_64-linux-gnu:/usr/local/cuda/lib64:/usr/lib64:/usr/local/lib"

# 永久生效:写入 ~/.bashrc
echo 'export LD_LIBRARY_PATH="/root/gpufree-data/conda_envs/phmr/lib/python3.10/site-packages/torch/lib:/usr/lib/x86_64-linux-gnu:/usr/local/cuda/lib64:/usr/lib64:/usr/local/lib"' >> ~/.bashrc

# 立即生效
source ~/.bashrc

# ⚠️ 注意:如果更换环境或升级 PyTorch,需要更新此路径


# =============================================================================
# 🔧 第八部分:编译 lietorch 库(李群李代数优化库)
# =============================================================================

# 确保 python_libs 目录存在
mkdir -p python_libs
cd python_libs

# 克隆 lietorch 仓库(用于视觉 SLAM/位姿优化的 PyTorch 扩展)
git clone https://github.com/princeton-vl/lietorch.git  

# 进入目录
cd lietorch

# 初始化子模块(lietorch 依赖其他第三方代码)
git submodule update --init --recursive

# 编译安装(会调用 CUDA 编译器,确保已安装正确版本的 CUDA)
python setup.py install

# 返回上层目录
cd ../..


# =============================================================================
# 🔍 第九部分:安装 Detectron2(Facebook 目标检测框架)
# =============================================================================

# 克隆 Detectron2 官方仓库
git clone https://github.com/facebookresearch/detectron2.git  

# 进入目录(使用绝对路径,确保位置正确)
cd /root/gpufree-data/detectron2

# 以可编辑模式安装,--no-build-isolation 避免依赖冲突
pip install -e . --no-build-isolation


# =============================================================================
# ✂️ 第十部分:安装 SAM2(Segment Anything Model 2)
# =============================================================================

# 克隆 Meta 发布的 SAM2 仓库(用于视频/图像分割)
git clone https://github.com/facebookresearch/segment-anything-2.git  

# 进入目录并安装
cd segment-anything-2
pip install -e . --no-build-isolation


# =============================================================================
# 🛠️ 第十一部分:代码适配修改(修复兼容性问题)
# =============================================================================

# 使用 sed 命令修改 sam2_video_predictor.py 文件
# 作用:将函数导入语句中的 "load_video_frames, load_video_frames_from_np" 
#      替换为仅 "load_video_frames"
# 原因:可能是上游代码变更导致函数名/签名不兼容,需要手动修复
sed -i 's/load_video_frames, load_video_frames_from_np/load_video_frames/g' /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR/pipeline/detector/sam2_video_predictor.py


# =============================================================================
# 📦 第十二部分:补充安装关键 PyTorch 扩展
# =============================================================================

# 安装 torch-scatter(用于图神经网络/稀疏张量操作)
# ⚠️ 此命令编译时间较长(可能 10~30 分钟),请耐心等待,勿中断
python -m pip install -U torch-scatter --no-build-isolation

# 安装 xformers(Meta 发布的 PyTorch 加速库,提升 Transformer 效率)
python -m pip install -U xformers

下载相关模型权重(推荐方案):

cmd 复制代码
git-lfs install
git lfs clone https://huggingface.co/Datawhale/spring-festival-wushu-robot-replication-model

下载相关模型权重(替代方案):

cmd 复制代码
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
bash scripts/fetch_smplx.sh
bash scripts/fetch_data.sh

配置子模块

cmd 复制代码
cd  /root/gpufree-data/video2robot/third_party/PromptHMR/python_libs/ietonrch
git submodule update --init  --recursive

合并 Patch 命令(快速同步改动)

如果你是在原始仓库基础上进行同步,可以使用以下命令合并补丁:

cmd 复制代码
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot

# 1. 确保子模块已初始化
git submodule update --init --recursive

# 2. 应用主仓库补丁
git apply patches/main.patch

# 3. 应用 PromptHMR 补丁
git -C third_party/PromptHMR apply ../../patches/prompthmr.patch

# 4. 应用 GMR 补丁
git -C third_party/GMR apply ../../patches/gmr.patch

参考链接

AI+具身智能
春晚机器人跳舞复刻

相关推荐
渣渣盟1 小时前
Flink实现TopN URL访问量统计
大数据·flink·scala
wAIxiSeu2 小时前
万字长文解析Apache Paimon
大数据
网络工程小王2 小时前
【大数据技术详解】——HIVE技术(学习笔记)
大数据·hive·hadoop
田里的水稻2 小时前
ARM_运行openClaw
arm开发·人工智能·算法·机器人
天空属于哈夫克32 小时前
企微私域自动回复机器人:构建 7×24 小时智能响应系统
机器人·开源·企业微信
刘一说2 小时前
Git 工具知识全景图:从核心概念到高效协作实践
大数据·git·elasticsearch
2501_941982052 小时前
电商企微机器人:从自动欢迎语到订单转化,打造私域闭环
机器人·企业微信
MarsLord2 小时前
ElasticSearch快速入门实战(1)-索引、别名、建模最佳实践
大数据·elasticsearch·搜索引擎
阿干tkl2 小时前
openEuler 部署 Elasticsearch单节点与集群方式
elasticsearch