RaspberryPi3 (Raspbian Stretch) + Intel Movidius Neural Compute Stick NCSDK v2.05 のインストール

#◆ はじめに
世の中の大半の人にとっては退屈極まりないネタのため、簡素に書き下そうと思います。
NCSDKがメジャーバージョンアップして３〜４ヶ月が経過したので、そろそろ安定したかな？ という軽いノリで導入にチャレンジしました。
したら速攻でドップリ首まで沼につかってしまった、という話。
甘かった…。激甘でした…。
一発でうまくいった例しがないので。

Intel公式のインストール手順にのっとってそのままインストールを進めると、かなりの箇所でエラーが発生してまともにインストールができません。
**`v1.12.00`** の頃とは、シェルスクリプトの動作が大きく変更されているようです。
もしかすると、 **`v2.05`** 固有の不具合かもしれません。
<font color="red">**Intel非公式の手順ですので、自己責任でお願いします。**</font>

まともにインストールできなくて困っている方を救済することができれば嬉しいです。
Tome_at_Intel よ、早く修正してくれ。

**[併せてGithub側の活用事例をv2対応しました(v2.05版)
RaspberryPi3(Raspbian Stretch) + Neural Compute Stick(NCS) + RealSense D435 + MobileNet-SSD](https://github.com/PINTO0309/MobileNet-SSD-RealSense)**

#◆ 手順
英語ですが、一応、公式Forumにも投稿しておきました。
**【その１】 [Procedure for installing NCSDK v2.05.00.02 to RaspberryPi3(Raspbian Stretch)](https://ncsforum.movidius.com/discussion/946/procedure-for-installing-ncsdk-v2-05-00-02-to-raspberrypi3-raspbian-stretch)**
**【その２】 [Procedure for "make examples" NCSDK v2.05.00.02 RaspberryPi3(Raspbian Stretch)/Ubuntu16.04](https://ncsforum.movidius.com/discussion/948/procedure-for-make-examples-ncsdk-v2-05-00-02-raspberrypi3-raspbian-stretch-ubuntu16-04)**
![164.png](https://qiita-image-store.s3.amazonaws.com/0/194769/aa5ccdf5-14e2-19b7-24db-622338c8e03a.png)

```shell:パッケージのアップデート
$ sudo apt update
$ sudo apt upgrade
```

```shell:SWAP領域の拡張
$ sudo nano /etc/dphys-swapfile

CONF_SWAPSIZE=100
↓
CONF_SWAPSIZE=2048

$ sudo /etc/init.d/dphys-swapfile restart swapon -s
```

```shell:NCSDKのインストール時パラメータの調整
$ sudo apt install python-pip python3-pip
$ cd ~
$ git clone -b ncsdk2 http://github.com/Movidius/ncsdk
$ cd ncsdk
$ nano ncsdk.conf

#MAKE_NJOBS=1
↓
MAKE_NJOBS=1
```

```shell:protobufのバージョンアップやスクリプトでまともに入らないパッケージの手動導入とNCSDK本体のAPIをビルド
$ sudo apt install cython
$ sudo -H pip3 install cython
$ sudo -H pip3 install numpy
$ sudo -H pip3 install pillow
$ sudo pip3 uninstall tensorflow
$ cd ~
$ wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all-3.5.1.tar.gz
$ tar -zxvf protobuf-all-3.5.1.tar.gz
$ cd protobuf-3.5.1
$ ./configure
$ sudo make -j1
$ sudo make install
$ 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
$ sudo ldconfig
$ protoc --version

$ cd ~
$ wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.8.0/tensorflow-1.8.0-cp35-none-linux_armv7l.whl
$ sudo pip3 install tensorflow-1.8.0-cp35-none-linux_armv7l.whl
$ rm tensorflow-1.8.0-cp35-none-linux_armv7l.whl

$ cd ncsdk
$ make install
```

```shell:OpenCV3.4.1のdebパッケージによる導入
$ cd ~
$ sudo apt install libjasper1 libcanberra-gtk0
$ wget https://github.com/PINTO0309/OpenCVonARMv7/raw/master/libopencv3_3.4.1-20180304.1_armhf.deb
$ sudo dpkg -i libopencv3_3.4.1-20180304.1_armhf.deb
$ rm libopencv3_3.4.1-20180304.1_armhf.deb
```

ココのタイミングでUSBポートにNeural Compute Stickを接続しておかないと、Fatalエラーでビルドが失敗する。

```shell:Neural_Compute_Stickのサンプルプログラムビルド(Tensorflow1.8.0じゃないと通らない)
$ cd ncsdk
$ make examples -j1
```

```shell:SWAP領域のデフォルトサイズへの縮小
$ sudo nano /etc/dphys-swapfile

CONF_SWAPSIZE=2048
↓
CONF_SWAPSIZE=100

$ sudo /etc/init.d/dphys-swapfile restart swapon -s
```

#◆ まとめ
毎度のことながら、 Intelのスクリプトがヤブい感じですが、どうも、 **`Tensorflow 1.7.0`** もかなり不安定なようです。
Githubに面倒くさそうな issue が挙がっていました。

**[テンソルフローをインポートするときの未定義シンボル
Undefined symbol when importing tensorflow #19331](https://github.com/tensorflow/tensorflow/issues/19331)**

#◆ 2018.10.13追記
公式フォーラムで騒ぎまくったおかげで、NCSDK v2.08.01 でインストール用スクリプトが一部改善されたようです。
Tensorflow 1.9.0 がデフォルトでインストールされます。
が、本日時点の最新は、Tensorflow 1.11.0 ですので、自分で最新版を導入しなおしたほうが良いです。

```shell-session:Tensorflowのアップグレード
$ sudo pip2 install tensorflow --upgrade
$ sudo pip3 install tensorflow --upgrade
```