Skip to content
AF

OpenPose COCO 18 keypoints: the 18 body-part indices

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

OpenPose COCO 18 has 18 body parts, numbered from 0 Nose to 17 LEar, as POSE_COCO_BODY_PARTS in OpenPose's src/openpose/pose/poseParameters.cpp defines them. The sources tie it to OpenPose COCO model (PoseModel::COCO_18). All 18 names match a point in another scheme once lowercased with separators removed. Read from the sources on 2026-10-17.

Models that output it

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

All 18 body parts

Names are copied exactly from POSE_COCO_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 18 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 {18, "Background"}, which the source excludes from the body-part count
  • POSE_NUMBER_BODY_PARTS gives POSE_COCO_BODY_PARTS 18 body parts
  • 18 of 18 names are shared with another scheme; the rest are listed as unmapped.

Other schemes

Questions

What are the 18 OpenPose COCO body parts in index order?

POSE_COCO_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 RHip, 9 RKnee, 10 RAnkle, 11 LHip, 12 LKnee, 13 LAnkle, 14 REye, 15 LEye, 16 REar, 17 LEar. The same map also lists 18 Background, which the source excludes from the body-part count.

Which pose models output OpenPose COCO body parts?

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

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

By name only. 18 of the 18 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 BODY_25 and Apple Vision 2D, so every one has a crosswalk row. A shared row means the names match, not that two models place the point in the same spot.

What coordinates come with OpenPose COCO 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.