コミュニティ

Raspberry Pi3でTensorflowのObject Detection APIを使えるようにしてみる

この記事は最終更新日から1年以上が経過しています。

※この文書は個人用のメモです。

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

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
この記事は以下の記事からリンクされています
コメント

kobayuta様
 質問 させて頂きたいです。
以下のビルドが出来ません。
どのようにすれば出来るかアドバイスを頂ければ助かります。
使用環境 raspberry pi 3 Model B に
OS、RaspbianのNOOBSをインストールしています。
windows10のPCでjupyter notebookを使ってネットのWIFI経由で操作しています。
(ラズベリーの本体は目の前にあります。)

>>> 以下出来ないコマンドです。
ビルドする。ビルドにはかなり時間がかかる(数時間くらい)

$ ./configure
$ make
$ make check

以下 私のエラーのコピーです。
$ cd protobuf-3.7.1
$ ./configure
checking whether to enable maintainer-specific portions of Makefiles... yes
checking build system type... armv7l-unknown-linux-gnueabihf
checking host system type... armv7l-unknown-linux-gnueabihf
checking target system type... armv7l-unknown-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether UID '1000' is supported by ustar format... yes
checking whether GID '1000' is supported by ustar format... yes
checking how to create a ustar tar archive... gnutar
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in /home/pi/WiringPi/protobuf-3.7.1':
configure: error: no acceptable C compiler found in $PATH
See
config.log' for more details
$ make
make: *** ターゲットが指定されておらず, makefile も見つかりません. 中止.

aireborn様

私が確認したOSはRaspbian Stretch with desktop 2019-04-08であり、最新のBusterではこの手順は試していません。
ですのでその部分が影響している可能性があります。
また、操作時にはWin10のクライアントからTeraTermを使ってSSH経由で捜査しており、jupyter notebook上では試していないですが、そちらの環境によるのかもしれません。

エラーメッセージをみると、configureの実行時にPATH上にgccが見つからないとのことなので、
・build環境が正常にインストールされているか?(gccなど)
・path上にgccが存在するか?
を再度確認されるのが良いかと思います。

kobayuta様

ご指摘ありがとうございます。最新のBusterでしたので、もう一度OSを入れなおしてみます。
また、環境はjupyter notebookを使わずに、ディスプレイ関係を接続して直接操作してみます。
どうもうまく行かないので別の方法を探していましたが、週末に一からやり直して確認をしてみます。
ありがとうございました。

kobayuta様
ご指摘頂いた通り、Raspbian Stretch with desktop 2019-04-08で、
動作をさせることが出来ました。
途中、ImportError:No module named 'matplotlib'というエラーメッセージがでたので、
”matplotlibのインストール”というサイトでインポートしました。
https://teratail.com/questions/157875
ずっと解決せずに困っていましたので、大変助かりました、
ありがとうございました。
※シルバニアファミリーのうさぎ人形をCAT: 58%で認識されたのは少し笑えました。
2無題.pngIMG_3955.JPGIMG_3958.JPGIMG_3959.JPG

あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした