【Python】OpenPoseを使ってみた

#はじめに
本記事は、私が経験した画像系のハッカソンで行なった時にOpenposeを使うって議論になりながら使わなかったので、勉強したくなって勉強しました。
また今まで記事を投稿した[OpenCVを用いてネコ検出器を作る](https://qiita.com/konan/items/56bebf97b6eaa59665b2)で顔認識を行い、[YOLOv3を使ってみた](https://qiita.com/konan/items/f29ac144f960d0f6a8ec)で全身認証やラベリングを勉強しました。今回は骨格検知を勉強したので記録として残そうと思います。ぜひ上記であげた記事もよければご覧になってください！(20201221-5)

参考にした記事はこちらです。[【TensorFlow版】MacBookで行うOpenPose （osx Mojave対応）](https://qiita.com/mml/items/8c24a5acc5f2d71b1df4)

#Openposeとは
OpenPoseは人物の骨格などを、モーションキャプチャなしで簡単に表示できるツールです。
macbookユーザは内蔵カメラがあるので、リアルタイム動画描写もできます。今回は画像に骨格検知を行なってみることを試してみようと思います。

実行するとこのような画像が出来上がります。
![openpose.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328847/599a9082-afbc-22ff-71bb-1c89f204fefe.png)

このように骨格を繋げた棒人間のようなものを画像に埋め込んで出力できるというものになっています。これは動画でもできるので、今度時間があったら試してみたいと思います。

#導入とインストール
##環境構築
まず、仮想環境を作る際に使うanacondaをインストールしてください。anacondaはpythonを使う時にとても便利なのでanacondaは調べてインストールしていない方はインストールしてください。
※今回はanacondaはインストールできているとして進めます。
以下のようにpython3.6でposeという仮想環境を作ります。次をコピペしてコマンドに打ち込んでください。

```
$ conda create -n pose python=3.6 anaconda
```

次に作った仮想環境に入りましょう。

```
$ source activate pose
```
仮想環境に入ると以下のようにコマンドが変更すると思います。

```
(pose) $
```
このような状態になったら作業したいディレクトリに`cd`を使って移動してください。

続いてgithubからcloneして今回用いるリポジトリをローカルに落とします。

```
(pose) $ git clone https://github.com/ildoonet/tf-pose-estimation
```

`cd tf-pose-estimation`でgithubでクローンしたファイルに入ります。

##必要なモジュールのインストール
続いて必要なモジュールのインストールを行います。

```
(pose) $ pip install -r requirements.txt
(pose) $ pip install matplotlib
(pose) $ brew install swig
(pose) $ pip install numpy cython tensorflow==1.15.0 opencv-python
```

*tensorflowの1.15.0をインストールしましょう！！(2.0.0以降はtensorflow.contribが無くなっているので、古いのを使わないとエラーが吐きました)
*opencv-pythonも入れる

ここまでで環境導入及びインストールができました。

##cmuで必要なファイルをダウンロード
`cd models/graph/cmu`でcmuという階層に移動してください

```
(pose) $ bash download.sh
```
上記コマンドで必要なファイルをインストールします。
加えて`~/tf-pose-estimation/tf_pose/pafprocess/`へチェンジディレクトリします。

```
(pose) $ swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace
```

```
(pose) $ sudo python setup.py build_ext --inplace
```

こちらでsetupまでが終わりました。私はエラーがでなかったですが、エラーがでる方がいるそうです。エラーがでた方の対処方法は[参考記事](https://qiita.com/mdo4nt6n/items/d9523aff14dd9fb70c37)に詳しく載っていましたので割愛します。それでは実行してみましょう！！

#実行
実行を行なっていきましょう！

実行するにあたりディレクトリを移動します。

```
(pose) $ cd tf-pose-estimation/src
```

実行してみましょう！

##静止画の実行を行います

```
$ python run.py --model=mobilenet_thin --resize=432x368 --image=images/p1.jpg
```
サンプルとしてp1.jpgという画像が含まれていました。p1.jpgはこちらになります
![p1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328847/42332c00-7af0-99ca-a6ef-bbc697dd2ea8.jpeg)

そちらを今回実行してみました。実行した結果は以下の下の図のようになりました。
![スクリーンショット 2020-12-20 15.49.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328847/f459c5f3-e4bc-1fff-dccc-1000017e8897.png)

このようにカラー画像に骨格を埋め込んだ画像だったりグラースケールにした画像だったりなど4種類を一緒に出力してくれるようです。

とても面白いですね！

骨格検知を行なってみましたがその応用で歩容認証というものがあると知りました。歩容認証は人の「歩き方」をみて区別するというものだそうです。歩き方は人によって全然違うとのことでその特徴を掴む認証方法もぞんざいするらしいです。今度は歩容認証をみてみたいなと思います！

これで私が参加したハッカソンで議題にでてきたモデルを実装できてハッカソンの経験をより吸収することができてとても嬉しく思います。


ここまで読んでいただきありがとうございました！フォロー・LGTMよろしくお願いいたします！
また私はまだまだ勉強している身ですので何か質問・アドバイス・ご指摘等ありました気軽にお願いします！

=============================================
~過去投稿した記事一覧~
【画像系】
[Google Colabratoryでネコ検出器を作る（前編）【Python】〜スクレイピングについて〜](https://qiita.com/konan/items/320dd0ecfe03246b4f5d)
[Google Colabratoryでネコ検出器を作る（後編）【Python】〜OpenCVを使う〜](https://qiita.com/konan/items/56bebf97b6eaa59665b2)
[【Python】YOLOv3を使ってみた](https://qiita.com/konan/items/f29ac144f960d0f6a8ec)

【自然言語処理】
[自然言語処理を用いたデータの分類](https://qiita.com/konan/items/17ccc1c86f76ba925147)

===============================================

参考
[【TensorFlow版】MacBookで行うOpenPose （osx Mojave対応）](https://qiita.com/mdo4nt6n/items/d9523aff14dd9fb70c37)
[MacへのOpenPoseのインストールと実行](https://qiita.com/mml/items/8c24a5acc5f2d71b1df4)