Mac OSXで「Tello_Video」の環境構築

#はじめに
このページは，

[Tello-Pythonのサンプル「Tello_Video」を動かす](https://qiita.com/hsgucci/items/c9082690c6d0695b722f)

の補足ページです．

※注意
**<font color=red>筆者のMacは古い（High Sierra）ので，試したのはXcode 10です．</font>**
新しいMacでは別の問題が生じるかもしれません．．．


#概要
DJI公式のTello用Pythonサンプルプログラム「Tello-Python」のうち，
　[Tello_Video](https://github.com/dji-sdk/Tello-Python/tree/master/Tello_Video)
を試すためには、あらかじめ

- 様々な依存ライブラリのインストール
- H.264ビデオのデコードライブラリのビルド

を行う必要があります。

gitの [Tello-Pythonのページ](https://github.com/dji-sdk/Tello-Python/tree/master/Tello_Video#installation) には，インストール方法として

```bash
・Mac

 i. Make sure you have the latest Xcode command line tools installed. If not, you might need to update your OS X and XCode to the latest version in order to compile the h264 decoder module
ii. Go to the "install\Mac" folder folder in command line, run

   chmod a+x ./mac_install.sh
   ./mac_install.sh

If you see no errors during installation, you are good to go!
```
と書いてあります．
すなわち，Macの開発環境であるXcodeのコマンドラインツールをインストールした後で，

```bash:フォルダ移動・ファイルの属性変更・シェルファイル実行
$ cd install/Mac/
$ chmod a+x ./mac_install.sh
$ ./mac_install.sh
```
とコマンドを打てよ，ということです．
**<font color=blue>mac_install.sh</font>**が，Mac用の環境構築を自動的に行ってくれるシェルスクリプトです．

Macに精通した方は「なんだ，shファイルがあるなら実行すればスグじゃん」と思うでしょう．
しかし，そのまま実行すると

- matplotlibのインストール時にnoseとtornadoが無いと言われる．
- OpenCVのバージョンが3.x系がインストールされない．（4.x系になる）
- h264デコードライブラリのビルド前に，cmakeが通らない

という不具合が生じます．

というわけで，mac_install.shを書き換えます．


#参考にしたページ

・[Command Line Toolsのインストール方法](https://qiita.com/mym/items/8bc079b7d0f5f55c49dc)　　筆者はこちらでXcode10用を探してインストールした
・[MavericksでCommand Line Tools for Xcodeをインストールする](https://qiita.com/3yatsu/items/47470091277d46f3fde2)　　既にGUI版のXcodeがインストールされている人向け
・[Python:[pip install requests]実行時の[matplotlib 1.3.1 requires nose, which is not installed.]の対処方法](https://qiita.com/Atsushi_/items/f10a6790972528682d25)
・[Tello_Video & Tello_Video_With_Pose_Recognition #41 #42](https://github.com/dji-sdk/Tello-Python/issues/42)

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

#ディレクトリの移動
まずはコンソール(端末)を開き，以下のコマンドを打って，Tello-Videoのフォルダへ移動します．

```bash:cd(change_directory)
$ cd ~/Tello-Python/Tello-Video
```
lsコマンドでTello_Videoディレクトリの中を見てみると，

```bash:Tello_Videoの中身
$ ls
LICENSE.md  README.md  h264decoder  img  install  main.py  tello.py  tello_control_ui.py
```
`install`というディレクトリがあることが分かります．
このディレクトリの中身は，

```bash:installディレクトリの中
$ ls install/
Linux  Mac  Windows
```
この様になっていて，Linux，Mac，Windowsそれぞれのディレクトリにインストール用のファイルが置いてあるのですが，**<font color=red>どれも古くて使い物になりません</font>**．

ですが，Macは多少の変更で対応できます．

#Mac_install.shの書き換え
Macの場合，mac_install.shの中身を少し書き換えれば，自動インストールできます．

**※加えた変更**
easy_installでnoseとtornadoをインストールするように追記しました．
OpenCVのバージョンははSHIFTの使える3.4.2.17にしました．
cmakeでboost_pythonが無いというトラブルは，issueの通りに書き換えました．
　

テキストエディタ(テキストエディット,miなど)を使って以下の様に **mac_install.sh** を書き換えてください．


```mac_install.sh
#!/bin/sh



echo 'Compiling and Installing the Tello Video Stream module'

echo 'You might need to enter your password'

# go to /sample_code folder
cd ..
cd ..

# install Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew update



# install pip

#sudo easy_install pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py

# install cmake

brew install cmake



# install dependencies

brew install boost

brew install boost-python

brew install ffmpeg

brew install tcl-tk

# added by hsgucci
sudo easy_install nose

# added by hsgucci
sudo easy_install tornado

sudo pip install numpy --ignore-installed

sudo pip install matplotlib --ignore-installed

sudo pip install pillow --ignore-installed

sudo pip install opencv-python==3.4.2.17 --ignore-installed



# pull and build h264 decoder library

cd h264decoder


mkdir build

cd build

# comment out by hsgucci
#cmake ..

# added by hsgucci
cmake -D Boost_NO_BOOST_CMAKE:BOOL=ON ..

make



# copy source .so file to tello.py directory

cp libh264decoder.so ../../



echo 'Compilation and Installation Done!'
```

#mac_install.shの実行
書き換えたら，シェルファイルのあるフォルダへ移動して，
chmodで実行権限を与え，実行します．

```bash:フォルダ移動・ファイルの属性変更・シェルファイル実行
$ cd ~/Tello-Python/Tello_Video/install/Mac/
$ chmod a+x mac_install.sh
$ ./mac_install.sh
```
以上で自動インストールされます．

インストールが完了したら，Tello-Videoのディレクトリに戻っておきましょう．

```bash:２つ上の階層へもどる
$ cd ../../
```
**<font color=blue>これで作業は完了です．</font>**

#注意点
mac_install.shでのインストールで注意すべき点は，
**<font color=red>必ず`~/Tello-Python/Tello_Video/install/Mac/`へカレントディレクトリを移動させ，
そこで`mac_install.sh`を実行すること</font>**　です．

というのは，

```bash:mac_install.shの一部を抜粋
cd ..    # １つ上のディレクトリへ移動
cd ..    # １つ上のディレクトリへ移動
# Homebrew のインストール
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update

(略)

# pull and build h264 decoder library
cd h264decoder    # h264decoderというフォルダへ入る
mkdir build
cd build          # buildというフォルダへ入る
cmake ..
make

# copy source .so file to tello.py directory
cp libh264decoder.so ../../      # ２階層上のフォルダへファイルをコピー
```
この様に，フォルダを２階層上がってaptやpipのインストールを行い，
h264decoderフォルダへ移動してライブラリのビルド＆コピーを行っているからです．

もしも，Tello_Videoフォルダから以下の様に

```bash:このように直接ファイルを呼んではいけない
$ ./install/Mac/mac_install.sh
```
相対パス指定してシェルを実行するとどうなるでしょうか．
`~/Tello-Python/Tello_Video/`の２階層上，すなわちホームディレクトリ`~/`まで上がって`h264decoder`へ入ろうとしてしまいます．当然そんなフォルダはありませんから，ビルドできるわけがありません．

#おわりに
やっとLinux, Raspberry Pi，Windows，Macが全部終わった〜（喜
でも時代はPython3．．．