見出し画像

画像処理:骨格推定Open Poseを嗜む

今回は、性能を自分の目で見たいとの好奇心で
OpenPoseを楽しんだことを報告したいと思う。
検索したら、それなりに参考になる記事は出てくるのだけど、
現在のバージョン(1.7.0)ではエラーに出くわしたので、
誰かの役に立てばと、書き残しておきたい。


準備

まずは、以下のファイルをGitHubからダウンロードする。
どうも、2020年で更新はとまっている模様である。
今回は、素早く試すので、CPU版を利用した。

手順

PCに慣れていたらそんなに戸惑うことはないと思うが、解説しておく。
フォルダの構成は以下となる。

まぁ、想定される普通に、わかりやすい構造だ。
ただの小技だけど、筆者は忘れやすいので、自信が作成したフォルダ等には
myの接頭子を付与することをよくやる。
今回は、自身の写真を入れるフォルダと処理画を保存するフォルダ名をそうした。あとは、バッチファイルにも付与してある。
これで、最初に頒布されたものと、見た目でわかるといった寸法だ。

予備知識

この手のAI/MLのジャンルでは、モデルファイルが必要になるのが普通だ。
しかし、モデルファイルはそこそこ大きく、当該ZIPなどには含めないのが慣習である。これを知らないと、モデルファイルがないとあたふたするw
まぁ、ちゃんとreadmeとか読めば、先にダウンロードしてねとは書いてくれてるので、ちゃんと英語を見てほしい。

モデルファイルのダウンロード


modelsフォルダを開けるとご親切にバッチファイルがあり、ばっちり誰でも気が付けるような配慮が心にくい。感謝しかない。
本来は、ここでgetBaseModels.batを実行するのだけど、
リトライが永遠に続くので、サーバー側に問題があるのだろうとあきらめてほしい。次の手を試してみた。

echo ------------------------- POSE (BODY+FOOT) MODELS --------------------
echo Body (BODY_25)
set BODY_25_FOLDER=%POSE_FOLDER%body_25/
set BODY_25_MODEL=%BODY_25_FOLDER%pose_iter_584000.caffemodel
%WGET_EXE% -c %OPENPOSE_URL%%BODY_25_MODEL% -P %BODY_25_FOLDER%
echo ----------------------- POSE DOWNLOADED -----------------------

getBaseModels.bat

バッチファイルをのぞくと、
ダウンロードするモデルが複数あるのがうかがえる。
今回は、骨格推定をしたいので、
pose_iter_584000.caffemodel を入手すればよい。

あまり深く悩まずに、このファイル名で検索してみてほしい。
すると代わりにダウンロードできそうなところがだいたいみつかるし、
同じ問題で議論されたサイトがみつかる。

今回は、別のGitHubのリポジトリにあるようだ。
別途ダウンロードしてみてほしい。

バッチファイルの中を読むと指定のフォルダがあるので、
ダウンロードして、正しく格納してほしい。
姿勢の推定なんで、poseのbody_25の下に配置した。


"C:\Users\****\OneDrive\ドキュメント\openpose\models\pose\body_25\pose_iter_584000.caffemodel"

実行

binのなかに沢山exeがあり、どれを使えばいいのか正直わからないw
適当なサイトを検索してみると、

OpenPoseDemo.exeを利用するみたいだ。
フォルダにもちゃんといてくれたので、参照したサイトに従ってみる。
bin\OpenPoseDemo.exe --video examples\media\video.avi

ヘルプの参照:オプション指定


とてもシンプルで、引数にサンプルのビデオを指定している。
--videoオプションだけか・・・
筆者は、CPU版を利用したので、動画だととんでもなく遅いw
ということで、早く試したい。
どうにかオプションを見つけるしかない。
試行錯誤してみてが、当たらないので、
まぁ、普通にヘルプを探すことにする。
いろいろを試すことにした。
hやHを試してだめで、結局は、-helpが正解だったw
さっそく、長いヘルプを眺めてみると、

-write_images (Directory to write rendered frames in `write_images_format`
image format.) type: string default: ""
-write_images_format (File extension and format for `write_images`, e.g.,
png, jpg or bmp. Check the OpenCV function cv::imwrite for all compatible
extensions.) type: string default: "png"

あるじゃん、保存できそうなオプションが・・・
-write_images でフォルダを指定するといいみたい。
保存画像はディフォルトでPNGと記載もみつかる。
肝心の静止画の入力ファイルの指定はない。
がしかし、IPの指定やらUSBカメラ?とかと
入力ソースの切り替えがみつかったので、
-videoのままでいいのかもと考えた。
試してみると、問題なく動作した。
まぁ、OpenCVが中にあるのだろうと思うので、推察通りなのかも。

bin\OpenPoseDemo.exe --video "my_still\WIN_20241214_23_39_41_Pro.jpg" --write_images my_out

もう、確かめてないのだけど、ハイフンは一つでいいのか??
参照したサイトは二つだったので、従ったけど。いい加減で申し訳ない。
まぁ、helpは一つでも動作したので、割愛させてもらう。
適当に自分をUSBカメラで撮影して、それを骨格推定してみたけど、
掲載ははずかいいので、適当な画像を生成してもう。

今回は、1024x1024のpngを処理させてみたところ、
筆者の環境(Intel(R) Core(TM) i3-14100 3.50 GHz)では、
5秒程度と、CPU版でも、まずまず使えそうな印象だ。
今回は、六名がイラストに描かれているが、全部ばっちりすぎる。
モデルファイルも100MBちょいと、現実的なサイズで実にいい。

感想

ここまで、正確にOSSで解析できるのはすごいと感じた。
やはり、オクルージョンに対しても骨格が正しく推定されている。
これで、2020年時点とは恐れ入った。
ちゃんとヘルプの出力パラメータをみてないが、
3D空間で、骨の向きはベクトルになってるのかもしれない。
だとして、これはとても応用範囲の広いいい技術だと思う。
ロボット制御に貢献してくれそうで、期待がもてる。



いいなと思ったら応援しよう!