Last Updated: June 17, 2025
This is a fork of the original mmMesh repository by HavocFiXer. The original repository has not been updated since September 2021, but is currently one of the only open source methods for extracting SMPL data from mmWave radar data.
However, the original code lacks a clear explanation on how to implement it on your own data, as such, this fork was created to resolve that issue. This repository has been refactored to allow for easier setup and running of the code, specifically during steps 2 and 3.
Any further contributions from the community are welcome, so if you find an issue or an optimisation, then feel free to create an issue and pull request.
- Tested on Python 3.10.4
- Linux (Ubuntu) environment for running Python scripts. Windows is only needed to start the radar.
├── 0.preliminary                    # SMPL model extraction
│   └── extract_SMPL_model.py
├── 1.mmWave_data_capture            # UDP capture scripts
│   ├── capture.py
│   ├── streaming.py
│   └── DataCaptureDemo_1843new.lua
├── 2.point_cloud_generation         # Convert .bin to .dat and point clouds
│   ├── data
│       ├── input
│       └── output
│   ├── configuration.py
│   └── pc_generation.py
├── 3.deep_model                     # Deep model training & inference
│   ├── data                        # Created automatically on first run
│       ├── input
│           ├── mmwave_data         # mmWave `.dat` files (train.dat, test.dat)
│           └── mocap_data          # MoCap files (`.pkl`)
│       └── output
│   ├── data_loader
│       └── dataloader.py
│   ├── models
│       ├── mmwave_model.py
│       ├── modules.py
│       ├── networks.py
│       └── utils.py
│   ├── smpl_models
│       ├── smpl
│       ├── smpl_utils_extend.py
│       └── smpl_wrapper.py
│   ├── train
│       ├── evaluator.py
│       ├── trainer.py
│       └── utils.py
│   ├── config.py
│   └── start.py
├── HISTORY.md
├── LICENSE
├── README.md
└── .gitignore
- 
Download the SMPL model package (v1.0.0 for Python 2.7) from the SMPL website. 
- 
Extract the archive so that the folder SMPL_python_v.1.0.0/smpl/models/is accessible.
- 
Run: python 0.preliminary/extract_SMPL_model.py ./SMPL_python_v.1.0.0/smpl/models/ 
- 
Two files will be generated in 0.preliminary:smpl_f.pklandsmpl_m.pkl.
- 
Install Chumpy if you encounter import errors: pip install chumpy 
- Open mmWave Studio 2.0.0.2.
- Load 1.mmWave_data_capture/DataCaptureDemo_1843new.lua.
- Click Run! to begin streaming radar chirps over the network.
- 
Transfer the Ethernet connection from the Windows machine to your Ubuntu machine. 
- 
In the 1.mmWave_data_capturedirectory, run:python capture.py <duration_in_minutes> Example, to capture 5 minutes: python capture.py 5 
- 
Captured frames will be saved or can be accessed via the getFramemethod instreaming.py.
- 
Place your output binary file in 2.point_cloud_generation/data/input.
- 
Edit 2.point_cloud_generation/configuration.pyto match your radar parameters.
- 
Edit 2.point_cloud_generation/configuration.pyto specify the desired pc_size and train/test split.
- 
Run: python pc_generation.py Frame numbers are automatically detected based on the file size. 
- 
This will produce two .datfiles:train.datandtest.datin2.point_cloud_generation/data/output.
- 
Arrange Data - mmWave: Copy train.datandtest.datinto3.deep_model/data/input/mmwave_data.
- SMPL: Copy smpl_f.pklandsmpl_m.pkl(from Step 0) into3.deep_model/smpl_models/smpl.
- MoCap: Generate mocap .pkldata using SOMA and place them in3.deep_model/data/input/mocap_data(See Solve Already Labeled MoCaps With MoSh++).
- If the data/inputdirectories don't exist, running the training script once will create them.
 
- mmWave: Copy 
- 
Training Set your training parameters in 3.deep_model/config.pypython start.py - Training logs, checkpoints, and tensorboard summaries are saved under 3.deep_model/data/outputby default.
 
- Training logs, checkpoints, and tensorboard summaries are saved under 
NOT CURRENTLY IMPLEMENTED
During training, TensorBoard summaries (metrics, loss curves, etc.) are automatically saved to:
3.deep_model/data/output/logs
To launch TensorBoard, run:
tensorboard --logdir 3.deep_model/data/output/logsIf you use this work, please cite the original researchers:
@inproceedings{xue2021mmmesh,
  title={mmMesh: towards 3D real-time dynamic human mesh construction using millimeter-wave},
  author={Xue, Hongfei and Ju, Yan and Miao, Chenglin and Wang, Yijiang and Wang, Shiyang and Zhang, Aidong and Su, Lu},
  booktitle={Proceedings of the 19th Annual International Conference on Mobile Systems, Applications, and Services},
  pages={269--282},
  year={2021}
}- Forked code from HavocFiXer/mmMesh.
- SMPL Pytorch code partially adapted from CalciferZh/SMPL.
- Anchor Point Module grouping code adapted from yanx27/Pointnet_Pointnet2_pytorch.