※この文書は個人用のメモです。
Object Detection APIをラズパイで使えるようにしてみる。
元ネタはこちら( https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi )
使ったのはデバイスはRaspberry Pi 3B。
SDカードは8Gのものを使ったが、容量ギリギリなので16G以上を推奨する。
OSの準備
ここ( https://www.raspberrypi.org/downloads/raspbian/ )からRaspbianのイメージをダウンロードし、SDカードを作成する。今回はRaspbian Stretch with desktop 2019-04-08を使用した。
最新の状態にアップデートする
$ sudo apt-get update
$ sudo apt-get dist-upgrade
Tensorflowのインストール
$ sudo apt install libatlas-base-dev
$ pip3 install tensorflow
libatlasはNumpyが依存する線形代数ライブラリでtensorflowを入れる前に導入されている必要があるとのこと。aptでATLASを入れた後にpipでtensorflowをインストールする。使ったバージョンは1.13。
必要なライブラリのインストール
$ sudo apt install libxml2-dev libxslt1-dev
$ sudo pip3 install pillow lxml jupyter matplotlib cython
OpenCVのインストール
先に必要なライブラリをインストールする。
$ sudo apt install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt install libavcodec-dev libavformat-dev libv4l-dev
$ sudo apt install libxvidcore-dev libx264-dev
$ sudo apt install qt4-dev-tools
$ sudo apt install libswscale-dev
ライブラリをインストールしたらpipでOpenCVをインストールする。
$ pip3 install opencv-python
protocolbuffersをインストール
最初に必要なツール類をインストールする。
$ sudo apt install autoconf automake libtool curl
protocolbufferのソースコードを取得する。
$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protobuf-all-3.7.1.tar.gz
取得したファイルを展開する。
$ tar -zxvf protobuf-all-3.7.1.tar.gz
$ cd protobuf-3.7.1
ビルドする。ビルドにはかなり時間がかかる(数時間くらい)
$ ./configure
$ make
$ make check
終わったらインストールする。
$ sudo make install
ライブラリのパスを設定し、pythonのモジュールをインストールする。
$ cd python
$ export LD_LIBRARY_PATH=../src/.libs
$ python3 setup.py build --cpp_implementation
$ python3 setup.py test --cpp_implementation
$ sudo python3 setup.py install --cpp_implementation```
環境変数を設定する。
$ export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
$ export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3
ライブラリのパスを更新する。
$ sudo ldconfig
protoc
とコマンドプロンプトから入力し、正常に実行できればOK。
ここで一度再起動を行う。
$ sudo reboot
Tensor Flowのディレクトリ構造の作成と環境変数の設定
home directoryの直下にtensorflow用のディレクトリを作成する。
$ mkdir tensorflow
$ cd tensorflow
Tensorflowのレポジトリからgit cloneする。
git clone --recurse-submodules https://github.com/tensorflow/models.git
cloneが終わったら.bashrc
に以下のパスを追記する。
export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow/models/research:/home/pi/tensorflow/models/research/slim
変更したら、一度シェルを抜けて再度入りなおし、設定を有効にする。
Object Detection APIのprotoファイルをコンパイルする。
cd /home/pi/tensorflow/models/research
protoc object_detection/protos/*.proto --python_out=.
終わったらカレントディレクトリを移動し学習済みデータをダウンロードする。
cd /home/pi/tensorflow/models/research/object_detection
wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz
tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz
動作テスト
参考情報のURLからテスト用プログラムをダウンロードし、実行してみる。
wget https://raw.githubusercontent.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi/master/Object_detection_picamera.py
ダウンロードしたら以下のコマンドを入力し、実行してみる。
正常に動作したらOK。
python3 Object_detection_picamera.py --usbcam
※内蔵カメラを使う場合はオプションをとること。
参考情報
https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi
https://qiita.com/hidakanoko/items/5292ca79e3ff53867e40
https://www.amelt.net/imc/programming/python/4942/
https://github.com/protocolbuffers/protobuf