#目次
1.OpenPoseを動かしてみた。
2.OpenPoseチュートリアルのソースコードを読む。
3.WindowsでOpenPoseを動かしてみた。
4.OpenPoseのFace Estimationを動かしてみた。
5.OpenPoseのHand Estimationを動かしてみた。
#背景
CVPR2017で発表された、DeepLearningを使った、単眼カメラでのスケルトン検出アルゴリズムが、OpenPoseという名称でライブラリ化・公開されました。
早速、Ubuntu(1404)で、OpenPoseのPose Estimationを動かしてみたので、手順を解説します。
https://github.com/CMU-Perceptual-Computing-Lab/openpose
上記画像ソースは、[ ぱくたそ(www.pakutaso.com)]様のフリー写真素材を使用しました。
#論文
Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields, CVPR 2017:
動画:
Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields, CVPR 2017 Oral - YouTube
プレゼン:
Multi-person pose estimation-CMU
論文:
https://arxiv.org/pdf/1611.08050.pdf
##使用環境
Description: Ubuntu 14.04.5(x64) LTS trusty
CUDA Version 8.0.61
NVIDIA-SMI 375.66 / Driver Version: 375.66 / GeForce GTX 1050
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
OpenPose 1.0.0rc1(Apr 2017)
#ライブラリのインストール
基本的にはdoc/installation.mdを参照してインストールすれば良い。
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md
OpenPoseは、CUDA, cuDNN, OpenCV, Atlas を予めインストールする必要がある。
私の環境はUbuntu1404の為、CUDA8.0とcuDNN5.1をインストールした。
###CUDAのインストール
https://developer.nvidia.com/cuda-downloads
から、debをダウンロードしてインストール。
sudo dpkg -i cuda-repo-ubuntu1404-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
HOMEの.bashrcに以下を追記。
export CUDA_HOME=/usr/local/cuda-8.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CUDA_HOME}/lib64
export PATH=$PATH:${CUDA_HOME}/bin
###cuDNNのインストール
https://developer.nvidia.com/rdp/cudnn-download
から、debをダウンロードしてインストール。
ダウンロードにはユーザ登録が必要となる。
ver5.1
sudo dpkg -i libcudnn5_5.1.10-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn5-dev_5.1.10-1+cuda8.0_amd64.deb
ver6.0
sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb
ここで、私の環境では、
libEGL.so.1 is not a symbolic link
が出た為、以下のようにリンクを修正。
sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1
参考:linux - libEGL.so.1 is not a symbolic link - Stack Overflow
###OpenCV , Atlasのインストール
これはapt-getでインストールすれば良い。
sudo apt-get install libopencv-dev
sudo apt-get install libatlas-base-dev
#openposeのインストール
openpose直下の、下記のファイルを実行すると、付随して必要なライブラリ・学習器のダウンロード・インストールと、サンプルのコンパイルが行われる。
./ubuntu/install_caffe_and_openpose_if_cuda8.sh
#サンプルを動かしてみる。
####1. サンプル動画で動かしてみる
./build/examples/openpose/openpose.bin --video examples/media/video.avi
####2. Webカメラで動かしてみる
./build/examples/openpose/openpose.bin
####3. サンプル静止画で動かしてみる
./build/examples/openpose/openpose.bin --image_dir examples/media/
#ソースをコンパイルしてみる。
openposeは/example/usercode以下にソースコードを格納すると、openpose直下のMakefileでコンパイルが通るようになっている。最小のサンプルである、"1_extract_from_image"(静止画を読み出し、スケルトン推定を行うサンプル)をusercode以下にコピーし、makeする。
cp examples/tutorial_pose/1_extract_from_image.cpp examples/user_code/
make
makeされた実行ファイルは、./build/examples/user_code/の下に格納されている。
./build/examples/user_code/1_extract_from_image.bin
なお、1_extract_from_image.cppは27行目でファイル名を指定している。ここのjpegファイル名を変更すれば、任意の画像を読み出すことができる。
DEFINE_string(image_path, "examples/media/COCO_val2014_000000000192.jpg","Process the desired image.");
#所感
RGB-Dカメラでも、ステレオでもない、単眼のWEBカメラでリアルタイムにスケルトン検出ができてるのを見ると、純粋に技術の進歩を感じる。