こんなの作りました
ボルダリングのコースを登っている動画をアプリで分析して、登ったコースの効率性を評価します。評価結果は数値出ます。数値が大きければ大きいほど効率の良い登りです。
分析できる動画には制限があって、アプリのトップ画面に書いています。
- スマホ推奨
- スペック低いスマホだとうまく動かないかもしれない
- ios未対応(厳密には動画が .mov の拡張子だと読み込めない)
WiFi環境推奨です。1分くらいの動画だと分析はだいたい1~2分くらいかかります。
1.分析する動画を選ぶ
2.登っていない動画の不要な部分をカットする
3.分析結果の表示
試しにアプリの動き見るだけなら、ネットで見つけた人の画像を、だいたい10秒くらい、ゆらゆらさせて、登ってる風にして撮っても分析結果はハチャメチャですが、問題はないです。
登ったコースの効率性とは?
効率の良さとは、イメージすると以下の画像になります。
- 赤色が効率の良い登り
- 黄色が効率の悪い登り
Pressfoto - jp.freepik.com によって作成された man 写真
基本的には、ボルダリングコースを登るときはスタートからゴールまでの距離は短く行きたいですね。このアプリの効率性では、赤色 > 黄色 という評価をしています。
ただ、もしかすると黄色の経路のほうがホールドが良く(持ちやすく)、力を消費せずに行けるかもしれません。もしかすると黄色の経路のほうが時間的にはゴールまで早くたどり着けるかもしれません。総合的な効率の良さを評価するには、もう少し工夫が必要ですね。
今回は経路の効率性の良さ、という角度で分析しているので、筋力の消費加減や時間は考慮していません。これらは今後の課題ですね。
分析の仕組み
動画に写っている人の姿勢を推定し、推定からわかるその人の骨格の座標を追跡することで、登ったボルダリングコースの経路を算出します。その経路がどの程度効率良かったかを数値化します。
人を姿勢推定するとこんな感じで、骨格の17部位を推定します。(鼻、左目、右目、左耳、右耳、左肩、右肩、左肘、右肘、左手首、右手首、左尻、右尻、左膝、右膝、左かかと、右かかと)
青色ホールドのコースを登っている人の姿勢推定を試しに行いました。
アプリでは骨格の描画をするビューはありませんが、内部的にはこの情報を元に分析をしています。17部位のポイントはわかりやすいように赤色にしています。
技術
姿勢推定では、PoseNet を使用しています。
https://github.com/tensorflow/tfjs-models/tree/master/posenet
PoseNet はブラウザ上で動くので、クライアント側で動画を処理して骨格の座標を特定しています。アプリでは実際に動画をサーバーにアップロードしているわけではありません。アップロードしているのは、動画から判定した人の骨格のみです。プライバシー問題回避ですね(骨格から人を特定することができるなら、話は別ですが...)。
アプリケーションは、AWS Amplify + Vue で作っています。Firebase でも良かったんですが、Amazon の社員さんが激オシしていたものでちょっと使ってみました。普段の業務ではAWSの利用が多いですし、使い慣れたIAMで権限を管理できるのも魅力ですね。
アプリが目指す方向性
サッカー・バスケットボール・野球など様々な分野で数字の重要性がフォーカスされていますね。今あげた球技系とボルダリングで決定的に違うのは、そもそもボルダリングにはそこまで数字の種類がないです。完登数・フラッシュ・レッドポイント・アテンプト数などなど、もうちょっとある気はしますが、メジャーな数字は10以下だと思います。なのでまず、その数字を作るところからです。
今の技術を使ったら、こんなのも数字化できるよ!という試みがこのアプリです。
数字化してみて、こんなの使えないよ、となったらそれまでです。解散ですね。
まとめ
姿勢推定を使ったボルダリングの分析はまだまだやれそうなところがあるので、今後も続けていきます。以上、終わり!投げ銭ウェルカム!