Raspberry pi3＋Google assistant sdkで OK Google, How old are you?

5月17日、GoogleIOのキーノートでCEOのサンダー・ピチャイが「音声AIのgoogle Assistant sdkを、日本語、英語、フランス語、ドイツ語、ヒンディー語、ポルトガル語、スペイン語に対応する」というアナウンスをした。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173392/d6c875d1-92db-3e96-e277-b557702c37b8.png)
https://www.youtube.com/watch?v=Y2VF8tmLFHw

そして5月29日、[Androidスマホ向けの日本語版の配信が始まった。](http://k-tai.watch.impress.co.jp/docs/news/1062132.html)
AmazonのAlexaがいつ英語とドイツ語以外に対応するかがわからない中、先手をうった感じ。

自分は以前、Amazonが出している音声AIの「Alexa」向けプログラムの開発(Alexa Skills）にのめりこんでいたが、日本語開発環境がいつまでたっても出ないので、[出力をストリーミングにして無理やりAmazon Pollyをつかった日本語読み上げファイルを応答させてみた](http://qiita.com/sitopp/items/1f060587856cb8e642f0)ところ、熟語の解釈の精度がイマイチだった。もしAlexaがpollyのエンジンをつかって読み上げるとしたら、まだまだ機械学習が必要だろうなと思う。
あと6/2のAWS SummitでAlexaの開発者の方が来日して開発者向けの講演をしていたが、日本語対応の話は一切出なかった。残念。

前置きが長くなったが、Google Assistant SDKは、ラズパイに対応なさっているという事で、Google Homeを持っていなくても実体化できる。しかもうれしいPython推しだったので、デモをインストールしてみた。英語版です。


## 材料

### Raspberry piの本体セットアップに必要なもの
・Raspberry pi 3 model B
　　深センの華強北で4100円くらいで買ったやつ。日本で買うより送料分くらいは安いかも。でも良くみたらmade in UKと書いてあった。
・ラズパイのケース
　　千石電商で1500円。
・MicroSDHC 8GB Class10 
　　アキバオーで約600円。

### 以下はRaspberry pi2からの使いまわし
・ [USB-MicroSDHCアタッチメント](https://www.amazon.co.jp/gp/product/B01MFBPMKR/)
![ファイル_000.png](https://qiita-image-store.s3.amazonaws.com/0/173392/2d523559-adb9-b362-7c74-c2fb7c232d54.png)

・Androidスマホ用のUSB充電ケーブルとiPad用のACアダプター
・Wi-Fiドングル
・HDMIケーブル
・パソコン用の19インチモニタ、USBマウス、USBキーボード
・自分のモニタは古くてHDMIの端子が無いのでVGA変換コネクタも。

### Google Assistant SDKのセットアップに必要なもの
・パソコン用の安い卓上スピーカー。AUX端子でつなげれば何でもいい。
・[USBマイク](https://www.amazon.co.jp/gp/product/B01KZPF1U8/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1) amazon.co.jpで799円+送料
![ファイル_002.png](https://qiita-image-store.s3.amazonaws.com/0/173392/b90ab074-006b-4152-2a9d-a102c7fd35ca.png)箱がでかすぎるでしょ。。



### 全部さした状態

![ファイル_008.png](https://qiita-image-store.s3.amazonaws.com/0/173392/27d5a229-3b12-bf5d-2618-795475073107.png)

正面は、
USBマイクドングル、、USBキーボードケーブル、
USBWi-FIドングル、USBマウスケーブル。

左側面は、
AUXスピーカーケーブル、HDMIケーブル、USB電源ケーブルがささってます。

イーザ以外の穴が全部ふさがった状態となっています。



## やり方

部品の購入に関しては、Raspberry pi3の本体以外は2と同じだったので、[ラズベリーパイを始めるためには何が必要なの？【入門グッズ編】](https://liginc.co.jp/231837)を参考にさせていただきました。:thumbsup:

次に、[Raspberry pi 3 Model B セットアップしてみた。](http://qiita.com/takabye/items/03ad86a23226a12e4417)を参考にさせていただき、Raspberry pi本体の OSインストールをしました。

OSのダウンロードがすごい時間かかるので、その間に洗濯機をまわして、近所に[激旨スパゲティを食べにいき](https://www.facebook.com/pontebocca/)、本屋に寄って帰宅後、庭の草むしりしながらラズパイにOSのインストールをするというのんびり並行作業です。

<img src=https://qiita-image-store.s3.amazonaws.com/0/173392/1f848b06-d1a8-e02d-acb7-20c4c5c4e1e7.png width=250>


次にGoogle Assistant SDKのセットアップですが、公式の説明ページ、[Google Assistant SDK - Getting Started with the Raspberry Pi and Python](https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/)に細かく書いてあるので、よく読みながら進め、デモまでできました。

認証とキーの発行に関しては、[Raspberry Pi にGoogle Assistant SDKを搭載して「OK Google」してみる。](http://qiita.com/PonDad/items/52eaa93338496b06cb1a)を参考にさせていただきました。ありがとうございます。

## Google Assistantがしゃべった証拠動画

画像クリックで動画に飛びます。
歳をきいたら、Googleは1998年誕生、自分は2016年生まれだと言っています。
<a href=https://youtu.be/y5mjufjzI9Y>
<img src=https://qiita-image-store.s3.amazonaws.com/0/173392/7821f83c-1f03-c9f7-a7a0-c43c8fb2c532.png>


ところで、このベイマックスっぽい何かのスピーカーは、深センの華強北で買ったものです。auxをさしたときにactivated!!!と突然ものすごいデカイ声でしゃべり、そのボリュームを下げる機能が存在しないという点を除けば、ルックスはかわいいので気に入っています。あと、制御の音声の英語が訛りすぎてよく聞き取れないという欠点もあります。あすてぃべてっど！がactivated！なのだと思います。自分の発音よりはましです。


## はまった点1

[Configure and Test the Audio](https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/configure-audio)のステップ3、

```
3.Create a new file named .asoundrc in the home directory
 (/home/pi). Make sure it has the right slave definitions
 for microphone and speaker:
```
の.asoundrcファイルの中身の書き方が良くわからなくてはまりました。

ステップ２に書いてある命令を実行した結果を使えば良いようで、
arecord -l
のレスポンス→mic用
aplay -l
のレスポンス→speaker用
となります。

### ステップ２のレスポンス

```
pi@raspberrypi:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
```
micのcardは1、deviceは0となります。

```
pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
```
これだと、card 0, device 0なのか、
card 0,device 1なのか、どっちが正解なのか良く分からないので、
speakerの値には0,0と0,1の両方を試してみて、0,1のほうが正解でした。
そこで、「.asoundrc」ファイルは以下となりました。

### .asoundrc

```
pcm.!default {
  type asym
  capture.pcm "mic"
  playback.pcm "speaker"
}
pcm.mic {
  type plug
  slave {
    pcm "hw:1,0"
  }
}
pcm.speaker {
  type plug
  slave {
    pcm "hw:0,1"
  }
}
```

## はまった点2

録音テストが動くようになり、out.rawに録音できるようになったはいいが、マイクの録音ボリュームが小さすぎ、再生しても音が聞こえないという事件がおきました。

そこでraspberry piのConfig画面からボリュームを上げて100にしてみたところ、再生したときにちゃんと聞こえる大きさになりました。

![ファイル_003.png](https://qiita-image-store.s3.amazonaws.com/0/173392/21293c0d-aba7-1ac5-1cba-9327e7584d18.png)
これは音量を上げる前の写真です。


## はまった点3

OK Googleと問いかけて会話を開始したすぐ後に、「権限不足ですよん」的なエラーが帰ってしまい、会話が終了してしまいました。（[動画](https://youtu.be/pe6zqijQx98)）



以下の説明があったので、そのとおりアカウントを二つ使い分けていたのですが、、、

https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/config-dev-project-and-account
＞「Set activity controls for your account」

```
Open the Activity Controls page for the Google account 
that you want to use with the Assistant. 
You can use any Google account, it does not need to 
be your developer account.
```

1. developer account=GCP用Googleアカウントのこと。
2. any Google account=Assistantに使うアカウント。連絡先や位置情報や音声データをGoogleが吸い上げる。

2のほうは気持ち悪いから捨て垢を使おうと考えました。
しかし、肝心な 1と2の紐付けをどこかで間違えてしまっており、ちゃんと紐付けられておらず、「権限が足りないんですけど」エラーになってしまったのでした。

気持ち悪さを置いておけば、1と2は同じアカウントでも問題ないので、1の[アクティビティコントロール](https://myaccount.google.com/activitycontrols)を変更し、以下の４つをすべてONにしたところ、うまくいきました。

- Web & App Activity　日本語だと　「ウェブとアプリのアクティビティ」
- Location History　「ロケーション履歴」
- Device Information　「端末情報」連絡先、カレンダーなど
- Voice & Audio Activity　「音声入力」



## 今後のTodo

・Alexa skillsに相当するスクリプトはどこまで組めるのか調べる！
・Google Assistant SDKが日本語に対応したらやってみる！
・developerアカウントとユーザーアカウントは使い分ける！

以上です。
あー楽しかったヽ(￣▽￣)ﾉ