ボーリングの科学1

2025年技術ブログ集

その1 ボーリングの科学プロジェクト 

2年前に健康ボーリング教室に参加してマイボールを貰ってから、継続して毎週チームリーグに参加するようになり、運動不足はかなり解消されましたが、生意気にもフォームが気になり始めました、力任せに投げたためか、第3頚椎がやられたり腰痛を起こしたりばね指になったりしました。80歳を超えるような諸先輩方は美しいフォームで投げておられます。何が違うのかを計測し分析することで体を壊すような無理な投げ方を抑制できるのではないかと考えました。コーチのお世話になりワンポイントアドバイスも頂くのですが、1週間経つと逆戻りする場合が多いです。道は長いです。プロジェクトと言っても基本は私1人です。チームリーグの方の協力を貰いながら進めようと思います。下図のような活動イメージを作りました。STEP1とSTEP2がありますが、STEP2にはたどり着かないような気がします。

このプリジェクトを始めたそもそもの動機は、Googleからmediapipeというライブラリがリリースされ、以前レポートしていた、openposeでの骨格検出 https://twinkletec.org/2023/10/01/openpose/ よりも、1桁くらい高速で動作で動作し、Googleピクセルに搭載されるとの情報があり調べていると、ノートPCで20~30fpsの速度で動作し、しかもランドマークは33か所(openposeの倍)、更にx,yのみならず,zも推定するというものでした。骨格検出についてはNvidiaのJetsonOrinに搭載して使ってみたいと思っていた時に、mediapipeがリリースされたため、15万円の投資を踏みとどまったという事情がありました。

OpenPoseとMediaPipeの比較をQittaのWEBサイトの情報で見つけました。概要を以下に纏めます。普通のノートPCにWEBカメラを繋ぐだけでリアルタイムの骨格抽出ができるようです。

Mediapipeの使い方についてはサンプルプログラムを動かした方が報告してくれています。opencvとmediapipeライブラリを使いますが私の環境では、Python3.8で動作しました。20fpsの動画にランドマークが加わって表示されました。早い!

サンプルプログラムはデモなので、データの取り出しには別途コードを追加する必要があります。タイムスタンプと33点の(x,y,z)値をcsvファイルに書き出すのですが、一行ずつ書き込む作業ではスピードが追い付けずエラーになります。文字バファに書き込み最後にファイルに書き出す方法を採用しました。コードは割愛します。
QVGAで20fpsの5秒間の動画処理を行いました。(VGAデモ20fpsはOKでした)

オンライン処理では、VGA,20fpsが可能ですが、ボーリング場にPCを持ち込むことは避けるべきかと思い、動画カメラで撮影したファイルをオフラインで処理することにしました。撮影したaviファイルを使って骨格点を抽出するプログラムを作りました。リアルタイムと違ってタイムスタンプは保存されません。

その2 骨格データの活用 

前回は、オンライン・オフラインで骨格データを抽出するプログラムを作りました。今回は、このデータを活用して投球時のフォームの解析を行えるような検討をします。まず1次データですが、33か所の(x,y,z)の各時間での値が保存されています。X,yは、±1で規格化されていて画面中央が原点です。z値も±1ですが、x,y程精度があるのか不明です。33か所は多すぎるので、13か所に最変性しました。ポイントは、両肩の平行度や投球時の首の向きや上半身の安定性等です。なので、両肩の中央座標点と両腰の中央座標点を体の軸線として定義しなおしました。なた、顔のランドマークは鼻の1点だけ採用し、首の傾き等を見ることにしました。座標変換するプログラムとx,y座標だけを抽出した2D骨格表示を行いました。

mediapipeは、折角z値まで抽出(推定)してくれてるので3Dプロットを行ってみました。matplotの3Dプロットでは、Y軸と Z軸を入れ替えないと判りにくいです。修正したコードと3Dプロット結果を示します。

元動画には足元は撮影されていません。Mediapipeが推定していますが、両足が折れ曲がっているようです。

その3 ボーリング場録画と動画解析項目の選択 

ボーリング場に動画録画できるカメラを持ち込みました。投球者や周りの人に邪魔にならないように、投球者の後方から10秒程度撮影しました。

動画が手に入ったので、動画ファイルを使って骨格検出以外に何ができるかを検討しました。動画音声を使ってボールの速度を求めてみました。

音圧の変化波形から、ピークを検出しリリース音とクラッシュ音のピーク間隔から、ボーリングレーン距離から速度を割り出しました。前提としてボールが着地するリリース音とピンが倒れるクラッシュ音が音圧波形の1番と2番のピークになると仮定しています。

ボールのトラッキングも検討しましたが、ボールを「黒色で丸い」と手疑したところ、途中から他の場所(頭など)を追跡して、背後からの動画では追跡は無理だと判断しました。

その4 解析プログラムのGUI化 

ボーリング場で撮影した動画ファイル.aviを使用して、音響解析や骨格解析を行うシステムを作りました。BL01システムと名付けました。GUIは以下のようなものです。

GUIプログラムの操作説明です。まず、音声解析です。

次に、動画解析手順を示します。

GUIではタブを開かないと全体像が見えないので、各タブの内容を纏めてみました。

次に、スペア投球です。球速は19→17.5Km/hに落としていることが判ります。また投球後のフォームは崩れていません。

ここまでで、骨格合成動画と球速の抽出ができます。しかし、重要な特徴値は何かについてもう少し解析が必要です。BL02システムはBL01システムで抽出したcsvファイルから特徴値を抽出するものです。別途報告します。その後、BL01GUIプログラムの不具合を少修正しました。

タイトルとURLをコピーしました