The meshes of generic objects are stored as .obj.
The body scans are textured 3D meshes stored in .npz archives.
The texture is encoded as a texture atlas.
| scan | texture atlas |
|---|---|
![]() |
![]() |
See Wavefront .obj.
This format stores the numpy arrays defining the mesh inside a
(compressed)
numpy .npz
archive.
The following arrays inside the .npz define a mesh:
vertices, float (N, 3): The 3D positions of the vertices. N varies across the meshes.faces, int (20000, 3): The vertex indices defining the faces in 3D space (i.e. triplets of indices into theverticesarray). Fixed number of faces (20000) for all meshes.texcoords, float (Nt, 2): The 2D positions of the vertices in the texture atlas (Nt > N).texcoords_indices, int (20000, 3): The vertex indices defining the faces in the UV space (2D texture image) (i.e. triplets of indices into thetexcoordsarray). Fixed number of faces (20000) for all meshestexture, uint8 (2048, 2048, 3): The RGB texture image.
Fields not described above should not be relied upon.
The mesh can be loaded with numpy.load.
For example:
import numpy as np
mesh = np.load("name.npz", allow_pickle=True)
mesh["vertices"]
mesh["faces"]
# ...3D positions of detected body landmarks are provided
in the training data of Challenge 1.
They are stored in files with name landmarks3d.txt.
The format is plain text and tabular, with one landmark per row and one space
between columns:
name x y z
with name, the name of the landmark, and (x, y, z), its 3D position in
the frame of reference of the scan or mesh.
If the landmark was not detected, the coordinates are nan.
For example,
elbow_left 1.234 0.123 0.389
finger_thumb_top_left nan nan nan
...

