KIHARA BLOG:社内ラズコンでめざせ優勝!

Raspberry Pi(ラズパイ)で機械学習とか音声認識とか姿勢推定とかしながら組み込みシステムを構築して、社内ラズコンで優勝をめざすブログです。勉強中:Raspberry Pi、Linux、Python、Coral EdgeTPU、PoseNet、Julius

ラズパイ6日目①:Raspberry Pi + Google Edge TPU で姿勢推定する

Coralで公開されている「PoseNet」を使って、写真や動画から姿勢を検出してみます。
Kinectだと「骨格検出」、PoseNetだと「姿勢推定」という言葉で説明されていますが、意味は同じもよう。PoseNet公式に則って「姿勢推定(Pose estimation )」と呼ぶことにします。

github.com

PoseNetとは

Coral(GoogleのローカルAIプラットフォームブランド)が開発した機械学習モデルです。ライブラリとしてGoogle機械学習ライブラリ「TensorFlow」を利用しています。
Apache License 2.0で公開されているため、商用利用もできます。
PoseNetには、Webブラウザ上で姿勢推定できるJavaScript版(TensorFlow.jp)、Edge TPU上で姿勢推定できるPython版の2種類があります。今回私が使うのはPython版PoseNetです。

f:id:KIHARA0223:20200112120929p:plain
PoseNetでは、鼻、右耳、左膝、右足など17種類のKeypointが検出されます。それぞれのKeyPointには、座標位置と信頼スコアの情報がセットされています。
Keypointの情報を活用して、人間がどんな動きをしているか認識するプログラムを作って意向を思います。

PoseNetをインストールする

Terminalからgit cloneコマンドでダウンロードした後、インストール用shellを実行します。

$ git clone https://github.com/google-coral/project-posenet.git

$ cd /home/pi/project-posenet-master

$ sh install_requirements.sh

サンプルを動かしてみる

project-posenet-masterフォルダ内のサンプルプログラムを実行します。

$ python3 simple_pose.py
Traceback (most recent call last):
  File "simple_pose.py", line 18, in <module>
    from pose_engine import PoseEngine
  File "/home/pi/project-posenet-master/pose_engine.py", line 20, in <module>
    from edgetpu import __version__ as edgetpu_version
ModuleNotFoundError: No module named 'edgetpu'

怒られた。'edgetpu'モジュールが無いと言われました。

edgetpu python APIをインストールする

$ sudo apt-get update

$ sudo apt-get install python3-edgetpu

もう一度サンプルを動かしてみる

APIインストール後に再実行。今度は正常に動きました。

$ python3 simple_pose.py
--2020-01-04 21:18:08--  https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Hindu_marriage_ceremony_offering.jpg/640px-Hindu_marriage_ceremony_offering.jpg
upload.wikimedia.org (upload.wikimedia.org) をDNSに問いあわせています... 103.102.166.240, 2001:df2:e500:ed1a::2:b
upload.wikimedia.org (upload.wikimedia.org)|103.102.166.240|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 83328 (81K) [image/jpeg]
`couple.jpg' に保存中

couple.jpg          100%[===================>]  81.38K   349KB/s 時間 0.2s     

2020-01-04 21:18:09 (349 KB/s) - `couple.jpg' へ保存完了 [83328/83328]

Inference time: 123ms

Pose Score:  0.61855656
 nose                 x=210  y=152  score=1.0
 left eye             x=224  y=138  score=1.0
 right eye            x=199  y=137  score=1.0
 left ear             x=244  y=135  score=1.0
 right ear            x=182  y=129  score=0.8
 left shoulder        x=268  y=168  score=0.8
 right shoulder       x=160  y=173  score=1.0
 left elbow           x=282  y=255  score=0.6
 right elbow          x=154  y=256  score=0.9
 left wrist           x=236  y=333  score=0.8
 right wrist          x=162  y=299  score=0.6
 left hip             x=324  y=179  score=0.2
 right hip            x=203  y=233  score=0.0
 left knee            x=344  y=86   score=0.8
 right knee           x=170  y=294  score=0.0
 left ankle           x=316  y=175  score=0.1
 right ankle          x=166  y=307  score=0.0

Pose Score:  0.5867945
 nose                 x=398  y=145  score=1.0
 left eye             x=416  y=128  score=1.0
 right eye            x=382  y=127  score=1.0
 left ear             x=457  y=110  score=0.9
 right ear            x=370  y=120  score=0.2
 left shoulder        x=491  y=169  score=0.9
 right shoulder       x=362  y=151  score=0.8
 left elbow           x=465  y=290  score=0.9
 right elbow          x=328  y=246  score=0.8
 left wrist           x=340  y=303  score=0.9
 right wrist          x=233  y=331  score=0.5
 left hip             x=525  y=106  score=0.0
 right hip            x=361  y=161  score=0.3
 left knee            x=501  y=90   score=0.6
 right knee           x=350  y=167  score=0.1
 left ankle           x=504  y=178  score=0.0
 right ankle          x=306  y=176  score=0.1

このサンプルプログラムでは、Wikimediaから以下の画像を読み込んで姿勢推定し、各Keypointの情報を出力しています。
女性と男性の2人分が出力されていることがわかります。

次回はKeypointの情報を使ってポーズ認識やジェスチャー認識に挑戦します。