(2020年3月6日追記)
メモリ4GBのRaspberry Pi 4,Raspbian Busterで試しました.
ラズパイ3, Stretchの時よりもスムーズに動いています.
#はじめに
このページは,
Tello-Pythonのサンプル「Tello_Video」を動かす
の補足ページです.
#概要
DJI公式のTello用Pythonサンプルプログラム「Tello-Python」のうち,
Tello_Video
を試すためには、あらかじめ
- 様々な依存ライブラリのインストール
- H.264ビデオのデコードライブラリのビルド
を行う必要があります。
gitのTello-Pythonのページには,インストール方法として
・Linux (Ubuntu 14.04 and above)
Go to the "install\Linux" folder in command line, run
chmod +x linux_install.sh
./linux_install.sh
と書いてあります.
すなわち,
$ cd install/Linux/
$ chmod +x linux_install.sh
$ ./linux_install.sh
とコマンドを打てよ,ということです.
linux_install.shが,Linux用の環境構築を自動的に行ってくれるシェルスクリプトです.
Linuxに精通した方は「なんだ,shファイルがあるなら実行すればスグじゃん」と思うでしょう.
しかし,Raspberry Piでは手順どおり実行してもうまく行きません.
原因は以下の2点です.
- cmakeのインストールはデフォルトのpipではダメ.aptでインストールすべき
- OpenCVのインストールがIntel系Ubuntuの様に簡単ではない
cmakeの方は,linux_install.sh
の書き換えで対応できますが,OpenCVが厄介です.今回は少々手抜きの方法で行います.
#前提条件
ホームフォルダ(~)にTello-Pythonがインストールされているという前提で話を進めます.
#ディレクトリの移動
まずはコンソール(端末)を開き,以下のコマンドを打って,Tello-Videoのフォルダへ移動します.
$ cd ~/Tello-Python/Tello-Video
lsコマンドでTello_Videoの中を見てみると,
$ ls
LICENSE.md README.md h264decoder img install main.py tello.py tello_control_ui.py
install
というディレクトリがあることが分かります.
このディレクトリの中身は,
$ ls install/
Linux Mac Windows
この様になっていて,Linux,Mac,Windowsそれぞれのディレクトリにインストール用のファイルが置いてあるのですが,どれも古くて使い物になりません.
Raspberry Piの場合,OpenCVのインストールがaptやpipで簡単にいかないのが問題です.
#Raspbianの更新
まずは,Linuxを最新の状態へ更新しておきましょう.
$ sudo apt update
$ sudo apt upgrade -y
#最初にOpenCVの導入
Raspberry PiのOpenCVインストールは,ソースをダウンロードして自分でビルドする2時間コースが主流です(泣).
しかし,以下の参考ページでmt08さんがビルド&公開してくれているdebianパッケージを使ってインストールすると,非常に簡単・短時間なのでオススメです.
- Stretchの場合 ラズパイ3にOpenCV3/4を簡単に導入
- Busterの場合 ラズパイ: Buster向け OpenCV4
(もちろん「ビルド済みはトロイの木馬とか仕込まれていそうでなんか怖い」という玄人の方は,自分でビルドしてインストールしてください)
##Raspbian Stretchの場合
まずは上記ページの冒頭に書かれている一連のコマンドをコピーし,テキストエディタにペーストしてシェルファイルを作ります.ファイル名は何でも良いのですが,ここではcv_install.sh
とでもしておきましょう.
以下に,抜粋したコマンドを書いておきますが,更新があるかもしれないので本家からコピペすることを推奨します.
OPENCV_DEB=libopencv3_3.4.6-20190415.1_armhf.deb
curl -SL https://github.com/mt08xx/files/raw/master/opencv-rpi/${OPENCV_DEB} -o ${OPENCV_DEB}
sudo apt autoremove -y libopencv{3,4}
sudo apt install -y ./${OPENCV_DEB}
#
sudo ldconfig
python2 -c 'import cv2; print(cv2.__version__)'
python3 -c 'import cv2; print(cv2.__version__)'
ホームディレクトリにcv_install.sh
を保存し,
実行権限を与えてから,実行します.
$ chmod +x cv_install.sh
$ ./cv_install.sh
ホームディレクトリにはlibopencv3_3.4.6-20190415.1_armhf.deb
というファイルがダウンロードされますが,インストール後は削除してしまってもかまいません.
cv_install.sh
の最後に書かれている様に,
python2 -c 'import cv2; print(cv2.__version__)'
python3 -c 'import cv2; print(cv2.__version__)'
Pythonでimportして,きちんと動くかどうか試してくれます.
OpenCVバージョン3.4.6
が2回表示されたら成功です.
ここでエラーが出たら何か環境に問題があるという事になります.
##Raspbian Busterの場合
上記ページは,BusterでのOpenCV3のインストールのヒントに使いました.
Stretchの時のようにコピー&ペーストできるシェルのソースが無いので,自分で作ります.
Buster用の最新のdebパッケージファイルは
https://github.com/mt08xx/files/tree/master/opencv-rpi/raspbian-buster
ここにあります.
ラズパイ2,3,4用のパッケージにはファイル名にarmv7l
が含まれています.
2020年3月現在ではlibopencv3_3.4.9-20191223.1_armv7l.deb
が最新でした.
下記のコマンドをコピーし,テキストエディタにペーストしてシェルファイルを作ります.ファイル名はcv_install_buster.sh
とでもしておきましょう.
curl -SLO https://github.com/mt08xx/files/raw/master/opencv-rpi/raspbian-buster/libopencv3_3.4.9-20191223.1_armv7l.deb
sudo apt autoremove -y libopencv{3,4}
sudo apt install -y ./libopencv3_3.4.9-20191223.1_armv7l.deb
#
sudo ldconfig
python2 -c 'import cv2; print(cv2.__version__)'
python3 -c 'import cv2; print(cv2.__version__)'
ホームディレクトリにcv_install_buster.sh
を保存し,
実行権限を与えてから,実行します.
$ chmod +x cv_install_buster.sh
$ ./cv_install_buster.sh
ホームディレクトリにはlibopencv3_3.4.9-20191223.1_armv7l.deb
というファイルがダウンロードされますが,インストール後は削除してしまってもかまいません.
OpenCVバージョン3.4.9
が2回表示されたら成功です.
ここでエラーが出たら何か環境に問題があるという事になります.
#linux_install.shの書き換え
次にlinux_install.sh
をRaspberry Pi用に書き換えます.
- cmakeをpipインストールからaptインストールに変更
- OpenCVのインストールは既に終わっているのでコメントアウトして無効化
以上の2つの作業を行います.
すなわち,21,22行目の
# install cmake
#sudo apt-get install cmake -y
sudo pip install cmake
を
# install cmake
sudo apt-get install cmake -y
#sudo pip install cmake
へと書き換えるだけです.
また,30行目のOpenCVのインストールは
#sudo pip install opencv-python
の様に無効化します.
テキストエディタ(vi,nano,gedit,pluma,mousepadなど)を使ってlinux_install.shを書き換えてください.
以下にnanoで書き換える例を記載しておきます.
$ nano install/Linux/linux_install.sh
nanoで編集する場合はctrl+oでファイルを保存,ctrl+xでエディタ終了です.
#!/bin/sh
echo 'Compiling and Installing the Tello Video Stream module'
echo 'You might need to enter your password'
cd ..
cd ..
sudo apt-get update -y
# install python 2.7
sudo apt-get install python2.7 python-pip -y
sudo pip install --upgrade pip
#switch to python2.7
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 150
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 100
sudo apt-get update -y
# install cmake
sudo apt-get install cmake -y # ここの#を削除し有効にする
#sudo pip install cmake # ここをコメントアウト
# install dependencies
sudo apt-get install libboost-all-dev -y
sudo apt-get install libavcodec-dev -y
sudo apt-get install libswscale-dev -y
sudo apt-get install python-numpy -y
sudo apt-get install python-matplotlib -y
#sudo pip install opencv-python # ここをコメントアウト
sudo apt-get install python-imaging-tk
# pull and build h264 decoder library
cd h264decoder
mkdir build
cd build
cmake ..
make
# copy source .so file to tello.py directory
cp libh264decoder.so ../../
echo 'Compilation and Installation Done!'
#linux_install.shの実行
書き換えたら,シェルファイルのあるフォルダへ移動して,
chmod
で実行権限を与え,実行します.
$ cd ~/Tello-Python/Tello_Video/install/Linux/
$ chmod +x linux_install.sh
$ ./linux_install.sh
以上で自動インストールされます.
aptやpipのためのファイルダウンロードに失敗している時は,
Ctrl+cで一旦終了して,再度実行してください.
3回ぐらいやれば無事インストールされるはずです.(-_-;;;
インストールが完了したら,Tello-Video
のディレクトリに戻っておきましょう.
$ cd ../../
これで作業は完了です.
#おわりに
Raspberry Piでもインストールはできるのですが,
デコードエラーが頻発したり,
Tello_Videoプログラムを終了させようとしてもゾンビ化して死なない現象が発生したりと,
トラブル頻発します.とにかく重いです.
メモリ4GBのRaspberry Pi 4なら大丈夫なのかなあ...4とBusterでも試してみます.
次はWindowsでの環境構築方法を書きます.