Skip to content
AF
AI Motion

OpenPose Models: BODY_25 vs COCO, Output Format and Licence

Last verified October 17, 2026 · 3 min read

Sources checked (4) · October 17, 2026
OpenPose is Carnegie Mellon University's real-time multi-person keypoint detector; its README describes body and foot estimation with 15, 18 or 25 keypoints, 2x21 hand keypoints and 70 face keypoints. Its output document describes two body formats, BODY_25 and COCO, and the source lists their 25 and 18 body parts, BODY_25 adding a mid-hip and six foot points to COCO's names. It runs as CUDA, OpenCL or CPU-only builds on Ubuntu, Windows and macOS, and its licence allows noncommercial research use only.

This page covers what CMU's OpenPose repository says about its models and output, read on October 17, 2026. The licence is read in full in pose estimation model licenses, and the multi-person alternatives are in multi-person pose tracking.

Body models#

OpenPose's output document shows how to read the body-part order of any model from its C++ API, naming BODY_25, COCO_18, MPI_15, BODY_25B and BODY_135. Two have output-format diagrams in that document, and their orders, read from poseParameters.cpp, are:

BODY_25 contains every COCO 18 name plus MidHip and six foot points (LBigToe, LSmallToe, LHeel, RBigToe, RSmallToe, RHeel), and the shared names sit at different indices after index 7: RHip is 9 in BODY_25 and 8 in COCO 18. Each map ends with a Background entry, which the source excludes from the part count. OpenPose's COCO 18 is not the 17-keypoint COCO order MoveNet and YOLO pose use: it adds Neck at index 1 and spells sides as R and L, so the crosswalk does not join its points to COCO 17's.

The README's headline figure is 135 keypoints in total for body, hand, face and foot together, and the C++ API names a BODY_135 model.

Output format#

With --write_json, OpenPose writes one JSON file per frame with a people array. Each person's pose_keypoints_2d holds body part locations and detection confidence "formatted as x0,y0,c0,x1,y1,c1,...", in the model's body-part order. The --keypoint_scale flag sets the coordinate range, for example 0 to 1, -1 to 1, or source or output pixels, and the confidence runs from 0 to 1. Face and hand keypoints come in matching face_keypoints_2d, hand_left_keypoints_2d and hand_right_keypoints_2d arrays, and the 3D fields stay empty unless --3d is enabled.

Platforms#

The README lists Ubuntu 20, 18, 16 and 14, Windows 10 and 8, Mac OSX and the Nvidia TX2, with CUDA (Nvidia GPU), OpenCL (AMD GPU) and CPU-only builds, a command-line demo, C++ and Python APIs, and a portable Windows demo. It documents single-person 3D keypoint detection by triangulation from multiple views with Flir cameras, and says body runtime is invariant to the number of people detected while hand and face runtime depends on it.

Licence#

The LICENSE is headed "ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY" and grants a license "to use the Software for noncommercial research purposes". The README says OpenPose "is freely available for free non-commercial use" and points commercial users to a FlintBox link. In our reading, a commercial fitness app needs that separate licence; the details are in pose estimation model licenses.

When it fits#

Our reading: OpenPose fits research and prototypes that want body, hands and face from one system, or that must emit BODY_25 for tools that expect it. For a commercial product the licence usually decides against it before the engineering does; OpenPose alternatives you can ship commercially covers the options, and multi-person pose tracking the architecture.

Frequently asked questions

What is the difference between OpenPose's BODY_25 and COCO body models?
Seven points and the numbering. OpenPose's poseParameters.cpp lists 25 body parts for BODY_25 and 18 for COCO; BODY_25 has every COCO name plus MidHip at index 8 and six foot points at 19 to 24. Indices 0 to 7 match, from Nose to LWrist, but the rest shift: RHip is 9 in BODY_25 and 8 in COCO. Both maps end with a Background entry that is not counted as a body part.
How is OpenPose's JSON keypoint output laid out?
One file per frame with a people array, per OpenPose's output document. Each person's pose_keypoints_2d is a flat list of x, y and confidence for every body part in the model's order, so body part i starts at position 3i. The --keypoint_scale flag chooses the coordinate range, the confidence runs from 0 to 1, and face and hands have their own arrays.
Does OpenPose need an NVIDIA GPU?
No. The OpenPose README lists CUDA builds for Nvidia GPUs, OpenCL builds for AMD GPUs and non-GPU, CPU-only builds, on Ubuntu, Windows, Mac OSX and the Nvidia TX2. The README does not give speed figures for each build in the files we read, so measure the one you plan to ship on.
Can OpenPose estimate 3D poses?
Only in a multi-camera setup. The OpenPose README documents 3D real-time single-person keypoint detection by triangulation from multiple single views, with synchronization of Flir cameras handled; its 3D JSON fields stay empty unless the --3d flag is enabled. From one ordinary camera it outputs 2D keypoints.

All 121 questions in AI Motion →

Keep reading

Elsewhere on the site

Pages that share this one’s concepts and sources, from other sections.

Next steps

Was this page useful?

Independent comparison, last reviewed October 17, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.

← All ai motion · by AIFitnessAPI