(dev)juginon-blog

勉強したこと、趣味のこと。

【Mac】【macOS Mojave】OpenPoseを使ってみよう(Caffe版)

お久しぶりです。じゅぎのんです。

プリオータムライブ→部活大会遠征(2日間)→卒研中間発表(大会翌日)という超過密スケジュールを9月に乗り越え、無事に新学期が始まりました。

大会遠征からの中間発表は体力的にも精神的にもかなり追い詰められていましたが中間発表は特に何事もなく終えられました(多分)。

僕がやろうと思っている研究テーマはアバウトに言うと「人がタスクを切り替えるときに最適と感じるタイミングはいつなのか」って感じです。それを検証する上で必要となった OpenPose を今日は紹介したいと思います。

OpenPoseとは?

github.com

OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation

とあるように、OpenPoseとはディープラーニングを用いた身体・顔・手・足の認識をしてくれるライブラリです。

今までの人のモーション認識というのは、光る球みたいなのを関節部分に取り付けて、それをカメラで撮ることで骨格や顔を認識していました。

またMicrosoftKinectは特にそういった体につける装備は必要としなかったものの、Kinect本体という特殊なカメラが必要でした。

Openposeの強みはすでに撮影された動画から骨格を抽出できること(割と正確に)や、PC単体でもリアルタイムの認識が可能(かなりカクカクだけど)なことなどです。

正直普通のノートPCだと動かせたもんではないので、用途的には撮影した動画をぶち込むのが一番簡単でわかりやすいかな。

ちょっと前に弊学陸上競技部にて、東工大陸上部の選手のとあるブログが話題に上がりました。

miyublog2.hatenablog.com

この記事を見て、自分が骨折をする前と後で走り方がどれくらい変わったのか見てみたい気持ちもあったし、顔認識・頭部の動きの検出が正確にできることはかなり研究の進捗を生み出してくれるものだったので、今回環境構築するに至りました。

環境構築

まず僕のPC環境です(結構環境によってインストールのコマンドが変わっているので大変だった)

【PC】MacBook Pro (13-inch, 2017)

【OS】macOS Mojave 10.14.6

【CPU】2.3GHz Intel Core i5

【RAM】8GB 2133MHz LPDDR3

macOS Catalinaで動作するかはわかりません。。正直怖いので当分アップデートはしないつもり。

では、順を追って説明していきましょう。

注意: OpenPoseは本家であるCaffe版とtensorflow版があります。tensorflow版は一度試してみたものの、画像の出力がうまくできなかったので今回はCaffe版の導入を紹介します。

基本的には以下の記事にしたがって環境構築をしました(とても参考になりました、ありがとうございます)

macでopenposeを使い始めるまで - Qiita

MacでOpenPose (本家) を動かしてみる - STELLALOG

githubからclone

git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
cd openpose

でcloneしたディレクトリに入ります。

フレームワークのインストール

OpenPoseに必要なフレームワークをインストールします。インストールするために必要なHomeBrewをインストール(ややこしい)する方法も下。

HomeBrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

CMake

brew cask install cmake

OpenCV

bash scripts/osx/install_deps.sh

(bash 3rdparty/osx/install_deps.shの方ではエラーが出てインストールできませんでした)

Caffeの再インストール (これは必要かわからないけど一応やっておいた)

brew uninstall caffe
brew install caffe

CMakeでビルド設定

cmake-gui

次に、CMakeのウィンドウを開いてビルド設定を行います。

GUI画面が開いたら、上部のWhere is the source code:に作業中のopenposeディレクトリを指定、

Where to the binaries:にopenpose/buildを指定(cloneしたときには存在しないフォルダ)します。

次に、Add Entryから以下の情報を追加します。

Name : BUILD_CAFFE
Type   : bool
Value  : false (チェックボックスのチェックを外す)
Name : Caffe_INCLUDE_DIRS
Type   : PATH
Value  : /usr/local/include/caffe
Name : Caffe_LIBS
Type   : PATH
Value  : /usr/local/lib/libcaffe.dylib

追加後、Configureで設定を反映します。(特になにもなければこれで大丈夫なはず)

openposeのビルド

cd build

で先ほど追加したbuildディレクトリに移動後、以下のコマンドでビルドを実行します。

make -j`nproc`
sudo make install

以上でopenposeが使えるようになります!!

動かしてみた

実行は ./build/examples/openpose/openpose.binコマンドでできます。

画像の解析(ディレクトリ一括)

./build/examples/openpose/openpose.bin --image_dir /path/to/image

動画の解析

./build/examples/openpose/openpose.bin --video examples/media/video.avi

Webカメラを使ったリアルタイム解析

./build/examples/openpose/openpose.bin

結果を出力

画像

./build/examples/openpose/openpose.bin --image_dir /path/to/image --write_images /path/to/directory

動画

./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_video /path/to/directory

他にもオプションで解析した座標を保存するもの、背景を黒くするものなどがあるので、適宜利用しましょう。

僕のPCだと、15秒くらいの動画が16000秒くらいかかりました(クッソ重い)。寝る前に計算を回して朝結果を見る感じです。

そんな感じで2日間かけて腰の骨を折る前と後の動画を解析しました。

f:id:ogijunchang:20191024212857j:plainf:id:ogijunchang:20191024212908j:plain
左:骨折前 右:骨折後

ぱっと見でも骨折前はだいぶ前傾している(腰が引けている)ことがわかると思いますが、数値でも78°→86~7°(水平からの角度)とだいぶ身体が起きているがわかると思います。

実際記録もちゃんと伸びたので、こうして今まで撮影した動画をデータとして解析できるのはとてもいいなと思いました。

ちなみに走高跳の動画でも試してみましたが、背面跳びで体がバーを超えた瞬間にOpenposeが僕を人と認識しなくなり、あまりいい結果は得られませんでした。

おそらく頭が体より下になるときちんと認識されなくなるみたいです(そりゃ学習モデルに背面跳びしてる人なんていないだろうし)。

おわりに

今後の予定としては、解析速度が遅すぎるのを解消するためにGPUを使って解析できるようにします。

研究室に爆速GPUがおいてありますが、Dockerを使ってリモート稼働させないといけないので、Dockerの使い方も覚えなければ。。(全然わからん)

GPUを使った使用方法もわかり次第備忘録として記事を書きたいと思います。

あっやばい、オタクの話してなかった!!

f:id:ogijunchang:20191024210043j:plain

アイカツスターズ!をすでに完走して、現在アイカツフレンズ!64話まで見終わりました。

追いつくまであと少し!アイカツオンパレードであこちゃんを見るのが楽しみだゾ〜〜〜