Help us understand the problem. What is going on with this article?

Tello-Pythonのサンプル「Tello_Video_With_Pose_Recognition」を動かす

はじめに

このページは,

公式SDK「Tello-Python」を試そう

の1ページです.
全体を見たい場合は上記ページへお戻りください.

概要

DJI公式のTello用Pythonサンプルプログラム「Tello-Python」のうち,

 Tello_Video_With_Pose_Recognition

を試す方法を記述します.

「Tello_Video」に対してPose_Recognitionという名前が付いている通り,GUIはほぼTello_Videoと同じです.
異なるのは,Telloのカメラに写った人物の手足のポーズを機械学習で認識します.そのポーズに応じて着陸や前後移動を行います.

DJI製品で言うところの「ジェスチャー コントロール」みたいなプログラムですね.

マシンパワーが無い非力なPCではハングアップするので気をつけてください.
Raspberry Piでは無理です...
かなりハイエンドでメモリが潤沢なPCでないと快適動作はしない様です.

前提条件

ホームフォルダにTello-Pythonがインストールされているという前提で話を進めます.

Linuxマシンであれば /home/(ユーザー名)/ に,Tello-Pythonというフォルダがあることになります.

詳しくは Tello-Pythonのダウンロード を御覧ください.

ディレクトリの移動

まずはコンソール(端末)を開き,以下のコマンドを打って,フォルダを移動します.

cd(change_directory)
$ cd Tello-Python

lsコマンドでフォルダの中にあるファイルを見てみると,

Linux:lsの結果
$ ls
LICENSE.md               Tello_Video
README.md                Tello_Video_With_Pose_Recognition
Single_Tello_Test        doc
TelloPython_FAQ(CH).txt  tello_state.py
TelloPython_FAQ.txt      tello_video_dll(ForWin64).zip

Tello_Video_With_Pose_Recognition というディレクトリがあることがわかります.
更にディレクトリ移動しましょう.

Tello_Videoへ移動
$ cd Tello_Video_With_Pose_Recognition

lsコマンドでTello_Video_With_Pose_Recognitionの中を見てみると,

Tello_Video_With_Pose_Recognitionの中身
$ ls
LICENSE.md  h264decoder  install  model     tello_control_ui.py
README.md   img          main.py  tello.py  tello_pose.py

「Tello_Video」とほぼ同じファイル構成になっていますが,2箇所異なるのはtello_pose.pyというファイル,model というディレクトリがある点です.

このpyファイルとディレクトリは,カメラ映像に写った人物のポーズを計算する機械学習に使用します.
pyファイルでOpenCVの機械学習ライブラリを使用した画像処理が書かれています.
modelディレクトリには学習済みモデルを格納します.
Tello-Pythonをダウンロードしただけでは学習済みモデルファイルはありませんので,次項でダウンロード作業を行います.

また,今回もinstallh264decoderというディレクトリがありますが,「Tello_Video」で必要な環境構築は終わっています.
したがって「Tello_Video」でビルドしたlibh264decoder.soをコピーしてくるだけで済みます.

全体の構成は下図の様になっています.
tello_pose_system.png

Tello_Video_With_Pose_Recognitionの準備

プログラムを動かすために,以下の2つの作業が必要です.

  • Tello_Videoからlibh264decoder.soをコピー
  • ポーズ認識用の学習済みファイルのダウンロード

libh264decoder.soをコピー

Tello_Video_With_Pose_Recognitionにもinstall/Linux/linux_install.shはありますが,libh264decoder.soは既に「Tello_Video」でビルドしましたから,再度ビルドする必要はありません.コピーしてきましょう.

Tello_Videoからlibh264decoder.soをコピー
$ cp ../Tello_Video/libh264decoder.so ./

機械学習ファイルのダウンロード

modelディレクトリに入り,lsでファイルを確認すると,

modelディレクトリの中
$ cd model
$ ls 
getModels.bat  getModels.sh  pose

getModels.shというファイルがあることが分かります.
これに実行権限を与えて,実行することで,必要な学習済みモデルをダウンロードするることができます.

getModels.shに実行権限を与えて,実行する
$ chmod +x getModels.sh
$ ./getModels.sh
--2019-09-25 16:01:27--  http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/mpi/pose_iter_160000.caffemodel
posefs1.perception.cs.cmu.edu (posefs1.perception.cs.cmu.edu) をDNSに問いあわせています... 128.2.176.37
posefs1.perception.cs.cmu.edu (posefs1.perception.cs.cmu.edu)|128.2.176.37|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 205950363 (196M) [text/plain]
`pose/mpi/pose_iter_160000.caffemodel' に保存中

pose_iter_160000.caffemodel     8%[==>              ]  16.14M   456KB/s    残り7m 26s

学習済みモデルのファイルpose_iter_160000.caffemodelは200MBあるので時間がかかります.ゆっくり待つと良いでしょう.ダウンロード途中でPCがサスペンドしないよう気をつけましょう.

ダウンロードしているのはファイル名が示す通り,機械学習ライブラリ「Caffe」のファイルです.

main.pyの実行

それでは,Telloの電源を入れて,WiFi接続を確認したら,
main.pyを実行してみましょう.

Tello_Videoの実行
$ python main.py

実行結果

Telloとうまく接続できていれば,下の写真のような画面が表示されます.
tello_pose_main.png
「Tello_Video」の時のウィンドウに似ていますが,Pose Recognition Status: Offというボタンが増えているのが分かります.
このボタンが,機械学習で人物のポーズ認識をする機能のON/OFFスイッチになっています.

それ以外の使い方は「Tello_Video」と同じです.

ポーズ認識機能を使う

離陸は手動で行います.「Command Panel」をオープンして「Takeoff」ボタンを押してください.

Pose Recognition Status: Off」のボタンを押し,ボタンのテキストが
Pose Recognition Status: On」となれば,動作中です.

ポーズ認識が機能すると,下図の様に人物に合わせて骨格モデルが表示されます.
pose_recog.png

認識したポーズが,プログラム中の条件と一致すると,Telloが動作するようになっています.

有効なポーズは3パターンあります.

  • 腕を下ろしたポーズ「ダウン45度」 - 後進
  • 腕を水平に広げたポーズ「フラット」 - 前進
  • 肘を曲げたポーズ「V」 - 着陸 

tello_pose.pyの中に記述されたものを以下に示します.

ダウン45度
腕をホールド
こんな風:
        | 
      / | \
       / \
フラット
腕を水平に
こんな風:
      _ _|_ _
         |
        / \
肩と肘を正しい角度に
こんな風:
        |
      \/|\/
       / \

という事は,全身が映る距離でなければならないので,少し離れる必要がありますね.

おわりに

今回は「Tello_Video_With_Pose_Recognition」の使用法を解説しました.

機械学習の部分以外はTello_Videoと同じなので,特筆すべき事はありません.
tello_pose.pyの中身を読み解けば,他のポーズを追加することもできそうですが,
筆者のPCでは重すぎて全然試せません...

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away