ラズパイ6日目①:Raspberry Pi + Google Edge TPU で姿勢推定する
Coralで公開されている「PoseNet」を使って、写真や動画から姿勢を検出してみます。
Kinectだと「骨格検出」、PoseNetだと「姿勢推定」という言葉で説明されていますが、意味は同じもよう。PoseNet公式に則って「姿勢推定(Pose estimation )」と呼ぶことにします。
- Raspberry Pi 3 Model B+
- カメラ:Raspberry Pi Camera B01 (Rev1.3)
- Edge TPU:Google Coral Edge TPU Accelerator vertion 1.0
- 機械学習モデル:Google Coral PoseNet
PoseNetとは
Coral(GoogleのローカルAIプラットフォームブランド)が開発した機械学習モデルです。ライブラリとしてGoogleの機械学習ライブラリ「TensorFlow」を利用しています。
Apache License 2.0で公開されているため、商用利用もできます。
PoseNetには、Webブラウザ上で姿勢推定できるJavaScript版(TensorFlow.jp)、Edge TPU上で姿勢推定できるPython版の2種類があります。今回私が使うのはPython版PoseNetです。
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の情報を使ってポーズ認識やジェスチャー認識に挑戦します。