1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Driveline C3Dデータで投球・打撃の3D骨格検知をやってみた

1
Last updated at Posted at 2026-02-25

ライセンス表記: 本記事で使用しているモーションキャプチャデータは Driveline OpenBiomechanics Project のものです(CC BY-NC-SA 4.0)。
引用: Wasserberger KW, Brady AC, Besky DM, Jones BR, Boddy KJ. The OpenBiomechanics Project: The open source initiative for anonymized, elite-level athletic motion capture data. (2022).
ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/
本記事の派生物(グラフ・GIF等)も同ライセンスに従います。

はじめに

野球選手のフォームを3Dで可視化し、関節の動きと球速の関係を探ってみました。

使ったのは以下の3つです。

  • Driveline OpenBiomechanics Project (OBP) — プロレベルのモーションキャプチャC3Dデータ(100投手+98打者)
  • ezc3d — C3Dファイルの読み書きライブラリ(MITライセンス、GitHub
  • matplotlib — 3D可視化・アニメーション

GitHub: https://github.com/yasumorishima/baseball-cv

ezc3dとの関わり

ezc3dにはPR #384でバグ修正を貢献しています。自分がOSSに参加したライブラリを使って実際に分析する流れになりました。


Step 1: C3Dデータから3D骨格を可視化

C3Dファイルにはモーションキャプチャで取得した各マーカーの3D座標が記録されています。

  • 投球データ: 45マーカー、360Hz、約726フレーム
  • 打撃データ: 55マーカー(体45+バット10)、360Hz、約804フレーム
import ezc3d

c3d = ezc3d.c3d("pitching_sample.c3d")
points = c3d["data"]["points"]  # shape: (4, n_markers, n_frames)
labels = c3d["parameters"]["POINT"]["LABELS"]["value"]

投球フォームの骨格アニメーション

投球骨格アニメーション

45個のマーカーを結んで骨格として描画しています。

打撃フォームの骨格アニメーション

打撃骨格アニメーション

打撃側は55マーカーで、バットの10マーカーは赤色で表示しています。


Step 2: 一般動画でも骨格検知できる(MediaPipe)

モーションキャプチャ設備がなくても、スマホで撮った普通の動画から骨格を検知できます。GoogleのMediaPipe Poseを使うと、1本の動画から関節点33箇所をリアルタイムで自動検出できます。

import mediapipe as mp

mp_pose = mp.solutions.pose
pose = mp_pose.Pose(
    static_image_mode=False,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5
)

本記事の分析はDriveline OBPのC3Dデータ(専用センサー)を使っていますが、手軽に試したい場合はMediaPipeが出発点として使えます。


Step 3: 関節角度・角速度の抽出

各関節が「どれだけ動くか(角度)」と「どれだけ速く動くか(角速度)」を、投球全体のフレームを通じて計算しました。

投球(Pitching)

関節角度 最小値 最大値
肘屈曲 (Elbow Flexion) 50.5° 156.7°
肩外転 (Shoulder Abduction) 4.6° 117.7°
体幹回旋 (Trunk Rotation) 58°
膝屈曲 (Knee Flexion) 99.1° 163.8°

例えば肘の屈曲は50〜157°の範囲で動いており、投球中に大きく曲げ伸ばしされています。体幹回旋は0〜58°と、腕に比べてそれほど大きくないように見えますが、後の分析で球速との相関が最も強い指標として浮かび上がります。

角速度の時系列

関節角速度の時系列

各関節が1秒間に何度回転しているか(角速度)をフレームごとにプロットしたものです。投球のどの瞬間に、どの関節が特に速く動いているかが一目で分かります。


Step 4: 骨格の動き × 球速の相関分析

Driveline OBPのC3Dデータにはファイル名に球速情報が含まれています(例: ..._809.c3d → 80.9 mph)。

16投手分のデータを使い、骨格の動きから取り出した指標(角度・速度・回旋量など)と球速の相関を調べました。

相関結果

相関散布図

相関行列

指標 相関(r) p値
体幹の最大角速度 (Peak Trunk Angular Velocity) 0.119 0.673
肘の最大角速度 (Peak Elbow Angular Velocity) 0.094 0.739
肩の最大外転角 (Peak Shoulder Abduction) 0.180 0.520
体幹の回旋量 (Trunk Rotation Range) 0.425 0.114

相関係数(r)は−1〜+1の値をとり、1に近いほど「一方が大きいとき、もう一方も大きい」という正の関係を示します。p値は0.05を下回ると統計的に確実とされますが、16人では少なすぎて断言はできません。それでも体幹の回旋量が球速と最も強い正の相関(r=0.425)を示しました。「体幹をどれだけ大きく回せるか」が球速に関係している可能性を示しています。


まとめ

  • Driveline OBPのC3Dデータからezc3dで3D骨格を可視化できた
  • 関節角度・角速度の時系列を抽出し、投球フェーズごとの特徴を観察できた
  • 体幹回旋のレンジが球速と最も高い相関(r=0.425)を示した
  • MediaPipeを使えば一般動画からも骨格検知が可能(本記事の分析はモーションキャプチャC3Dを使用)

GitHub: https://github.com/yasumorishima/baseball-cv

データ: Driveline OpenBiomechanics Project(CC BY-NC-SA 4.0)
ezc3d: pyomeca/ezc3d(MIT License)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?