投球フォームをパソコンやスマホで簡単に分析したい

谷岡広樹 氏(以下、谷岡):ライトニングトークなので、すごく短い発表です。谷岡と申します。ふだんは大学の教員をやっていますが、今日は大学の教員としての発表ではありません。もうちょっと言うと、今回は野球の発表なのですが、もともとはサッカーをやっていたので(笑)、研究もどちらかというとサッカーの研究が多いです。画像から人の位置を取るなどいろいろ試しているので、また機会があったら発表したいと思います。

今回は、地元のインディゴソックスという野球チームのトレーナーの方との共同研究の発表です。毎年プロ野球選手の候補を2、3人ずつぐらい送り込んでいる、アイランドリーグの所属チームです。そこでトレーナーをしている殖栗さん(殖栗正登氏)という人がいるのですが、「とにかく150キロ投げないとプロは目指せない」ということで、殖栗さんは投球フォームの改善を非常に真剣に指導しています。インディゴソックスは地元のチームなので、お付き合いすることになり、一緒に分析を始めているところです。

簡単に言うと、今日発表する研究の目的は、「投球フォームをできるだけ簡単な装置で分析したい」ということです。一般的にはKinectを使うか、あるいはプロチームなどは、マーカーみたいなものを付けてすごく大きな機材で分析しているのですが、地元の企業や学校、トレーニングジムではできないわけです。

そのため、パソコンやスマホレベルで、簡単に分析できないかというところで、チャレンジをしています。

今回、私が試したことの概要です。まだ完成していないので途中経過なのですが、ポイントは2つあります。興味がある方は、インディゴコンディショニングハウスというブログに詳細を書いてあるので、ぜひそちらを見てほしいのですが、いくつかのポイントに絞ってトレーニングを進めていて、特に見るべきポイントは何個かに絞られます。

画像上でほしい情報の優先順位をつけてもらって、その画像からいろいろ分析しようとしています。1つは、「重心移動」です。速い球を投げるために必要なのは、重心の移動だと言います。地面反力というかたちで、足で地面を押さえて、そこのウェイトも取りたいのですが、それにも増して重要なのは重心移動です。

加えて、「回旋角」も重要で、肩や腰の部分の角度のひねり方とタイミングが非常に重要になるそうです。そのデータをまず取れる仕組みを作ろうというのが、今回の投球フォームを分析する目的です。

ml5.jsではPoseNetが使える

この投球フォームの分析をできるだけ簡易的にやりたい。ふだん研究でもPythonは使いますが、だんだんとコンシューマー化していて、HTMLでも動く環境がどんどん出てきて、ml5.jsではPoseNetがそのまま使えます。

p5.jsと非常に親和性が高くて、そういうフレームワークを使えばJavaScriptでも動くことを試したのが、今回の主な発表です。

まず試しに動かしてみますが、今私の顔が映っています。肩までしか映っていませんが、PoseNetのライブラリで位置がすでに取れていることがわかります。これを使ってやっていきます。

重心や体の角度の計算

重心の計算は、簡易的にはいろいろできるのですが、真面目にやってみようと思い、重心の計算方法をいろいろ調べました。そうすると、何個か提案はされているのですが、どれもベクトルの計算なので、最終的には合成するだけです。だけなのですが、頭部や体の部分、部位ごとにだいたい割合が決まっていて、それは体重から概算で計算できます。

手や腕のポイントがわかっているので、そこをポイントにして重心の位置を計算しています。このように推定して、あとは計算するだけです。この位置がどう変わっていくかを計算するのに、今回はChandlerを採用しています。

もう一つは、体の角度です。私は野球はあまり詳しくないのですが、肩の開き具合は、昔学校で習ったコサインを使うことで計算できるらしいです。

(スライドを示し)これは私が投げているシーンです。素人なので下手クソですが、上から見たシーンが上の丸で、左の肩が矢印の先です。肩のラインを見ると静態している状態が一番長く、そこで回転すると縮みます。なので、このコサインの角度で逆算すれば、角度がわかるという仕掛けです。

投球フォーム計測の結果

実際、動かしてみたデモです。これはまだ完成版ではなくて、しかも本当は最高移動速度と、最大捻転角度の地面からの絶対位置がほしいと言われている状況です。

職場に誰もいない時間を見計らって構えて、それっぽく投げます。投球フォームを見る際には、「セットポジション」と「足を上げたタイミング」、私は右投げなので「左足を設置した状態」と、「投げ終わる」という、この大きく分けて4つのタイミングごとに位置を測ることが重要だということで、こういうことをやりました。

数字がチョロチョロと出てきたと思うのですが(笑)、一応そういう計算ができるようになりました。

今日の発表は以上になりますが、今のところ、重心移動の速度の平均は計算できました。前後の時間をしっかりと細かく区切っていき、最大速度もしっかり出したいということと、最大捻転角度が、今は正確じゃない部分があるため、正確に計算して絶対的な位置、本当にほしい部分。本当は、セットポジションの時を含むのではなくて、そのあとの、「こことここの間での最大がほしい」みたいなのがあるらしいので、それを取りたいというのが、今の目標です。

まとめると今回は、p5.js、JavaScriptのライブラリからml5.jsを呼び出して、非常に簡単な仕掛けだけで投球フォームを計測できるようにしてみました。投球フォームを改善するのに役立つ指標の一部を推定しようとしています。今後は、さらに本当に現場で役に立つものを作って、ぜひ中高生、それから今回はプロを目指している人たちに使ってもらえるようなものを作りたいと思っています。以上です。ありがとうございます。

質疑応答

司会者:ありがとうございます。リアルタイムでそんな簡単に特定できるのが、すごいと思いました。私から1つ質問があります。先ほど最後のほうのスライドで、「こういう値がほしい」みたいなページがあったと思います。ここのところですが、選手に具体的に返してあげるのか、あるいはコーチが知りたがっているのか、どちらのイメージなのでしょうか?

谷岡:トレーニングハウスなので、基本的にはトレーナーが知りたい数字ではあります。数字を知ったうえで、これぐらいの数字を目指しましょうとか。言葉では「体が開いている」と言うらしいです。でもそれがどういう意味なのかを聞かれた時に、撮影した動画や写真と合わせて説明に使うという話をうかがっています。

司会者:なるほど。ありがとうございます。やはりプロチームと比べて、機材をきちんと用意できない環境は当然あると思います。これだと、いわゆるスマホや、パソコンのカメラでもできるイメージですか?

谷岡:そうですね。これはパソコンのカメラで実験を始めていますが、実装上は、iPhoneでも動くようにはしようとしています。テストした限りはうまくいきそうです。UIの部分は、やはり見にくい部分もあるので難しく、もしかしたら最初はiPadか何かで試してみるかもしれないです。

司会者:ありがとうございます。今1点、質問がきています。野球の特性に関するところかなと思いますが、野球だと並進運動と回旋運動のマーカーで体が被ってしまい、追えない部分がありそうだと思います。その部分をどう補完するのか、考えがあったら教えていただきたいという質問です。

谷岡:これは私の完全な憶測というか目論見ですが、投球フォームだけに絞る、あるいはバッティングだけに絞ると、基本的にはそのフェーズでは肩はこちら、少なくとも右にあるはずだとか、左にあるはずだとか、回転した右投げ左投げによって、ある程度決まると思います。完全な自由ではないので、その定式化をうまくできていれば、推測もある程度は正しくできるのではないかと思っています。

司会者:ありがとうございます。そういったところにも関連して、このへんの速度の指標など、理想の値が一般論としてあるのでしょうか?

谷岡:あるそうです(笑)。

司会者:(笑)。そうなんですね。

谷岡:大リーグはすごく進んでいて、このへんの数字を全部取っているそうです。160キロ投げる選手はどれくらいのスピードで回しているか、どれぐらいの力がかかっているのかというデータはもう取れているらしいので、ここを目指すための数字は、ある程度揃っていると聞いています。

司会者:なるほど。それはおもしろい観点です。非常にユニークな発表をありがとうございました。