cedro-blog

OpenPoseで、複数人を同時にモーションキャプチャーしてみる

1.はじめに

 2018年12月に複数人のポーズ推定に関する論文が提案されました。今回は、その論文内容を実装したOpenPoseについてご紹介します。

 OpenPoseは、体、顔、手、足の推定のためのリアルタイムの複数人のキーポイント検出ライブラリで、今回は、これをGoogle ColabのGPUを使って動かしてみます。

2.OpenPoseの概要

 OpenPoseは、先に姿勢の推定の鍵となるキーポイントを抽出して,その後にキーポイントを人物ごとにマッチングさせるという考え方です.

 (a)Imput Image から 人のキーポイントを表す (b)Part Confidence Map とキーポイントとキーポイントの繋がりを表す (c)Part Affimity Fields を抽出します。そして、その繋がりを (d)Bipartite Matching でマッチングさせ、結果 (e)Parsing Results を出力します。

 つまり、一人一人を検出してから各人のキーポイントと繋がりを見つけて行くのではなく、キーポイントと繋がりだけを見つけてマッチングさせることで、高速な処理を実現しています。

 (b)Part Confidence Map と (c)Part Affimity Fields のネットワークは、

 Stageと呼ばれる単位で青色やベージュ色で囲まれた部分を重ねていきます。そして青色部分を4Stage,ベージュ色部分を2Stage重ねた形で実装しています。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンクをクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。

 まず、各プロジェクトファイルからCMakeでOpenPoseをビルドします。

 インターネット環境にもよりますが、1時間弱くらい掛かりますので、別の事でもやりながら、のんびり待ちます。

 次に、ダウンロードするYoutube動画を指定します。

 Youtube動画の共有ボタンを押すと、下記の様な表示がされますので、YOUTUBE_ID赤枠内の共有コードを設定します。コードを実行すると、対象となるYoutubeビデオが確認できます。

 

 そして、指定したYoutube動画をダウンロードし、20秒に編集し content/video.mp4 に保存します。

 !ffmpeg -y -loglevel info -i youtube.mp4 -ss 00:03:13.0 -t 20 video.mp4 では、ビデオ開始から3分13秒後から20秒間を使用する指定をしています。

 content/video.mp4 からポーズ推定した動画を作成します。自分の用意した動画を使う場合は、content/video.mp4 を置き換えて下さい。

 

 最後に、Google colab のインラインにmp4ファイルを表示させます。

https://cedro3.com/wp-content/uploads/2020/11/perfume.mp4

 凄い!これなら、Pose推定完璧じゃん!と思うのは気が早い。動画をコマ送りで見ると、結構外しています(笑)。

 検出精度に関しては、照明やスピードによる画像ブレなどは考慮すべきで、どんな状態でも完璧と言うわけではないです。

 では、また。

(参考)https://github.com/CMU-Perceptual-Computing-Lab/openpose

(Twitterへの投稿)

 新たな動画をTwitterへ投稿しました。