| # 💃 SMPL & Rendering |
|
|
| Try Champ with your dance videos! It may take time to setup the environment, follow the instruction step by step🐢, report issue when necessary. |
| > Notice that it has been tested only on Linux. Windows user may encounter some environment issues for pyrender. |
|
|
|
|
| ## Install dependencies |
|
|
| 1. Install [4D-Humans](https://github.com/shubham-goel/4D-Humans) |
| ```shell |
| git clone https://github.com/shubham-goel/4D-Humans.git |
| conda create --name 4D-humans python=3.10 |
| conda activate 4D-humans |
| pip install -e 4D-Humans |
| ``` |
| |
| or you can install via pip by a simple command |
| ```shell |
| pip install git+https://github.com/shubham-goel/4D-Humans |
| ``` |
| |
| 2. Install [detectron2](https://github.com/facebookresearch/detectron2) |
| |
| gcc and g++ 12 is necessary to build detectron2 |
| |
| ```shell |
| conda install -c conda-forge gcc=12 gxx=12 |
| ``` |
| Then |
| ```shell |
| git clone https://github.com/facebookresearch/detectron2 |
| |
| pip install -e detectron2 |
| ``` |
| or you can install via pip by a simple command |
| ```shell |
| pip install git+https://github.com/facebookresearch/detectron2 |
| ``` |
| |
| 3. Install [Blender](https://www.blender.org/) |
|
|
| You can download Blender 3.x version for your operation system from this url [https://download.blender.org/release/Blender3.6](https://download.blender.org/release/Blender3.6/). |
| |
| ## Download models |
|
|
| 1. [DWPose for controlnet](https://github.com/IDEA-Research/DWPose?tab=readme-ov-file#-dwpose-for-controlnet) |
|
|
| First, you need to download our Pose model dw-ll_ucoco_384.onnx ([baidu](https://pan.baidu.com/s/1nuBjw-KKSxD_BkpmwXUJiw?pwd=28d7), [google](https://drive.google.com/file/d/12L8E2oAgZy4VACGSK9RaZBZrfgx7VTA2/view?usp=sharing)) and Det model yolox_l.onnx ([baidu](https://pan.baidu.com/s/1fpfIVpv5ypo4c1bUlzkMYQ?pwd=mjdn), [google](https://drive.google.com/file/d/1w9pXC8tT0p9ndMN-CArp1__b2GbzewWI/view)), then put them into `${PROJECT_ROOT}/annotator/ckpts/`. |
| |
|
|
| 2. HMR2 checkpoints |
|
|
| ```shell |
| python -m scripts.pretrained_models.download --hmr2 |
| ``` |
| 3. Detectron2 model |
| |
| ```shell |
| python -m scripts.pretrained_models.download --detectron2 |
| ``` |
| 4. SMPL model |
| |
| Please download the SMPL model from the official site [https://smpl.is.tue.mpg.de/download.php](https://smpl.is.tue.mpg.de/download.php). |
| Then move the `.pkl` model to `4D-Humans/data`: |
| ```shell |
| mkdir -p 4D-Humans/data/ |
| mv basicModel_neutral_lbs_10_207_0_v1.0.0.pkl 4D-Humans/data/ |
| ``` |
| |
|
|
| ## Produce motion data |
|
|
|
|
| 1. Prepare video |
|
|
| Prepare a "dancing" video, and use `ffmpeg` to split it into frame images: |
| ```shell |
| mkdir -p driving_videos/Video_1/images |
| ffmpeg -i your_video_file.mp4 -c:v png driving_videos/Video_1/images/%04d.png |
| ``` |
| |
| 2. Fit SMPL |
|
|
| Make sure you have splitted the video into frames and organized the image files as below: |
| ```shell |
| |-- driving_videos |
| |-- your_video_1 |
| |-- images |
| |-- 0000.png |
| ... |
| |-- 0020.png |
| ... |
| |-- your_video_2 |
| |-- images |
| |-- 0000.png |
| ... |
| ... |
| |
| |-- reference_imgs |
| |-- images |
| |-- your_ref_img_A.png |
| |-- your_ref_img_B.png |
| ... |
| ``` |
| |
| Then run script below to fit SMPL on reference images and driving videos: |
| |
| ```shell |
| python -m scripts.data_processors.smpl.generate_smpls --reference_imgs_folder reference_imgs --driving_video_path driving_videos/your_video_1 --device YOUR_GPU_ID |
| ``` |
| |
| Once finished, you can check `reference_imgs/visualized_imgs` to see the overlay results. To better fit some extreme figures, you may also append `--figure_scale ` to manually change the figure(or shape) of predicted SMPL, from `-10`(extreme fat) to `10`(extreme slim). |
| |
|
|
| 3. Smooth SMPL |
|
|
| ```shell |
| blender --background --python scripts/data_processors/smpl/smooth_smpls.py --smpls_group_path driving_videos/your_video_1/smpl_results/smpls_group.npz --smoothed_result_path driving_videos/your_video_1/smpl_results/smpls_group.npz |
| ``` |
| Ignore the warning message like `unknown argument` printed by Blender. There is also a user-friendlty [CEB Blender Add-on](https://www.patreon.com/posts/ceb-4d-humans-0-102810302) to help you visualize it. |
| |
|
|
|
|
| 4. Transfer SMPL |
|
|
| ```shell |
| python -m scripts.data_processors.smpl.smpl_transfer --reference_path reference_imgs/smpl_results/your_ref_img_A.npy --driving_path driving_videos/your_video_1 --output_folder transferd_result --figure_transfer --view_transfer |
| ``` |
| |
| Append `--figure_transfer` when you want the result matches the reference SMPL's figure, and `--view_transfer` to transform the driving SMPL onto reference image's camera space. |
| |
|
|
| 5. Render SMPL via Blender |
|
|
| ```shell |
| blender scripts/data_processors/smpl/blend/smpl_rendering.blend --background --python scripts/data_processors/smpl/render_condition_maps.py --driving_path transferd_result/smpl_results --reference_path reference_imgs/images/your_ref_img_A.png |
| ``` |
| |
| This will rendering in CPU on default. Append `--device YOUR_GPU_ID` to select a GPU for rendering. It will skip the exsiting rendered frames under the `transferd_result`. Keep it in mind when you want to overwrite with new rendering results. Ignore the warning message like `unknown argument` printed by Blender. |
| |
| 6. Render DWPose |
| Clone [DWPose](https://github.com/IDEA-Research/DWPose) |
| |
| DWPose is required by `scripts/data_processors/dwpose/generate_dwpose.py`. You need clone this repo to the specific directory `DWPose` by command below: |
| |
| ```shell |
| git clone https://github.com/IDEA-Research/DWPose.git DWPose |
| conda activate champ |
| ``` |
| Then |
| ```shell |
| python -m scripts.data_processors.dwpose.generate_dwpose --input transferd_result/normal --output transferd_result/dwpose |
| ``` |
| |
| Now, the `transferd_result` is prepared to be used in Champ🥳! |