Google Vision Kit APIs

 ###Vision Kitの概要


AIY Vision Kitは、Raspberry PiとVision Bonnetで構築された日曜大工のインテリジェントカメラです。

キットを組み立てて付属のデモを実行すると、独自のソフトウェアとハードウェアでキットを拡張できます。

![微信截图_20181109141945.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/c2722823-9137-68d3-49e8-2e54202ae2e2.png)

- 興味があれば、ここで購入できます:https://store.gravitylink.com/global


### APIモジュール
ビジョンモデルでMLモデルを実行し、他のアクションを実行するために、システムイメージには、ビジョンキット用に設計された以下のモジュールを含む`aiy Python`ライブラリが含まれています。

`aiy.toneplayer`：ピエゾブザー用のシンプルなメロディックミュージックプレーヤー。
`aiy.trackplayer`：ピエゾブザー用のトラッカーベースの音楽プレーヤー。
`aiy.vision.annotator`：`Raspberry Pi`のカメラプレビューにオーバーレイを描画する注釈ライブラリ。
`aiy.vision.inference`：`Raspberry Pi`側から`Vision Bonnet`と通信する推論エンジン。
`aiy.vision.models`：特定の種類の画像分類およびオブジェクト検出モデルを使用してML推論を実行するモジュールのコレクション。
`aiy.board`：`Vision Bonnet`のボタンコネクタに接続されているボタンを使用するAPI。
`aiy.leds`：ボタンのLEDやプライバシーLEDなど、特定のLEDを制御するAPI。
`aiy.pins`：`gpiozero`で使用するための、ボンネットの追加のGPIOピンのピン定義。

### ボンネットハードウェア
Voice Kitには、次の`Voice Bonnet`ハードウェアが含まれています。

SOC：無数の2450
MCU：ATSAMD09D14 [I2Cアドレス：0x51]
LEDドライバー：KTD2027A [I2Cアドレス：0x30]
暗号（オプション）：ATECC608A [I2Cアドレス：0x60]
IMU：BMI160

#### ドライバー
MCUドライバー：`modinfo aiy-io-i2c`
MCU PWMドライバー：`modinfo pwm-aiy-io`
MCU GPIOドライバー：`modinfo gpio-aiy-io`
MCU ADCドライバー：`modinfo aiy-adc`
LEDドライバー：`modinfo leds-ktd202x`
ブザー用ソフトウェアPWMドライバー：`modinfo pwm-soft`
無数のドライバー：`modinfo aiy-vision`

MCUをリセットするには：

```
echo 1 | sudo tee /sys/bus/i2c/devices/1-0051/reset
```

MCUステータスメッセージ（ファームウェアバージョンを含む）と最後のエラーコードを取得するには：

```
cat /sys/bus/i2c/devices/1-0051/{status_message,error_code}
```

#### ピン配列（40ピンヘッダー）

```
                   3.3V --> 1    2 <-- 5V
                I2C_SDA --> 3    4 <-- 5V
                I2C_SCL --> 5    6 <-- GND
                            7    8
                    GND --> 9   10
                            11  12
                            13  14 <-- GND
  (GPIO_22) BUZZER_GPIO --> 15  16 <-- BUTTON_GPIO (GPIO_23)
                   3.3V --> 17  18
               SPI_MOSI --> 19  20 <-- GND
               SPI_MISO --> 21  22
               SPI_SCLK --> 23  24 <-- SPI_CE_MRD
                    GND --> 25  26
                 ID_SDA --> 27  28 <-- ID_SCL
                            29  30 <-- GND
          PI_TO_MRD_IRQ --> 31  32
          MRD_TO_PI_IRQ --> 33  34 <-- GND
                            35  36
             MRD_UNUSED --> 37  38
                    GND --> 39  40
```

### aiy.toneplayer

ピエゾブザー用のシンプルなメロディック音楽プレーヤー。

このAPIは、Vision Kit用に設計されていますが、`Vision Bonnet`に依存していないため、それなしで使用できます。 `aiy.pins.BUZZER_GPIO_PIN`に接続されている圧電ブザーのみが必要です。

```
class aiy.toneplayer.Note(name, octave=4, bpm=120, period=4)
```

ベース：`aiy.toneplayer.Rest`

音符を表す単純な内部クラス。

`TonePlayer`クラスの一部で使用されるこのオブジェクトは、名前、オクターブ、再生時間などの音符を表します。 エンドユーザーはこれについてあまり気にする必要はなく、代わりに`TonePlayer`クラスで説明されている音楽言語に集中する必要があります。

> BASE_OCTAVE = 4
> to_frequency(tuning=440.0)

名前とオクターブをHz単位の周波数に変換します。

指定されたチューニングを使用します。

パラメーター：チューニング-自然なA音の周波数（Hz）。

```
class aiy.toneplayer.Rest(bpm=120, period=4)
```

ベース：オブジェクト

音楽の休符を表す単純な内部クラス。

TonePlayerクラスの一部で使用されるこのオブジェクトは、歌の中で音が出ない期間を表します。 エンドユーザーはこれについてあまり気にする必要はなく、代わりにTonePlayerクラスで説明されている音楽言語に集中する必要があります。

> EIGHTH = 8

> HALF = 2

> QUARTER = 4

> SIXTEENTH = 16

> WHOLE = 1

> to_length_secs()

楽譜から秒単位の時間に変換します。

```
class aiy.toneplayer.TonePlayer(gpio, bpm=120, debug=False)
```

ベース：オブジェクト

PWMControllerを介して簡略化された楽譜を再生するクラス。

このクラスは、非常に単純な楽譜を使用して、PWM制御のピエゾブザーから単純な音楽トーンを再生します。

r<length>


この言語は、配列にリストされた音符と休符で構成されています。 休符は、音が出ないときの曲の瞬間であり、次のように書かれています。

<length>は、次の5文字のいずれか、または省略可能です。

w：全音符h：半音符q：四分音符（デフォルト–長さを指定しない場合、

四半期を想定）
e：8分音符s：16分音符

したがって、半音符の休符は「rh」と表記されます。 四分音符の休符は「r」または「rq」と書くことができます。

音符は休符に似ていますが、次の形式を取ります:

<note_name><octave><length>

`<note_names>`は大文字と小文字のA〜Gおよびa〜gを使用して記述されます。 大文字は自然な音であるのに対して、小文字は半音上にシフトされます（シャープ）。 ピアノのキーボードで表される小文字は黒いキーです。 したがって、「C」は自然な音のCですが、「c」は実際にはC＃であり、Cキーの右側にある最初の黒いキーです。

オクターブはオプションですが、1〜8の数字です。 省略した場合、TonePlayerはオクターブ4を想定します。残りと同様に、<length>も省略でき、残りの<length>パラメーターと同じ表記を使用します。 省略した場合、TonePlayerは4分の1の長さを想定します。

これを念頭に置いて、中央のC音符全体を「C3w」と書くことができます。 同様に、4オクターブのC＃四分音符は、「c」または「c4q」または「cq」と書くことができます。

> NOTE_RE = re.compile('(?P<name>[A-Ga-g])(?P<octave>[1-8])?(?P<length>[whqes])?')
> PERIOD_MAP = {'e': 8, 'h': 2, 'q': 4, 's': 16, 'w': 1}
> REST_RE = re.compile('r(?P<length>[whqes])?')
> play(*args)

ピエゾブザーから一連のノートを再生します。(to be continue)