Skip to content
AF

OpenPose BODY_25 keypoints: the 25 body-part indices

25 body parts · from OpenPose poseParameters.cpp (branch master) · read 2026-10-17

OpenPose BODY_25 has 25 body parts, numbered from 0 Nose to 24 RHeel, as POSE_BODY_25_BODY_PARTS in OpenPose's src/openpose/pose/poseParameters.cpp defines them. The sources tie it to OpenPose BODY_25 model. 18 of the 25 names match a point in another scheme once lowercased with separators removed; the other 7 stay unmapped. Read from the sources on 2026-10-17.

Models that output it

  • OpenPose BODY_25 model · OpenPose modelsEvidence: OpenPose output format doc (02_output.md) says “Pose Output Format (BODY_25)” (source).

Moving off OpenPose? See alternatives to OpenPose with BODY_25-style foot points.

All 25 body parts

Names are copied exactly from POSE_BODY_25_BODY_PARTS in OpenPose's src/openpose/pose/poseParameters.cpp. The index is the position the source assigns. The last column says whether another scheme on this site spells the same name, by the crosswalk rule.

Not counted: the same map also lists 25 Background. The source excludes it from the body-part count: “POSE_NUMBER_BODY_PARTS equivalent to size of std::map POSE_BODY_XX_BODY_PARTS - 1 (removing background)”

What the sources say about the output

Copied from the sources, whitespace collapsed.

  • pose_keypoints_2d: Body part locations (x, y) and detection confidence (c) formatted as x0,y0,c0,x1,y1,c1,.... (OpenPose output format doc (02_output.md))
  • The coordinates x and y can be normalized to the range [0,1], [-1,1], [0, source size], [0, output size], etc. (see the flag --keypoint_scale for more information), while the confidence score (c) in the range [0,1]. (OpenPose output format doc (02_output.md))

How this list was checked

  • the map's keys run 0 to N-1
  • the map ends with {25, "Background"}, which the source excludes from the body-part count
  • POSE_NUMBER_BODY_PARTS gives POSE_BODY_25_BODY_PARTS 25 body parts
  • doc/02_output.md prints the same BODY_25 list
  • 18 of 25 names are shared with another scheme; the rest are listed as unmapped.

Other schemes

Questions

What are the 25 OpenPose BODY_25 body parts in index order?

POSE_BODY_25_BODY_PARTS in OpenPose's src/openpose/pose/poseParameters.cpp numbers them 0 Nose, 1 Neck, 2 RShoulder, 3 RElbow, 4 RWrist, 5 LShoulder, 6 LElbow, 7 LWrist, 8 MidHip, 9 RHip, 10 RKnee, 11 RAnkle, 12 LHip, 13 LKnee, 14 LAnkle, 15 REye, 16 LEye, 17 REar, 18 LEar, 19 LBigToe, 20 LSmallToe, 21 LHeel, 22 RBigToe, 23 RSmallToe, 24 RHeel. The same map also lists 25 Background, which the source excludes from the body-part count.

Which pose models output OpenPose BODY_25 body parts?

OpenPose BODY_25 model: OpenPose output format doc (02_output.md) says “Pose Output Format (BODY_25)”. Only models a fetched source ties to this scheme are listed.

How do OpenPose BODY_25 body parts map to other pose keypoint schemes?

By name only. 18 of the 25 share an identical name, once lowercased with separators removed, with a point in BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, OpenPose COCO 18 and Apple Vision 2D; 8 MidHip, 19 LBigToe, 20 LSmallToe, 21 LHeel, 22 RBigToe, 23 RSmallToe and 24 RHeel do not and stay unmapped. A shared row means the names match, not that two models place the point in the same spot.

What coordinates come with OpenPose BODY_25 body parts?

In the sources' words: “The coordinates x and y can be normalized to the range [0,1], [-1,1], [0, source size], [0, output size], etc. (see the flag --keypoint_scale for more information), while the confidence score (c) in the range [0,1].” (OpenPose output format doc (02_output.md)).

Sources

Generated by scripts/fetch-pose-keypoints.mjs and compiled by AIFitnessAPI. The sources remain the authority.