pytorch-openposeによる動画の姿勢推定【Python】

pytorch-openposeによる動画の姿勢推定【Python】 機械学習

「動画の姿勢推定を行いたい」
「Pythonで自由に呼び出せる形で行いたい」

このような場合には、pytorch-openposeがおススメです。

本記事の内容

  • 動画の姿勢推定を行うには?
  • pytorch-openposeのインストール
  • ffmpeg-pythonのインストール
  • 動画の姿勢推定を行う

それでは、上記に沿って解説していきます。

動画による姿勢推定を行うには?

動画による姿勢推定については、次の動画をご覧ください。

pytorch-openposeで姿勢推定した動画

この動画を作るためには、以下が必要となります。

  • PyTorch
  • pytorch-openpose
  • ffmpeg-python(FFmpeg)

そもそも、動画による姿勢推定は次のソフトウェアを使って実行することが可能です。

OpenPose(本家)
https://github.com/CMU-Perceptual-Computing-Lab/openpose

しかし、今回はOpenPoseを直接利用していません。
その最も大きな理由は、OpenPoseの利用規約にあります。

OpenPoseでは、無償の商用利用を一切禁止しています。
つまり、OpenPoseは有償ということです。
「どこがopenやねん!!」と突っ込みたくなります。

ただし、個人での無償利用はOKという状態になります。
他には、スポーツ分野での利用禁止などの制約が存在しています。

正直、制約が多すぎて使うのが嫌になります。
個人利用では、基本的には問題はないとは思いますけどね。

なお、pytorch-openposeはOpenPoseの学習済みモデルを利用しています。
学習済みモデルを拝借して、PyTorch用に変換をしているようです。

このことに関して、学習済みモデルの著作権について調べました。
調べた結果としては、学習済みモデルの著作権は法的にも意見が分かれるようです。

ここでは、pytorch-openposeがシロともクロとも言いません。
ただ、少なくとも、商用利用の際には法的に問題ないかどうかのチェックは必要でしょう。

あと、pytorch-openposeの方が拡張性があります。
PythonのAPIとして、利用できるのは利点です。

exeなどのバイナリだと、どうしても使い勝手が落ちてしまいます。
それもあって、pytorch-openposeがおススメです。

では、pytorch-openposeを使った姿勢推定の詳細を説明します。
まずは、pytorch-openposeのインストールからです。

pytorch-openposeのインストール

pytorch-openposeのインストールは、次の記事でまとめています。

基本的には、上記の記事の通りに行えば問題はありません。
ただし、今回は次の2点で異なったインストールを行っています。

  • Python3.7ではなくPython 3.9の利用
  • zipダウンロードではなくgitコマンドの利用

それぞれを下記で説明します。

Python3.7ではなくPython 3.9の利用

pytorch-openposeでは、Python 3.7が必須のように記載されています。
ただ、普通にPython 3.9でも動くはずだということです。

実際、次のバージョンで検証しています。

>python -V 
Python 3.9.7

現時点(2021年9月)では、最新バージョンのPythonとなります。
Python 3.9.7へのアップグレードは、次の記事で解説しています。

zipダウンロードではなくgitコマンドの利用

GitHubからpytorch-openposeをダウンロードします。
その際に、今回はgitコマンドを利用することになります。

git clone https://github.com/Hzzone/pytorch-openpose.git

個人的には、zipをダウンロードする方法よりも便利です。
解凍する手間も減りますからね。

Windowsでgitコマンドを利用するには、次の記事をご覧ください。

まとめ

pytorch-openposeをダウンロードして以降は、全く同じです。
次のコマンドでpytorch-openposeのインストールとなります。

pip install -r requirements.txt

ただし、事前にPyTorchはインストールしておきます。
以下のように、PyTorchがインストール済みであることが前提です。

>pip list 
Package           Version 
----------------- ------------ 
numpy             1.21.2 
Pillow            8.3.2 
pip               21.2.4 
setuptools        58.0.4 
torch             1.9.0+cu111 
torchaudio        0.9.0 
torchvision       0.10.0+cu111 
typing-extensions 3.10.0.2

PyTorchのインストールは、次の記事で説明しています。

以上、pytorch-openposeのインストールを説明しました。
次は、ffmpeg-pythonをインストールします。

ffmpeg-pythonのインストール

pytorch-openposeで動画を処理するには、ffmpeg-pythonが必要です。
ffmpeg-pythonにより、PythonからFFmpegを操作できるようになります。

ffmpeg-pythonのインストールは、次の記事で解説しています。
もちろん、FFmpegのインストールについても説明があります。

ffmpeg-pythonの動作確認まで終われば、次へ進みましょう。

以上、ffmpeg-pythonのインストールの説明でした。
最後は、実際に動画の姿勢推定を行います。

動画の姿勢推定を行う

学習済みモデルのダウンロードページ
https://www.dropbox.com/sh/7xbup2qsn7vvjxo/AABWFksdlgOMXR_r5v3RwKRYa?dl=0

モデルのダウンロードをしておきます。
詳細は、参考の記事をご覧ください。

あと、動画も用意しましょう。
私は、以下の無料動画を利用します。
https://pixabay.com/videos/id-21827/

この時点でpytorch-openposeディレクトリ配下は、次のような状況です。

「model」ディレクトリには、学習済みモデルを設置しています。
また、「video」ディレクトリを新規に作成。
その中にダウンロードした動画を保存しています。

ここまで状態が整えば、姿勢推定を実行できます。
実行するためのコマンドは、以下。

python demo_video.py ./video/test.mp4

上記を実行すると、エラーが出ることがあります。
もちろん、動画次第ですけどね。

ただ、次のようなエラーが出ると考えた方がいいでしょう。
エラーが出た際に、慌てないためにもです。

[libx264 @ 000002082abf4c40] width not divisible by 2 (853x480) 
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height 
Conversion failed!

このエラーが出た場合は、対象動画のサイズを変更します。
奇数サイズ(「(853×480)」)の動画は、どうやらエラーがでるようです。

そこで、次のコマンドで横縦が偶数になるようにサイズを変更します。
コマンドの詳細は、調べてみてください。

ffmpeg -i ./video/test.mp4 -vf scale=852:ceil(ow/a/2)*2 ./video/test_new.mp4

このコマンドを実行すると、「video」以下に「test_new.mp4」が作成されます。
サイズ変更された動画を対象にして、再度「demo_video.py」を実行します。

python demo_video.py ./video/test_new.mp4

正常に実行されると、次のような画面が表示されます。

随時、この画面内の表示が変わります。
まさに、処理中という感じで表示される内容が変化します。

元動画の長さは、5秒です。
処理が完了するのに、約6分かかりました。

処理の最中は、GPU・CPU・メモリがまだ余裕でした。
100%ではなかったということです。

オプション次第では、もう少し処理を速くできるかもしれません。
そのあたりは、調べてみる必要がありますね。

なお、姿勢推定を行った結果は「video」以下に保存されます。
「test_new.processed.mov」という名前のファイルが、作成されています。

その結果の動画が、冒頭付近の動画となります。

タイトルとURLをコピーしました