AlphaPoseをROS化する(PoseTrackingをROSで実装する)


はじめに

AlphaPoseとはこれ(https://github.com/MVIG-SJTU/AlphaPose)
1.AlphaPoseをROSで動かしたい.(Pose TrackingをROSで実装したい)
2.とりあえず動くようなコードができたが(https://github.com/yone-moto/AlphaPose_ros.git) ,β版であり,修正点が多いので,はやめに公開することでコードの改善をしたい.
というモチベーションです.

AlphaPoseとは

画像or動画内の複数人の人物の姿勢を推定してくれる深層学習のツールです.
人物の姿勢を推定してくれる深層学習のツールはAlphaPose以外にもたくさん公開されています.
その中でも一番メジャーなOpenPoseと比べて異なる点を挙げると,
・RealtimeでPose Trackingをしてくれる.
・Human Pose Estimationの一種で,OpenPoseよりもAPが優れている.
Top-downアプローチである.
だと理解しています.
今回はPose estimationとTrackingの実装がしたかったので,AlphaPoseをチョイスしました.

環境

ubuntu16.04
ROS version kinetic
というところです.
あとはAlphaPoseが動く環境であること.

AlphaPoseのROS化

機能の追加

AlphaPoseではapiのスクリプトを公開していますが,私の要求と比べると
画像対応のAPIなので動画に対応していない.
トラッキングの実装がない.
などがなく,追加をしました.コードはこちら(Alphapose_ros.py)
動いたらいいという感じなので最適化されてないです.

Pythonバージョン問題

Kineticはデフォルトでpython2なのでPython3への対応...(はやくROS2なりnoeticにしたい...)
なのでROSでノード化する場合こちらを参考にして,AlphaPoseで作成した仮装環境のPython3で動くようにしました.

画像をwebカメラから持ってくるときにpython3からcv_brige使ってtopic化を試みたのですが,どうやらpython3系に対応するにはcv_brigeのBuildのし直しが必要で仮装環境内では他のライブラリとの共存でうまく行きませんでした.こちらを参考に
そこでいろいろ調べたところ CompressedImageはpython3系に対応しているということでこちらを使ってwebcameraからの画像topicをpython3で受け取れるようにしました.こちらを参考に

動かし方

pkgになっているのでsrc直下に置く.

catkin_ws/src/ $ git clone https://github.com/yone-moto/AlphaPose_ros.git
catkin_ws/ $ catkin_make
######準備完了・実行######
catkin_ws/src/ $ roslaunch alphapose_ros alphapose_demo.launch
(alphapose) (path to)AlphaPose_ros/scripts/$./alphapose.sh

結果

Poseestimationの様子(Rvizで可視化)

一人の動画しかなくてトラッキングは見せられない...
右半分しか塗られてないのは意図的で,左半分も出力としてでてます.

オプション

どうしてもトラッキングをみせたかったので速度ベクトル(人物の進行方向)をライダーと組み合わせて算出.
こんな感じ

以上です.最後まで見ていただきありがとうございました.
今後もこの記事とコードを追記なり修正なりしたいです!!!!
そしてもっと世の中の役にたちたいです.