#はじめに
このページは,
の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 Tello-Python
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 というディレクトリがあることがわかります.
更にディレクトリ移動しましょう.
$ cd Tello_Video_With_Pose_Recognition
lsコマンドで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をダウンロードしただけでは学習済みモデルファイルはありませんので,次項でダウンロード作業を行います.
また,今回も**installとh264decoder**というディレクトリがありますが,「Tello_Video」で必要な環境構築は終わっています.
したがって「Tello_Video」でビルドしたlibh264decoder.soをコピーしてくるだけで済みます.
#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」でビルドしましたから,再度ビルドする必要はありません.コピーしてきましょう.
$ cp ../Tello_Video/libh264decoder.so ./
##機械学習ファイルのダウンロード
model
ディレクトリに入り,lsでファイルを確認すると,
$ cd model
$ ls
getModels.bat getModels.sh pose
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を実行してみましょう.
$ python main.py
#実行結果
Telloとうまく接続できていれば,下の写真のような画面が表示されます.
「Tello_Video」の時のウィンドウに似ていますが,Pose Recognition Status: Offというボタンが増えているのが分かります.
このボタンが,機械学習で人物のポーズ認識をする機能のON/OFFスイッチになっています.
それ以外の使い方は「Tello_Video」と同じです.
#ポーズ認識機能を使う
離陸は手動で行います.「Command Panel」をオープンして「Takeoff」ボタンを押してください.
「Pose Recognition Status: Off」のボタンを押し,ボタンのテキストが
「Pose Recognition Status: On」となれば,動作中です.
ポーズ認識が機能すると,下図の様に人物に合わせて骨格モデルが表示されます.
認識したポーズが,プログラム中の条件と一致すると,Telloが動作するようになっています.
有効なポーズは3パターンあります.
- 腕を下ろしたポーズ「ダウン45度」 - 後進
- 腕を水平に広げたポーズ「フラット」 - 前進
- 肘を曲げたポーズ「V」 - 着陸
tello_pose.py
の中に記述されたものを以下に示します.
腕をホールド
こんな風:
|
/ | \
/ \
腕を水平に
こんな風:
_ _|_ _
|
/ \
肩と肘を正しい角度に
こんな風:
|
\/|\/
/ \
という事は,全身が映る距離でなければならないので,少し離れる必要がありますね.
#おわりに
今回は「Tello_Video_With_Pose_Recognition」の使用法を解説しました.
機械学習の部分以外はTello_Videoと同じなので,特筆すべき事はありません.
tello_pose.py
の中身を読み解けば,他のポーズを追加することもできそうですが,
筆者のPCでは重すぎて全然試せません...