TensorFlow Lite APIとRaspberry Piカメラ

この例では、TensorFlow Lite Python APIとRaspberry Pi Cameraを使用してリアルタイムの分類を実行します。

Pi Cameraを使用したTensorFlow Lite Python分類の例。

![微信截图_20190904150642.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/67a4cf49-9e1c-02eb-1f56-6ae5d52876a4.png)


この例では、Raspberry Pi上でPythonを使用したTensorFlow Liteを使用して、Piカメラからストリーミングされた画像を使用してリアルタイムの画像分類を実行します。

TensorFlowモデルとここにあるほぼすべてのコードは他のハードウェアで動作しますが、classify_picamera.pyのコードはpicamera APIを使用してPiカメラから画像をキャプチャします。 したがって、別のカメラ入力を使用する場合は、コードのこれらの部分を変更できます。

#### ハードウェアをセットアップする

始める前に、RaspbianでRaspberry Piをセットアップする必要があります（できればBusterにアップデートしてください）。

Piカメラを接続して構成する必要もあります。

カメラの結果を見るには、Raspberry Piに接続されたモニターが必要です。 SSHを使用してPiシェルにアクセスする場合は問題ありません（Piに接続されたキーボードを使用する必要はありません）。カメラストリームを表示するには、Piに接続されたモニターのみが必要です。

#### TensorFlow Liteランタイムをインストールする

このプロジェクトでは、TensorFlow Lite APIに必要なのはインタープリタークラスだけです。 そのため、大きなtensorflowパッケージをインストールする代わりに、はるかに小さなtflite_runtimeパッケージを使用しています。

これをRaspberry Piにインストールするには、Pythonクイックスタートの指示に従ってください。 pip installコマンドを実行した後、ここに戻ります。

#### サンプルファイルをダウンロードする

まず、このGitリポジトリを次のようにRaspberry Piにクローンします。

```
git clone https://github.com/tensorflow/examples --depth 1
```
次に、スクリプトを使用していくつかのPythonパッケージをインストールし、MobileNetモデルとラベルファイルをダウンロードします:

```
cd examples/lite/examples/image_classification/raspberry_pi

# The script takes an argument specifying where you want to save the model files
bash download.sh /tmp
```

#### 例を実行する

```
python3 classify_picamera.py \
  --model /tmp/mobilenet_v1_1.0_224_quant.tflite \
  --labels /tmp/labels_mobilenet_quant_v1_224.txt
```
Raspberry Piに接続されているモニターにカメラフィードが表示されます。 コーヒーマグやキーボードなどのオブジェクトをカメラの前に置くと、予測が印刷されます。 また、各推論の実行にかかった時間をミリ秒単位で出力します。

TensorFlow Liteによる推論の実行の詳細については、TensorFlow Liteの推論を参照してください。(https://www.tensorflow.org/lite/guide/inference)


#### 推論時間を短縮します（オプション）

推論時間を大幅に短縮したい場合は、Coral USB AcceleratorなどのMLアクセラレータを接続できます。これは、LinuxベースのシステムにEdge TPU MLアクセラレータを追加するUSBアクセサリです。

Coral USB Acceleratorを使用している場合、次の追加手順に従って、モデルの実行をEdge TPUプロセッサーに委任します:

1. まず、USBアクセラレータのセットアップ手順を完了していることを確認してください。

2. 次に、classify_picamera.pyファイルを開き、次のインポートを上部に追加します:

```
from tflite_runtime.interpreter import load_delegate
```
次に、インタープリターを初期化する次のような行を見つけます:

```
interpreter = Interpreter(args.model)
```

それを変更して、Edge TPUデリゲートを指定します:

```
interpreter = Interpreter(args.model,
    experimental_delegates=[load_delegate('libedgetpu.so.1.0')])
```

`libedgetpu.so.1.0`ファイルは、ステップ1のUSBアクセラレータのセットアップ中にインストールしたEdge TPUライブラリによって提供されます。

3.最後に、Edge TPU用にコンパイルされたバージョンのモデルが必要です。

通常、Edge TPU Compilerを使用して.tfliteファイルをコンパイルする必要があります。 ただし、コンパイラツールはRaspberry Piと互換性がないため、上記のdownload.shスクリプトにコンパイル済みのモデルを含めました。

したがって、すでに必要なコンパイル済みモデル`mobilenet_v1_1.0_224_quant_edgetpu.tflite`があります。

これで、Edge TPUでTensorFlow Liteモデルを実行する準備が整いました。 classify_picamera.pyを再度実行しますが、Edge TPU用にコンパイルされたモデルを指定してください（以前と同じラベルファイルを使用します）:

```
python3 classify_picamera.py \
  --model /tmp/mobilenet_v1_1.0_224_quant_edgetpu.tflite \
  --labels /tmp/labels_mobilenet_quant_v1_224.txt
```
推論速度が大幅に高速になるはずです。

Coralデバイスを使用したTensorFlow Liteモデルの作成および実行の詳細については、Edge TPUのTensorFlowモジュールを参照してください。

![微信截图_20190904150555.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/54b480a4-1083-155e-8b1f-1bc1c9f9de0a.png)


Google Edge TPUハードウェアデバイスについては、ここでチェックしてください: https://store.gravitylink.com/global