MediaPipe Pose 33ランドマーク完全一覧
投稿日: 2026年5月2日 対象読者: MediaPipeを使う開発者 / ポーズ推定を実装したい方
この記事はこんな方向け:
- MediaPipe Poseの全ランドマークの番号と位置を知りたい方
- 特定の関節だけ使いたいがインデックスが分からない方
visibilityスコアの活用方法を知りたい方
TL;DR
- MediaPipe Poseは33個のランドマークを返す(顔11点・上半身12点・下半身10点)
- 各ランドマークは
{ x, y, z, visibility }の4値を持つ visibilityが 0.5未満の関節は信頼度が低く、スキップ推奨- 左右の判定はカメラ視点ではなく人物視点(鏡に映したときの左右)
はじめに
MediaPipe Poseを実装していると「肩のインデックスは何番だっけ?」「左右のどちらが15番?」と迷うことがあります。公式ドキュメントには図がありますが、実装中にサッと確認したいときに開くのは少し手間です。
この記事では、33個のランドマークを一覧で整理し、よく使う関節の選び方と visibility の活用方法を解説します。Pose Mirrorでの実際の使用例も紹介します。
ランドマーク一覧
全身の配置図(テキスト図)
0 (鼻)
1,3 ---- 2,4 (目 内側・外側)
5 6 (目 外側端)
7 8 (耳)
9 10 (口 左端・右端)
11 --- 12 (肩)
/ \
13 14 (肘)
| |
15 16 (手首)
17,19,21 18,20,22 (指)
23 --- 24 (腰)
/ \
25 26 (膝)
| |
27 28 (足首)
29,31 30,32 (かかと・つま先)
左右の見方: 奇数インデックス(11,13,15...)が人物の左側、偶数(12,14,16...)が人物の右側です。正面から見るとカメラ視点と左右逆になります。
顔・頭部(0〜10)
| インデックス | 部位 | 備考 |
|---|---|---|
| 0 | 鼻 | 顔の中心・向き推定に使える |
| 1 | 左目(内側) | |
| 2 | 右目(内側) | |
| 3 | 左目(外側) | |
| 4 | 右目(外側) | |
| 5 | 左目(外側端) | |
| 6 | 右目(外側端) | |
| 7 | 左耳 | 横顔では低精度になりやすい |
| 8 | 右耳 | |
| 9 | 口(左端) | |
| 10 | 口(右端) |
上半身(11〜22)
| インデックス | 部位 | よく使う組み合わせ |
|---|---|---|
| 11 | 左肩 | 11→13(左上腕の向き) |
| 12 | 右肩 | 12→14(右上腕の向き) |
| 13 | 左肘 | 13→15(左前腕の向き) |
| 14 | 右肘 | 14→16(右前腕の向き) |
| 15 | 左手首 | |
| 16 | 右手首 | |
| 17 | 左手(人差し指付け根) | 手の詳細が必要な場合 |
| 18 | 右手(人差し指付け根) | |
| 19 | 左手(小指付け根) | |
| 20 | 右手(小指付け根) | |
| 21 | 左親指 | |
| 22 | 右親指 |
下半身(23〜32)
| インデックス | 部位 | よく使う組み合わせ |
|---|---|---|
| 23 | 左腰 | 23→25(左大腿の向き) |
| 24 | 右腰 | 24→26(右大腿の向き) |
| 25 | 左膝 | 25→27(左すねの向き) |
| 26 | 右膝 | 26→28(右すねの向き) |
| 27 | 左足首 | |
| 28 | 右足首 | |
| 29 | 左かかと | |
| 30 | 右かかと | |
| 31 | 左つま先 | |
| 32 | 右つま先 |
コードでのアクセス方法
pose.onResults((results) => {
const lm = results.poseLandmarks;
if (!lm) return; // 人物が未検出
// よく使う関節へのアクセス例
const leftShoulder = lm[11]; // { x, y, z, visibility }
const rightShoulder = lm[12];
const leftElbow = lm[13];
const nose = lm[0];
// visibility で信頼度をチェックしてから使う
if (leftShoulder.visibility > 0.5) {
console.log(
`左肩: x=${leftShoulder.x.toFixed(3)}, y=${leftShoulder.y.toFixed(3)}`
);
}
});
座標の意味:
x,y:画像サイズを1とした正規化値(0〜1)。左上が(0,0)、右下が(1,1)z:腰を基準にした奥行き(手前が負)。精度はx,yより低めvisibility:関節の検出信頼度(0〜1)
visibilityの正しい使い方
各ランドマークの visibility は、その関節がどれだけ確実に映っているかを示します。
// NG: visibility を無視してそのまま使う(精度が低い関節のデータも混入する)
const shoulder = { x: lm[11].x, y: lm[11].y };
// OK: 信頼度が高い関節のみ使う
if (lm[11].visibility > 0.5) {
const shoulder = { x: lm[11].x, y: lm[11].y };
applyToModel(shoulder);
}
visibility が低くなりやすいケース:
| 状況 | 影響を受ける関節 |
|---|---|
| 横向き・後ろ向きの写真 | 見えていない側の全関節 |
| 手足が体に重なっている | 重なった手足 |
| 体の一部が画面の外に切れている | 切れた部分の関節 |
| 暗い・ぼけた画像 | 全般的に低下 |
Pose Mirrorでの使用例
Pose Mirrorでは全33点を使うのではなく、3Dデッサン人形の関節に対応する12点に絞って使用しています。
// Pose Mirrorで実際に使っている関節(12点)
const jointMap = {
leftShoulder: lm[11],
rightShoulder: lm[12],
leftElbow: lm[13],
rightElbow: lm[14],
leftWrist: lm[15],
rightWrist: lm[16],
leftHip: lm[23],
rightHip: lm[24],
leftKnee: lm[25],
rightKnee: lm[26],
leftAnkle: lm[27],
rightAnkle: lm[28],
};
顔(0〜10)は3Dモデルの頭部向きには使用していません。指の細かい動き(17〜22)も現時点では非対応です。これらを追加することで、より精密なポーズ反映が実現できます。
まとめ
- ランドマークは 0〜32の固定インデックスで管理されている
- 左右は人物視点(鏡のように見たときの左右)
visibility < 0.5の関節は信頼度が低いためスキップする- 3Dポーズ反映に必要な主要関節は11〜28の18点(腕・脚の付け根〜末端)
ぜひ Pose Mirror で実際に33ランドマークがどのように3Dポーズに変換されるか確かめてみてください!
関連記事:
- 【Unity WebGL】MediaPipeで3Dポーズを動かす — Unity連携の実装全体
- 【検証】Pose MirrorのAIポーズ解析精度を試した — 実際の検出精度レポート