PoseViz – 3D Human Pose and Mesh Visualizer
Multi-person, multi-camera 3D human pose and mesh visualization tool built using OpenGL (via ModernGL). As used in NLF and MeTRAbs visualizations.
This repo does not contain pose estimation code, only the visualization part.
Gist of Usage
import poseviz
import deltacamera
camera = deltacamera.Camera(...)
with poseviz.PoseViz(...) as viz:
for frame in frames:
bounding_boxes, poses3d = run_pose_estimation_model(frame)
viz.update(frame=frame, boxes=bounding_boxes, poses=poses3d, camera=camera)
See also demo.py.
The main feature of this tool is that the graphical event loop is hidden from the library user. We want to write code in terms of the prediction loop of the human pose estimator, not from the point of view of the visualizer tool.
Behind the scenes, this is achieved through forking a dedicated visualization process and passing new scene information via multiprocessing queues.
Error Handling
When a requested output cannot be produced (the video writer fails, the camera trajectory
cannot be saved, or the visualizer process dies), a poseviz.VisualizerError is raised in
your prediction loop at the next API call, carrying the visualizer-side traceback. A
requested video output to which zero frames were written also raises. Purely visual
per-frame hiccups do not raise — they are logged, and only escalate to an error if they
persist while an output is being written. If no output is requested (live demo use), the
visualization stays best-effort and never interrupts your loop.
close() returns a list of poseviz.SequenceReport objects, one per output sequence,
with the video path and the number of frames written.
Headless and GPU Notes
headless=True(or auto-detection whenDISPLAY/WAYLAND_DISPLAYare unset) uses a standalone EGL context: no display server is needed, and on hybrid-GPU machines (e.g., AMD display GPU + NVIDIA compute GPU) the NVIDIA card is targeted for NVENC. There is no need to unsetDISPLAYmanually; theegl_device_indexparameter overrides the device selection if needed.gpu_encode=True(default) requires the OpenGL context to be on an NVIDIA GPU. In windowed mode on hybrid-GPU machines, the window usually lands on the display GPU; starting a video output then raises an error immediately, listing the remedies: start the process with__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia, use headless mode, or passgpu_encode=Falsefor CPU encoding.gpu_frames=Trueaccepts PyTorch CUDA tensors or any DLPack-compatible frames (CuPy, JAX, ...), keeping the whole decode → inference → visualization → encode chain on the GPU.
Installation
pip install poseviz
Then run demo.py to test if installation was successful.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file poseviz-0.5.0.tar.gz.
File metadata
- Download URL: poseviz-0.5.0.tar.gz
- Upload date:
- Size: 773.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
118b671f88e38496c2370c1ca38b5ae86cd68a80cda936deb9cbad6b676a9717
|
|
| MD5 |
f16dfc0b434e67f2cff0868600a45477
|
|
| BLAKE2b-256 |
e7e2e72ffddeef81b7ead79c6465139e6dd3cc22f3fa47489e516ee696fc8a79
|
Provenance
The following attestation bundles were made for poseviz-0.5.0.tar.gz:
Publisher:
python-publish.yml on isarandi/poseviz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
poseviz-0.5.0.tar.gz -
Subject digest:
118b671f88e38496c2370c1ca38b5ae86cd68a80cda936deb9cbad6b676a9717 - Sigstore transparency entry: 2387438353
- Sigstore integration time:
-
Permalink:
isarandi/poseviz@d3c4499a35627c1f98b80e5759c7a51aafd050be -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/isarandi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@d3c4499a35627c1f98b80e5759c7a51aafd050be -
Trigger Event:
release
-
Statement type: