映像や画像から機械学習を用いて骨格を検出するプロジェクトの一つ「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には少しだけ馴染みがあります。
tf-openposeは、tf-pose-estimationやtf-pose等とも呼ばれており、開発中のプロジェクトということもありネットでの情報も錯綜しています。
僕も導入には結構手間取りましたので個人的な備忘録として今回は残しておきます。
環境はConohaのVPSの一番安いプラン、CentOS8.2です。
<過去記事>
事前に必用なライブラリ類インストール
結構いろいろなライブラリが登場します。
サーバーに組み込んでしまうとアップデートの度に不安定になるかもしれない、という不安が頭をよぎります。
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!」と表示されていれば無事に出力出来たということですね。
画像の確認は予めサーバーソフトで画像をブラウザ経由で表示できるようにしています。
実行結果
↓
↓
↓
↓
↓
↓
↓
↓
え?
ちょ、なんか思ってたんと違うくない??。。。
たぶんモデルが・・・、服装に見えにくいからですよね?きっと。
気を取り直して他の画像をダウンロードし直します。
sudo wget https://www.pakutaso.com/shared/img/thumb/AL002-iroppoinyuushitu20140722_TP_V4.jpg
実行!
↓
↓
↓
↓
↓
↓
↓
↓
はいいっ!!!
・・・・・。
なにこれ?
<続↓>