OpenPoseをROSで動かします。
カメラ画像のデータをsubscribeして、人検出および各関節位置の情報と、それを入力画像にレンダリングしたものをpublishします。
コードは以下にて公開しています。
https://github.com/slowsingle/openpose_ros
事前準備
OpenPoseを先にインストールしておいてください。インストール方法はOpenPoseを動かしてみた。などをご参照ください。
なお、私の環境はUbuntu16.04でROSはkineticです。それ以外の環境ではテストしておりませんのでご了承ください。
コンパイル
catkin_makeでコンパイルするのですが、openposeおよび同時にインストールしたであろうcaffeの場所が使用するPCによって異なるので、その部分を書き換える必要があります。
:
:
:
include_directories(
${catkin_INCLUDE_DIRS}
/usr/local/cuda/include
/home/kerberos/openpose/include
/home/kerberos/openpose/3rdparty/caffe/include
/home/kerberos/openpose/3rdparty/caffe/.build_release/src
)
:
:
:
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
/usr/lib/x86_64-linux-gnu/libglog.so
/usr/lib/x86_64-linux-gnu/libgflags.so
/usr/lib/x86_64-linux-gnu/libgflags_nothreads.so
/home/kerberos/openpose/build/lib/libopenpose.so
/home/kerberos/openpose/3rdparty/caffe/.build_release/lib/libcaffe.so
)
CmakeLists.txtの/home/kerberos/~のところを自分の環境に合うように書き換えてください。
ここを正しくしないと、openposeやcaffeを呼び出すことができません。
catkin_makeしてから、usb_camでカメラ画像を読み込んだ後、
rosrun openpose_ros openpose_ros_node
と打って、実行します。すると、2つのトピックがpublishされます。
/openpose/image_raw
/openpose/poses
とりあえず/openpose/image_rawをimage_viewやrviz等で可視化してみると、OpenPoseが動いていることを確認できるはずです。試しに人の絵が写っている漫画の表紙とかを見せてあげると、OpenPoseが認識してくれたりします。すごい! (もちろん、私も人間として認めてくれました)
別のノードと組み合わせて高度な処理がしたいときは/openpose/posesをsubscribeしてください。詳しくはmsgの型を見ればわかりますが、検出した人と、その関節位置および確率値(confidence)が格納されています。