This repository contains the EHM tracking implementation associated with the paper "GUAVA: Generalizable Upper Body 3D Gaussian Avatar".
The tracker estimates an expressive human mesh model from front-facing upper-body video or images, directly supporting GUAVA's training and inference workflows.
This guide outlines the steps to set up and run the project components, which have been tested on Ubuntu Linux 20.04.
# Via SSH
git clone git@github.com:Pixel-Talk/EHM-Trakcer.git
or
# Via HTTPS
git clone https://github.com/Pixel-Talk/EHM-Trakcer.git
cd EHM-TrakcerOur default, provided install method is based on Conda package and environment management:
The environment dependencies are identical to the updated GUAVA environment.
# Create and Activate Conda Environment:
conda create --name EHM-Trakcer python=3.10
conda activate EHM-Trakcer
# Install Core Dependencies:
pip install -r requirements.txt
# Install PyTorch3D:
pip install "git+https://github.com/facebookresearch/pytorch3d.git@v0.7.7"Configure assets/smplx and assets/flame as in the GUAVA repository.
- SMPLX: Download
SMPLX_NEUTRAL_2020.npzfrom SMPLX and place it in theassets/SMPLX. - FLAME: Download the
generic_model.pklfrom FLAME2020. Save this file to bothassets/FLAME/FLAME2020/generic_model.pklandassets/SMPLX/flame_generic_model.pkl.
-
Manual Download: Example videos and images for testing: Download the example, unzip the file, and place it in the
assets/examples. -
Command-line Download:
bash assets/Docs/run_download_examples.sh
To run tracking, you will need to acquire the following:
-
Manual Download: Download the pretrained weight, unzip the file, and place it in the
pretrained. -
Command-line Download:
bash assets/Docs/run_download_pretrained.sh
Note: To ensure accurate tracking, we discard frames with low hand keypoint confidence scores and those where the two hands are in close proximity. The specific filtering logic can be reviewed in data_prepare_pipeline.py.
Execute the following command to perform Video Tracking:
export PYTHONPATH='.'
python tracking_video.py \
--in_root assets/examples/videos \
--output_dir results/example_video \
--save_vis_video --save_images \
--check_hand_score 0.0 -n 1 -v 0Execute the following command to perform Image Tracking:
export PYTHONPATH='.'
CUDA_VISIBLE_DEVICES=0 python -m src.tracking_single_image \
--source_dir assets/examples/images \
--output_dir results/example_image \
--save_vis_video --save_visual_renderBuilding training dataset for GUAVA:
export PYTHONPATH='.'
# Run the tracking script
# 8 threads for 4 gpus
python tracking_video.py \
--in_root /path/to/video_dataset \
--output_dir /path/to/tracked_video \
--check_hand_score 0.45 \
--tracking_with_interval \
-n 8 -v 0,1,2,3
# Combine Tracking Dataset
python -m src.build_lmdb_dataset \
--data_folders /path/to/tracked_video \
--save_path /path/to/combined_dataset
# Split into Training and Validation Sets
python -m src.split_dataset \
--data_path /path/to/combined_dataset \
--num_valid 100If you find our work helpful, please ⭐ our repository and cite:
@article{GUAVA,
title={GUAVA: Generalizable Upper Body 3D Gaussian Avatar},
author={Zhang, Dongbin and Liu, Yunfei and Lin, Lijian and Zhu, Ye and Li, Yang and Qin, Minghan and Li, Yu and Wang, Haoqian},
journal={arXiv preprint arXiv:2505.03351},
year={2025}
}