エンジニアリングとお絵描き

お絵描きが趣味のエンジニアが、誰かの為になりそうなことや未来の自分の助けになりそうなことを書き残します.

OpenPoseを使った姿勢推定

@miu200521358様の記事を見ながらMMD自動トレースを行ってみようと思いました。 qiita.com

OpenPoseは元から入っていたので、それ以降の作業から取り掛かりました。 結構躓いたので記録として残したいと思います。(そもそも一日かけても結果出力までたどり付けなかった...)

jsonファイルが出力できない

OpenPoseでは画像や動画から検出した骨格情報をjsonファイルで出力することができるのですが、何故かそれがうまくいきませんでした。 コマンドの書き方が悪いかと思ったのですが、問題はOpenPoseを置いていた場所で、管理者権限が無いとファイルの変更や書き込みができない場所に保存していました。 (どういうところで管理者権限が必要なのかは理解していない...)

この問題は普通にデスクトップやCドライブ直下などにOpenPoseを置けば解決すると思います。

mp4形式の動画が読み込めない

Zoomを使って動画を作成しようと思い、録画機能を使って出力してみたところ動画の形式はmp4でした。 OpenPoseの検出サンプル動画はavi形式で行っていたため、mp4の動画を入力する方法を調べた結果 --video input.mp4 と入力すれば良いと出てきたのですが、 エラーが出て実行できませんでした。

結果、input.mp4は付けずにaviの動画入力と同じようにコマンド入力すればmp4も読み込めました。 (OpenPoseのバージョンは1.6.0)

FCRN-DepthPrediction-vmd の導入

まず、参考にした@miu200521358さんの記事ではAnacondaを導入しているのですが、Anacondaに関して全然調べない状態で記事にないコマンドを幾つか入力してしまい、一度は動いたtensorflowが動かなくなってしまいました。 主な原因としてはcondaとpipの違いを理解せず、競合してしまったことだと思います。 結局PythonもAnacondaアンインストールし、環境を作り直しました。

次に、tensorflowのバージョンアップによるプログラムエラーが起こりました。 バージョン1と2で使えなくなるモジュールが幾つかあるようで、エラーが出ました。 しかし、tensorflowをimportするとき以下のように書けば解決できます。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

最後に、OpenPoseのバージョン変化によると思われるエラーが発生しました。 これは自分の予想が入るので確かではないのですが、OpenPoseのバージョンアップにより検出する骨格座標の数が18から25へ増え、 バージョンアップ前のOpenPoseを想定しているプログラムでは動かなくなっているようでした。

この座標数の変化によるプログラムの修正箇所は思って以上に多く、今の自分のPython知識では完全に治すことは難しいと考えたため、 記事が書かれた当時のバージョンと思われるOpenPose1.3.0を再ダウンロードすることにしました。

これにより正しく動作するかはまた後日確認したいと思います。

[追記] OpenPose1.3.0を入れたところ、何故か動作しませんでした。 途方に暮れながら@miu200521358様の記事を眺めていたところ、Qiitaの下の方にあるコメント欄に解決策が載っていました。

OpenPoseを起動する際のパラメータに「--model_pose COCO」と追加することで、OpenPoseの出力を25点から18点へ変更することができるみたいです。 これにより無事動作させることができました。