8/9(金) 深層学習で陸上動画から骨格を取り出してみた
8/9(金)
GC)まぁまぁ暑い
PC)泥のように眠ってもまだ寝足りない
メニュー) アクティブレスト
テストが終わった
本来だったら大会の1週間前から一切走らないのが自分の調整方法だが、今回はなんだかんだあって、昨日走った。ここからは完全に疲労を抜いていき、月曜日の対校戦にあわせていきたい。
今日でようやくテストが終わった。テスト後のマリカはストレス発散には役立たなかったけど、明日の部活は気持ちよさそうだ。
コンセントとWi-FiとMacBookProがあると、テスト勉強に集中できない。PCで資料を見ているうちに、昨日も違うことをしてしまった。
本来だったら夏休み入ってから手をつけようと思っていたけど、思ったより簡単にできたのでここで紹介したい。
「人間の骨格を抽出する」プログラムだ。
OpenPoseとは何か?
OpenPoseというライブラリを使用している。
半年前に十数時間チャレンジして静止画しか成功しなかったけど、Linuxに慣れてきたのか、今回はテスト勉強3時間分と引き換えに成功した。
何ができるかを説明しよう。
人が写っている動画や画像を持ってきて、それをプログラムに投げるだけで、勝手に人間の骨格を出してくれるのだ。
膝、肘といった関節や首や脚などの体のパーツ、背骨や大腿骨、骨盤などの骨を抽出してくれる。深層学習による骨格検出といったところ。
見た方が早いと思うので、ここに動画のリンクをのせる。今週の月曜日のギャロッピングの動画を読み込ませて、骨格を乗せた状態で出力させた。
やろうと思えば、骨格だけの動画を作ったり、体の一部、例えば骨盤から下のスケルトンだけの動画を作ったり、あるパーツの座標を追うことができる。
これは陸上の練習に革命をもたらすことになる。
ちなみに上の練習の記事はこちら。
無料だし誰でも使える!
プロの解析屋さんにお任せすると時間だけでなくお金がかかり、個人で依頼するのはハードルが高い。
それに対し、OpenPoseなら無料で使える。商用だと300万ほど必要だけど、個人利用なら無料なのだ。自分でゼロから深層学習用のデータを作らなくていい。
しかもその辺のPCで動かせる。
動画から骨格を抽出しようとするとスペックによっては時間が相当かかるかもしれない。
自分のパソコン(Mac Book Pro 13-inch 2017 RAM 16GB)だと、1秒の動画に対し400秒かかる。(1920 × 1080 30fps)
GPUが乗っていないからまぁまぁ時間がかかる。
それでも動画を投げて、寝ている間にでも処理させておけば、朝起きたら骨が見えてるっていう素晴らしさ。
OpenPoseを使用するためには、当然ながら自分で環境を構築する必要がある。仮想環境を作って、TensorFlowで動かしてもいいし(前回ハマってできなかった)、CMakeでビルドしてもいいけど、そこまでネット上に簡単な参考資料がない。ある程度周辺知識を持っている必要がある。ハマれば時間が数時間単位で消えていくだろう。
それでも、その実用性を考えれば、頑張ってみるに値するだろう。
実際あった話
実際これがどのように使えるのか、さっと例を挙げてみる。
①
腿上げのドリルを撮影した。接地時に腰が下がっているのか、脚がどこまで上がっているのかを知りたい。パワーポイントやフォトショップで1コマ1コママークを打とうとしたけど2時間かかって失敗。
→OpenPoseを使えば、夕飯を食べて、お風呂を上がった頃には骨格が正確に出ている
②
ハードルジャンプの動画。続いて次々と人が飛ぶ。自分のジャンプの高さや、脚のハードルとの相対位置を、他人と比較したい。
→OpenPoseなら、動画内に何十人いても、人同士が重なっていても骨格を出せる。
③
300mのラスト、隣のレーンを走る速い人と自分が写った動画がある。ラストで差をつけられてしまう理由を、足の軌道に着目して考えたいけど、動画を見ているだけじゃよくわからない。
→OpenPoseを使えば、二人の足首の描く軌道を取り出せる
・せっかく150*4を走ったのに、何も得られなかった気がする。動画を見ても、どこに着目すればいいのかわからない
→OpenPoseを走らせて、服や背景など、いらない情報を消して、スケルトンを見てみよう。課題が自ずと見えてくるはずだ。
今後は、この技術も使いつつ色々分析していきたい。