# 💃 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🥳!