
3D Body Pose
DownloadableFree EndpointEstimate 3D human body pose and skeleton from video input.
Follow the steps below to download and run the NVIDIA NIM inference microservice for this model on your infrastructure of choice.
Generate API Key
Pull and Run the NIM
The 3D Body Pose NIM uses gRPC APIs for inferencing requests.
An NGC API Key is required to pull the container image and download models from NGC. Pass the value of the API Key to the docker run command in the next section as the NGC_API_KEY environment variable as indicated.
If you are not familiar with how to create the NGC_API_KEY environment variable, the simplest way is to export it in your terminal:
export NGC_API_KEY=<PASTE_API_KEY_HERE>
Run one of the following commands to make the key available at startup:
# If using bash
echo "export NGC_API_KEY=<value>" >> ~/.bashrc
# If using zsh
echo "export NGC_API_KEY=<value>" >> ~/.zshrc
Other, more secure options include saving the value in a file, so that you can retrieve it with cat $NGC_API_KEY_FILE, or using a password manager.
To pull the NIM container image from NGC, first authenticate with the NVIDIA Container Registry with the following command:
echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdin
Optionally, set the manifest profile that matches your GPU architecture. If omitted, the NIM automatically selects the correct profile based on the detected hardware.
| GPU Architecture (compute capability) | GPUs | Manifest Profile ID |
|---|---|---|
| Blackwell (cc 12.0) | RTX5090, RTX PRO 6000 Blackwell Server Edition | 44d7f677f41adb05ef2a291e4e33609fa51bc1e9899a047026402356a2d7b8a1 |
| Blackwell (cc 10.0) | B200, GB200 | 9b5759da619cfa630ab929cbb6aec60d2fc7fd20306b8d571fc64b3b4f6d8a2e |
| Hopper (cc 9.0) | H100, H200 | 770554b9b9985048facd5d7e550ab1a4224f30954fec7c2f2b65745199b2ed88 |
| Ada (cc 8.9) | L4, L40S, RTX4090 | 3abcedab43a6a376232eedecebacec48cbf7f4d3aab8e18dff718b46ccee690b |
| Ampere (cc 8.6) | A10G, A40, RTX3090 | a29b7807ce71c10ad1f39133d9354d5719c8d708601b5776c8dbea34923618be |
| Ampere (cc 8.0) | A100, A30 | 204067945f30ee4c3c284f99bfd87ce38353cf90a7337bc8b48b9bfdd40768be |
Compute capability 8.0 or newer is required. NVIDIA T4 (compute capability 7.5, sm75) is not supported.
export NIM_MANIFEST_PROFILE=<enter_valid_manifest_profile_id>
The following command launches the 3D Body Pose container with the gRPC service. Find reference to runtime parameters for the container here.
docker run -it --rm --name=body-pose-nim \
--runtime=nvidia \
--gpus all \
--shm-size=8GB \
-e NGC_API_KEY=$NGC_API_KEY \
-e NIM_MANIFEST_PROFILE=$NIM_MANIFEST_PROFILE \
-e NV_AI4M_MAX_CONCURRENCY_PER_GPU=1 \
-e NIM_HTTP_API_PORT=8000 \
-e NIM_GRPC_API_PORT=8001 \
-p 8000:8000 \
-p 8001:8001 \
nvcr.io/nim/nvidia/body-pose:1.0.0
NV_AI4M_MAX_CONCURRENCY_PER_GPU caps how many streams the NIM will serve at once per GPU. The value above is the container's own default. Raise it to run more streams concurrently -- the hosted endpoint on build.nvidia.com runs 4 on a single L40S. A request that arrives when every slot is taken is refused with RESOURCE_EXHAUSTED rather than queued, so size this for your workload rather than leaving it at 1 and retrying.
Please note, the flag --gpus all is used to assign all available GPUs to the docker container.
To assign specific GPUs to the docker container (in case of multiple GPUs available in your machine) use --gpus '"device=0,1,2..."'
If the command runs successfully, you will get an output ending similar to the following:
Triton server is ready
[INFO MAXINE BASE LOGGER ... base_service.py:_serve_threading:295 PID:...] Using Insecure Server Credentials
[INFO MAXINE BASE LOGGER ... base_service.py:_serve_threading:300 PID:...] Listening to 0.0.0.0:8001
By default the 3D Body Pose gRPC service is hosted on port 8001. You will use this port for inferencing requests. The port is configurable via the NIM_GRPC_API_PORT environment variable.
Verify the NIM is Ready
Install grpcurl from github.com/fullstorydev/grpcurl/releases and perform a health check:
wget https://raw.githubusercontent.com/grpc/grpc/master/src/proto/grpc/health/v1/health.proto
grpcurl --plaintext --proto health.proto localhost:8001 grpc.health.v1.Health/Check
If the service is ready, you get a response similar to:
{ "status": "SERVING" }
Test the NIM
You will need a system with git and Python 3.10+ installed.
Download the 3D Body Pose Python client code by cloning the NVIDIA AI for Media NIM Clients Repository:
git clone https://github.com/NVIDIA-Maxine/nim-clients.git
cd nim-clients/body-pose
Install the dependencies for the Python client:
python3 -m pip install -r requirements.txt
Go to the scripts directory:
cd scripts
Run the command to send a gRPC request:
python3 body_pose.py --target <server_ip:port> --video-input <input_file_path> --output <output_file_path>
Example command with sample input:
python3 body_pose.py --target 127.0.0.1:8001 \
--video-input ../assets/sample_input.mp4 \
--output ../assets/sample_output.arrow
Note the requirements for the input file:
- The supported file type is mp4 with the H.264 codec.
- The size limit for the input file is 50 MB.
Refer to the documentation for more information.