Coral USBアクセラレータを使った教育用マシンの構築

Coral USB AcceleratorとRaspberry Pi Cameraを使用して、オブジェクトを認識するように教えることができるデバイスを構築します。(作者Lucy Hattersley)

![unnamed-_1_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/15b0125d-c9e1-35fe-f1f4-7c95bc88403c.jpeg)


Coralの新しいUSBアクセラレータはあなたがどんなRaspberry PiプロジェクトにでもAI能力を造ることを可能にします。 このアクセラレータは、GoogleのEdge TPUチップ、デバイス上のニューラルネットワークのパフォーマンスを大幅に向上させるASICを中心に構築されています。

![微信截图_20190724134118.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/e7716751-5967-cdce-46b0-c83ddeddfdea.png)


このチュートリアルでは、Teachable Machineを構築します。 このプロジェクトは、GoogleのMike Tykaによって設計されました。

![微信截图_20190724132036.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/afefe5e5-5772-8db4-956e-878f4e92e430.png)

`あなたはここでサンゴを買うことができます,強く推奨する: https://store.gravitylink.com`

Teachable Machineは、その前に隠されている物を識別することを学びます。これらの物は何でもありえます：鍵、果物、チェスの駒、あるいは指や顔。

ユーザーはRaspberry Piカメラモジュールの前にあるアイテムを持ち、Teachable Machineのボタンを押します。 それから装置は持ち上げられている物体を覚えています - それが再びそれを見ると、それは対応するLEDを点灯させます。

Teachable Machineは、ネットワーク全体を最初からトレーニングしなくても、プロジェクトに多彩な機械学習テクノロジの輝きを追加する方法の良い例です。

Teachable Machineは（異なる方向からでさえも）オブジェクトを迅速かつ効果的に区別できます。 この種のプロジェクトは、数年前までは高価なグラフィックカードを搭載した強力なコンピュータでは不可能でした。 そして今、私たちはそれを小型のシングルボードRaspberry Piコンピューターに追加することができます。

#### Raspbianから始める
デスクトップ付きのRaspbian StretchをmicroSDカードにフラッシュすることから始めます。
Raspberry Piカメラモジュールを15極リボンケーブルでカメラソケットに接続した状態でPiをセットアップし、microSDカードを挿入します。 Raspberry Piを起動するための電源を追加します。

#### カメラを設定する
Raspbian OSが起動したら、左上のRaspberry Piメニューアイコンをクリックして、Preferences> Raspberry Pi Configurationの順に選択します。

[インターフェイス]をクリックして[カメラ]を[有効]に設定し、[OK]をクリックします。 「再起動が必要です」という警告が表示されます。 はいをクリックします。
ターミナルウィンドウ（CTRL + ALT + T）を開き、テストショットを撮って開きます:

```
raspistill -v -o test.jpg
xdg-open /home/pi/test.jpg
```
#### USBアクセラレータを設定する
セットアップ中にUSB Acceleratorデバイスが接続されていないことを確認します（接続されている場合はデバイスを取り外します）。 ターミナルを開き、次のコマンドを入力してソフトウェアをダウンロードしてインストールします:

```
wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
tar xzf edgetpu_api.tar.gz
cd python-tflite-source
bash ./install.sh
```
インストール中に、「最大動作周波数を有効にしますか？」と表示されます。今のところ「n」と答えます。 パフォーマンスを向上させたい場合は、後で有効にすることができます。

#### USBアクセラレータをテストする
付属のUSB Type-A to USB Type-Cケーブルを使ってUSBアクセラレータを接続します。 これでUSB Acceleratorがセットアップされました。
セットアップとテストの詳細については、Coralの「USB Acceleratorを使い始める」ドキュメント（g.co/coral/setup）を参照してください。

#### モデルをダウンロードする
含まれているデモコードを見てみましょう。 classify_capture.pyスクリプトは、Raspberry Piカメラモジュールと連携して、周囲のオブジェクトのライブ画像分類を実行します。

必要なのは、ありふれたオブジェクトをいくつか検出するように訓練されたモデルです。 1000個の物体を認識するように訓練されたこのMobileNetモデルをダウンロードしてください:

```
wget -P test_data/ https://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/mobilenet_v2_1.0_224_quant_edgetpu.tflite
```
対応するラベルを取得します:

```
wget -P test_data/ http://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/imagenet_labels.txt
```
#### ライブカメラ検出
これで、1000個のオブジェクト用のトレーニング済みモデルとそれに対応するラベルセット、およびライブキャプチャカメラスクリプトが完成しました。 3つすべてをまとめると、物体検出カメラを動かすことができます。

```
python3 demo/classify_capture.py --model 
test_data/mobilenet_v2_1.0_224_quant_edgetpu.tflite --label 
test_data/imagenet_labels.txt
```
Raspberry Piカメラモジュールを部屋の周りに移動すると、プレビューウィンドウにあなたの周りのオブジェクト（ラップトップ、マウス、ソーダ缶など）が表示されます。

classify_capture.pyプログラムは2つのオプションを使います。

- モデル

- ラベル

そしてそれぞれが以前にダウンロードされたモデルと対応するラベルにリンクしています。

これはTensorFlow Liteモデル（したがって.tflite拡張子）で、1000個のオブジェクトを検出するように事前トレーニングされています。 通常、トレーニングは、何千もの電車やテストの画像を使用して、はるかに高速なコンピュータまたはクラウドサービスで行われます。 トレーニング中、モデルは徐々にイメージをラベルリストに一致させることができます。 それが十分であれば、我々はラズベリーパイにそれを使用する。

#### Teachable Machine
技術を組み合わせて何かを構築する時が来ました。 Teachable Machineプロジェクトを構築します。 Classify Captureデモのように、ラズベリーパイカメラモジュールを使ってオブジェクトをスキャンします。 しかし、Teachable Machineは、あなたがその前に持っている物を検知することを学びます。

追加の依存関係をインストールすることから始めます:

```
sudo apt-get install libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly python3-gst-1.0 python3-gi
```
Now add bcm2835-v4l2 to the end of /etc/modules:

```
echo bcm2835-v4l2 | sudo tee -a /etc/modules
```
#### Teachableマシンをセットアップする
このターミナルコマンドでラズベリーパイをオフにします（またはメニュー>シャットダウンを選択してシャットダウンをクリックします）:

```
sudo shutdown -h now
```
Raspberry Piの電源を切り、スイッチとLEDを使ってTeachable Machineブレッドボードをセットアップします（図1）。 ラズベリーパイカメラモジュールは、上を向くように平らな場所に置いてください。

回路が設定されたら、電源を再投入してください。
![微信截图_20190724133505.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/29f96f1d-0cf7-1e81-7f46-e6a26e8efd8f.png)

#### コードをインストールする
Chromiumブラウザを開き、The MagPi GitHubページにアクセスしてください。 そこからあなたのホームフォルダにteachable rpi3.tgzファイルをダウンロードしてください。 ターミナルウィンドウを開き、コードを抽出します:

```
tar xvzf teachable_rpi3.tgz
cd /home/pi/teachable/
```
Teachable Machineを実行するために必要なすべてのコードは、このディレクトリにあります（そしてそこから実行されます）。 embedding.pyのコードリストは最も重要な部分を示しています。 回線をテストするためにこのコードを入力して下さい：

```
sudo python3 teachable.py --testui
```
LEDが点滅して、回路が機能していることを示します。 ボタンを押すと、ターミナルはどのボタンが機能しているかを表示します（0〜4）。

プログラムを中断するCtrl+Cキーを押します。

#### Teachableマシンを実行する
今度は、私たちのTeachable Machineを実行し、それが何ができるのかを見てみましょう。 入る：

```
sh run.sh
```
Teachable Machineはモデルを初期化して実行を開始します。 USBアクセラレータのLEDが点灯し、ターミナルにはフレームレート（通常約30 fps）が表示されます。カメラの上のアイテム（果物やコンピュータのマウスなど）を持ち、LEDと対になっているボタンの1つを押します（LEDはボタンの横に点灯します）。ボタンを放して、アイテムを離します。

これで、アイテムをカメラの前に戻すと、対応するLEDが点灯します。さまざまなアイテムをカメラの前に持っていき、さまざまなボタンを押して各アイテムを検出するようにマシンをトレーニングします。 1つのボタンを背景のみに設定すると便利です（アイテムは保持されていません）。

![微信截图_20190724134033.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/ecb22e85-0ca9-4546-ec9d-350ee4d9d631.png)


Teachable Machineが少し不確かに思われる場合は、いつでもボタンをもう一度押すと再トレーニングできます。ボタンを複数回押して、押すたびにオブジェクトを少し回転させることをお勧めします。

さまざまなアイテムで遊んで楽しんでください。 5番目のボタン（リセット）を押すと、すべての項目がメモリから消去されます。