RaspberryPi4 TensorFlow 

#RaspberryPi4にTensorFlowをインストールする。 
[ここを参考にインストール](https://raspberrypi.stackexchange.com/questions/107483/error-installing-tensorflow-cannot-find-libhdfs-so)

##python3の仮想環境を作る。

    $ mkdir tf_pi
    $ cd tf_pi
    $ sudo python3 -m pip install virtualenv
    $ virtualenv env
    $ source env/bin/activate
    (env) pi@raspberrypi:~/tf_pi $ 

    (env) pi@raspberrypi:~/tf_pi $ sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev
    (env) pi@raspberrypi:~/tf_pi $ python3 -m pip install keras_applications==1.0.8 --no-deps
    (env) pi@raspberrypi:~/tf_pi $ python3 -m pip install keras_preprocessing==1.1.0 --no-deps
    (env) pi@raspberrypi:~/tf_pi $ python3 -m pip install h5py==2.9.0
    (env) pi@raspberrypi:~/tf_pi $ sudo apt-get install -y openmpi-bin libopenmpi-dev
    (env) pi@raspberrypi:~/tf_pi $ sudo apt-get install -y libatlas-base-dev
    (env) pi@raspberrypi:~/tf_pi $ python3 -m pip install -U six wheel mock


    (env) pi@raspberrypi:~/tf_pi $ wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.0.0/tensorflow-2.0.0-cp37-none-linux_armv7l.whl
    (env) pi@raspberrypi:~/tf_pi $ python3 -m pip uninstall tensorflow
    (env) pi@raspberrypi:~/tf_pi $ python3 -m pip install tensorflow-2.0.0-cp37-none-linux_armv7l.whl

####以下のエラーが出力された場合は tensorflow-2.0.0-cp37-none-linux_armv7l.whlを削除してwgetで再取得してpipを実行する。
<B><font color=red>ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    grpcio>=1.8.6 from https://www.piwheels.org/simple/grpcio/grpcio-1.28.1-cp37-cp37m-linux_armv7l.whl#sha256=412a486f22257d975f06992d0888a3f9cfa85f2943d9f33177b660c6b3e435e6 (from tensorflow==2.0.0):
        Expected sha256 412a486f22257d975f06992d0888a3f9cfa85f2943d9f33177b660c6b3e435e6
             Got        63d8a1fadb114e20c636f7006b1262ceb8d1816ded8e34dd48bfea0718ce83bd </font></b>


####一旦仮想環境を終了して再度起動する。

    (env) pi@raspberrypi:~/tf_pi $ deactivate 
    pi@raspberrypi:~/tf_pi $ source env/bin/activate 
    (env) pi@raspberrypi:~/tf_pi $ python3 
    >>>import tensorflow
    >>>tensorflow.__version__ 
    '2.0.0'
                      
####仮想環境にOpenCVをインストール
仮想環境を起動して以下の手順でインストールすればOK。
https://qiita.com/misoragod/items/28235ca32d68cf9e6b3f
    
    pi@raspberrypi:~/tf_pi $ source env/bin/activate 
    CMAKE_INSTALL_PREFIX=/home/tf_pi/envにする。 
    最後の部分は、sudo 無しで実行する。
    (env) pi@raspberrypi:~/tf_pi$ make install 
   
###仮想環境にpython3のpicameraモジュールをインストール
    (env) pi@raspberrypi~/tf_pi $ easy_install3 --user -U picamera

###仮想環境にpillow, lxml, jupyter, matplotlib, cython, python-tkをインストールする。
    (env) pi@raspberrypi:~/tf_pi$ python3 -m pip install pillow lxml jupyter matplotlib cython python-tk

### Protobufのインストール
    $ sudo apt-get install protobuf-compiler
    $ protoc --version 
    libprotoc 3.6.1

###tensorflowのリポジトリをgithubからcloneする。
    (env) pi@raspberrypi:~/tf_pi$git clone --depth 1 https://github.com/tensorflow/models.git
    パスを追加する。
    (env) pi@raspberrypi:~/tf_pi$ vi ~/.bashrc
     export PYTHONPATH=$PYTHONPATH:/home/pi/tf_pi/models/research:/home/pi/tf_pi/models/research/slim:/home/pi/tf_pi/models/research/object_detection 

###モデルをコンパイルする。
    (env) pi@raspberrypi:~/tf_pi$ cd models/research
    (env) pi@raspberrypi:~/tf_pi$ protoc object_detection/protos/*.proto --python_out=.

###SSDLite-MobileNet modelをダウンロード

    (env) pi@raspberrypi:~/tf_pi$ cd models/research/object_detection
    (env) pi@raspberrypi:~/tf_pi$ wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz
    (env) pi@raspberrypi:~/tf_pi$ tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz

###TensolFlowのモデル一覧
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

###エラーなど
ひとまずファイルパスなどはハードコーディングして
 [ここのサンプルを動くようにした](https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi)
    ModuleNotFoundError: No module named 'utils'
    PYTHONPATHに以下のを追加して解決
    /home/pi/tf_pi/models/research/object_detection 

　
    AttributeError: module 'tensorflow' has no attribute 'gfile'
    /home/pi/tf_pi/models/research/object_detection/utils/label_map_util.pyの138行目を修正 

    - with tf.gfile.GFile(path, 'r') as fid:
    + with tf.io.gfile.GFile(path, 'r') as fid:
　

    tensorflow.python.framework.errors_impl.NotFoundError: /home/pi/tf_pi/TensorFlow-Object-Detection-on-the-Raspberry-Pi/data/mscoco_label_map.pbtxt; No such file 

    - PATH_TO_LABELS = os.path.join(CWD_PATH,'data','mscoco_label_map.pbtxt')^M
    + PATH_TO_LABELS = os.path.join('/home/pi/tf_pi/models/research/object_detection/data/mscoco_label_map.pbtxt')


tensorflow.python.framework.errors_impl.NotFoundError: /home/pi/tf_pi/TensorFlow-Object-Detection-on-the-Raspberry-Pi/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb; No such file or directory

     - PATH_TO_CKPT = os.path.join(CWD_PATH,MODEL_NAME,'frozen_inference_graph.pb')
     + PATH_TO_CKPT = os.path.join('/home/pi/tf_pi/models/research/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb')





###現時点での結論
tensorflow v2系とV１系でAPIの仕様違いがあり今回試したサンプルは動か無かった。
そこで、tensorflow2.0.0をアンインストールしtensorflow1.14をインストールすることでサンプルが動いた。
今回、力技で直した部分を今後はきちんとした形で対策して行こうと思う。

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/M-samYacbqQ/1.jpg)](http://www.youtube.com/watch?v=M-samYacbqQ)

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/18qAziRm_7Q/2.jpg)](http://www.youtube.com/watch?v=18qAziRm_7Q)

####tensorflow1.14のインストール
    (env) pi@raspberrypi:~/tf_pi$ python3 -m pip uninstall tensorflow
    (env) pi@raspberrypi:~/tf_pi$ wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.14.0-buster/tensorflow-1.14.0-cp37-none-linux_armv7l.whl
    (env) pi@raspberrypi:~/tf_pi$ python3 -m pip install tensorflow-1.14.0-cp37-none-linux_armv7l.whl
    (env) pi@raspberrypi:~/tf_pi$

###参考
https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi
https://magpi.raspberrypi.org/articles/tensorflow-ai-raspberry-pi
https://github.com/lhelontra/tensorflow-on-arm/releases