目的
趣味でやっているバレーボールのプレー動作を分析し、良い時と悪い時の違いを研究したい。
背景
なんとなくこういうプレー動作しているな、なんとなくこういう傾向があるな、だからこうなんじゃないか、という主観や曖昧さを排除し、客観的にデータからプレー動作の傾向を自分なりに研究したいと思った。
OpenPoseとは
カーネギーメロン大学のCenter for Technology Transfer and Enterprise Creation (CTTEC)で開発されたソフトウェア。
リアルタイムで複数人数のキーポイントの検出とマルチスレッドができるOpenCVとCaffeを使用したC ++のライブラリで画像から人の体や手、顔など合計130個のキーポイントを検出することができるリアルタイムシステム。
スポーツ分野での商用利用は不可。
- wikipedia
- OpenPoseのGitHub
やりたいこと
動画内のプレー動作をOpenPoseで解析し、動作を可視化する。
実行環境
- Google Colaboratory
内容
1. OpenPoseのインストール
OpenPoseのリポジトリをクローンしGoogle Colab上にインストールします。
結構時間がかかるので、実行したらしばらく放置で。
import os
from os.path import exists, join, basename, splitext
git_repo_url = 'https://github.com/CMU-Perceptual-Computing-Lab/openpose.git'
project_name = splitext(basename(git_repo_url))[0]
if not exists(project_name):
# see: https://github.com/CMU-Perceptual-Computing-Lab/openpose/issues/949
# install new CMake becaue of CUDA10
!wget -q https://cmake.org/files/v3.13/cmake-3.13.0-Linux-x86_64.tar.gz
!tar xfz cmake-3.13.0-Linux-x86_64.tar.gz --strip-components=1 -C /usr/local
# clone openpose
!git clone -q --depth 1 $git_repo_url
!sed -i 's/execute_process(COMMAND git checkout master WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}\/3rdparty\/caffe)/execute_process(COMMAND git checkout f019d0dfe86f49d1140961f8c7dec22130c83154 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}\/3rdparty\/caffe)/g' openpose/CMakeLists.txt
# install system dependencies
!apt-get -qq install -y libatlas-base-dev libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev opencl-headers ocl-icd-opencl-dev libviennacl-dev
# build openpose
!cd openpose && rm -rf build || true && mkdir build && cd build && cmake .. && make -j`nproc`
2. OpenPoseに動画を食わせて解析
適当な動画を用意しておきます。
!cd openpose && ./build/examples/openpose/openpose.bin --video ../input_movie.mp4 --write_json ../json --display 0 --write_video ../output_movie.avi
各オプションについては下記。
--video
入力となる解析動画のパスを指定します。
--write_json
解析結果が出力されるディレクトリを指定します。
今回は動作を目視するだけなので活用はしませんが、体のポイントが書き込まれているようなので、今後の展開でもありますが、後々こいつを読み込んで詳細な分析をするつもりです。
--display
結果表示を指定します。
今回は0にしてます。
そもそも何の結果が表示されるのか把握してませんが。。。
--write_video
出力となる解析済み動画のパスを指定します。
3. 解析済み動画を確認し目視で解析
--write_video
に指定したパスの動画を確認します。
今回は著作権の関係もあり、バレーボールの動画が用意できなく、参考にフリー静止画素材を解析した際の結果を掲載します。
動画の場合においても同様に解析が行われ、再生時にワイヤーが体に追従し表示されます。
フリー素材の取得元
https://www.photo-ac.com/
作成したコードのGitHub
雑ですが、ReadMeに使い方が載ってます。
本投稿の内容は主となる部分を抜粋したものとなり、多少使い勝手を良くするため、周辺コードが含まれています。
尚、今回は動画解析について触れましたが、コードには画像解析の処理も含まれているため、興味のある方は閲覧してみてください。
処理についての解説はコード上のコメントやテキストセルの解説を参照願います。
今後の展開
目視にてプレー動作を解析することはできたため、次はこの動作結果を比較し、厳密な違いを見つけ出したり、何が違うかを客観的に導けるようにしたい。
最後に
スポーツ分野での商用利用は不可とのことだが、スポーツ以外でも色々夢が広がるなと思った。(適当ですみません)