DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

VPS上で画像から人の骨格を推定するOpenPoseが実行出来るのか実験してみた tf-pose-estimationならとりあえず動く

映像や画像から機械学習を用いて骨格を検出するプロジェクトの一つ「OpenPose」を用いた映像がこちらです↓


Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields, CVPR 2017 Oral

 

めちゃめちゃスゴイ精度ですね。

 

この技術を用いると、特殊なスーツやセンサーを用いずとも機械に人の動きを入力する事が出来ますし、防犯カメラ映像から不審者を割り出すことも今までより容易になります。

なにより、これ出来たらカッコイイ!!これは是非やってみたい!!!!

 

しかし、本家OpenPoseは主にGPUを用いたアルゴリズム版で、別にCPU版の設定もあるそうですがこれは情報が少なくて難しそうでした。

 

VPSで使う場合はもちろんGPUなどありませんからCPUで判定させることになります。

 

そこで、色々と調べて回るとどうやらtf-openposeという、本家OpenPoseの真似をしてGoogleの誇るTensorFlowを使ったTensorFlow版OpenPoseというものがCPUのみで動作するということを知りました。

加えて、本家OpenPoseは研究用途はフリーライセンスでOKだそうですが商用利用は有料になるそうです。tf-openposeは商用利用まで無料のお手軽版のようです(その分精度は期待してはいけませんが)。

 

以前にラズパイでTensorFlowのラッパーライブラリーであるkerasを用いた画像判定をしたことがあるのでTensorFlowには少しだけ馴染みがあります。

dreamerdream.hateblo.jp

tf-openposeは、tf-pose-estimationやtf-pose等とも呼ばれており、開発中のプロジェクトということもありネットでの情報も錯綜しています。

僕も導入には結構手間取りましたので個人的な備忘録として今回は残しておきます。 

 

環境はConohaのVPSの一番安いプラン、CentOS8.2です。

<過去記事>

dreamerdream.hateblo.jp

 

 

 

事前に必用なライブラリ類インストール

結構いろいろなライブラリが登場します。

サーバーに組み込んでしまうとアップデートの度に不安定になるかもしれない、という不安が頭をよぎります。

 

openCVー画像処理用

sudo pip3 install opencv-python

 

gitーソースコードの取得用

sudo dnf install git

 

gccーC言語等のコンパイラ

sudo dnf install gcc

 

swigーC++コードをpythonから呼ぶラッパライブラリー

sudo dnf install swig

 

その他インストールに必用な開発パッケージ

sudo dnf -y install gcc gcc-c++ kernel-devel

sudo dnf install python3-devel

  

 

TensorFlowのインストール

tensorflowーGoogleの開発した機械学習ライブラリで今回インストールするのは、これを利用したOpenPoseですので、まずこれが無いと使えません。

sudo pip3 install tensorflow

僕の環境だとこれでバージョン1.4がインストールされたようですが、こちらの記事によりますと、

CentOS 8 TensorFlowをインストールする方法 | mebee

バージョン1.6以降はAVX命令に対応したCPUでないと使えないそうです。(なにそれ?)解りませんが、バージョンを指定したインストール方法はこう記述するというメモ。

sudo pip3 install tensorflow==1.5

 

バージョン確認

python3 -c 'import tensorflow as tf; print(tf.__version__)'

 

 

 

tf-pose-estimationインストール

いろいろと環境を整えた上でやっと本丸のインストール作業になります。

 

 <参考>

MacでOpenPose(tf-pose-estimation)のHelloWorldをしました - Qiita

 

gitからコードを拝借します。 

sudo git clone https://www.github.com/ildoonet/tf-pose-estimation

 

ディレクトリに移動して

cd tf-pose-estimation/

必用なもののインストールがtxtファイルに纏めてあるのでお任せします。

sudo pip3 install -r requirements.txt

 

ディレクトリ移動 

cd tf_pose/pafprocess

 

ビルド実行

sudo swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace 


ここでエラー

running build_ext
building '_pafprocess' extension
swigging pafprocess.i to pafprocess_wrap.cpp
swig -python -c++ -o pafprocess_wrap.cpp pafprocess.i
Unable to open file pafprocess_wrap.cpp: Permission denied
error: command 'swig' failed with exit status 1

色々弄ったけど、結局なにやら権限がどうのってなってるっぽいので、・・・僕はこういうの面倒くさいので全権限スルーにしちゃいました(おいおい。。)

cd ../

sudo chmod 777 */*

cd pafprocess

 

で、上のコードを実行したら通りました。

 

上層ディレクトリを変更

cd ../..

cd models/graph/cmu

 

シェルコードファイル実行

sudo bash download.sh

ここでしばらく時間がかかります。

 

上層ディレクトリへ移動

cd ../../..

 

サンプル画像をダウンロード(フリー素材ぱくたそから拝借しています。)

sudo wget https://www.pakutaso.com/shared/img/thumb/332TSURUTAMA20211_TP_V.jpg

 

tf_poseがインポートできるかチェック

sudo python

>>import tf_pose

>>exit()

 

 

<参考>

GPU無しで画像のみから人間のボーン推定が出来るtf-openposeを導入する - Qiita

こちらを参考に

sudo nano run.py

で実行ファイルの中身のオプションを参考にして引数を設定(バージョンによって違うみたい)僕の環境では実行コードはこのようになりました。

sudo python3 run.py --image=./332TSURUTAMA20211_TP_V.jpg

 

tensorflowを使うにはマシンスペックが低過ぎるみたいで(最低限のVPS構成ですからメモリーも512MBしかありません)、

W tensorflow/core/framework/allocator.cc:107] Allocation of 2359296 exceeds 10% of system memory.

このような警告表示がズラーっとされてめっちゃ時間がかかりますが、きちんと処理自体はされています。

 

 

しかし、当然ながら作成された画像は画面が無いので見れません。

 

ということでrun.pyの中身を少し変更します。といっても単純にOpenCVを使ってファイルを別に保存するだけです。

 

ひとまず、一通り処理をして画像表示しているコードの後ろに画像保存コードを追記します。

plt.imshow(tmp2_even, cmap=plt.cm.gray, alpha=0.5)
plt.colorbar()
plt.show()
cv2.imwrite('./OUTPUT.jpg',image) <ー追加
print('SUCCESS!') <ー追加

ターミナルで「SUCCESS!」と表示されていれば無事に出力出来たということですね。

 

 

画像の確認は予めサーバーソフトで画像をブラウザ経由で表示できるようにしています。

 

 

 

実行結果

f:id:DreamerDream:20200731202314p:plain

 

え?

ちょ、なんか思ってたんと違うくない??。。。

 

 

 

たぶんモデルが・・・、服装に見えにくいからですよね?きっと。

 

 

 

 

気を取り直して他の画像をダウンロードし直します。

sudo wget https://www.pakutaso.com/shared/img/thumb/AL002-iroppoinyuushitu20140722_TP_V4.jpg

 

 

実行!

 

はいいっ!!!

f:id:DreamerDream:20200731203130p:plain

・・・・・。

 

 

 

なにこれ?

 

 

 

 

 

<続↓>

dreamerdream.hateblo.jp

 

kampa.me