以前、Raspberry Pi Zero/Zero WではGoogle Homeを作ることはできないという記事を書きました。
このとき、googlesamples-assistant-hotwordがエラーになると書きましたが、その後、googlesamples-assistant-pushtotalkというものがあることを知り、これならRaspberry Pi Zero Wでも使えるかもと思い、やってみました。
googlesamples-assistant-pushtotalkは「OK、Google」と言う代わりに、キーボードのEnterキーを押してから、話かける方式のGoogle Assistantです。
- Google Assistant SDKが使えるようにする
- Bluetoothスピーカーを接続する
- Google Assistant SDKでUSBマイクとBluetoothスピーカーを使うようにする
- googlesamples-assistant-pushtotalkを実行する
Google Assistant SDKが使えるようにする
まず、下記記事で書いたようにGoogle Assistant SDKの設定をしました。
ほぼ、下記の本の通りに設定するだけです。
ラズパイ&無料ソフトでAIスピーカーを作る (日経BPパソコンベストムック)
- 作者: 日経Linux
- 出版社/メーカー: 日経BP社
- 発売日: 2018/07/31
- メディア: ムック
- この商品を含むブログを見る
Bluetoothスピーカーを接続する
Raspberry Pi Zero Wはアナログ音声出力端子がないので、下記のいずれかの方法で音声を出力する必要があります。
- HDMI経由で出力する
- USB接続スピーカーを接続する
- Bluetoothスピーカーを接続する
現在、Raspberry Pi Zero Wはディスプレイの無い部屋にあるので、ディスプレイには接続していません。このため、HDMI経由で音声を出力することができません。
また、私はUSB接続スピーカーを持っていません。なので、消去法によりBluetoothスピーカーを使うことにしました。
Bluetoothレシーバー(プリンストン・テクノロジーのPTM-BTR1)経由でダイソーのUSB電源スピーカーを接続しました。
接続は、下記の記事に記載した方法で行いました。
Google Assistant SDKでUSBマイクとBluetoothスピーカーを使うようにする
参考書の上記「ラズパイ&無料ソフトでAIスピーカーを作る」には、/home/pi/.asoundrcを編集するように記載されています。
しかし、これはgooglesamples-assistant-hotwordの場合のみ必要なようで、googlesamples-assistant-pushtotalkを使う場合、編集は不要でした。
/home/pi/.asoundrcには、すでにBluetoothスピーカー用の設定が書き込まれていました。
googlesamples-assistant-pushtotalkを実行する
下記コマンドでGoogle Assistantを実行します。
googlesamples-assistant-pushtotalk --project-id <プロジェクトID> --device-model-id <デバイスモデルID>
googlesamples-assistant-hotwordと微妙にオプションの文字列が違う(単語を繋ぐ文字がハイフンになっている)のでちょっと戸惑いました。
実行すると下記のように表示されるので、Enterキーを押してマイクに話しかけます。
INFO:root:Connecting to embeddedassistant.googleapis.com
INFO:root:Using device model xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx and device id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Press Enter to send a new request...
「明日の天気は」と話かけたところ、ちゃんと音声で自宅周辺の天気予報を教えてくれました。
INFO:root:Recording audio request.
WARNING:root:SoundDeviceStream read overflow (3200, 6400)
INFO:root:Transcript of user request: "明日".
INFO:root:Transcript of user request: "明日の".
INFO:root:Transcript of user request: "明日のて".
INFO:root:Transcript of user request: "明日の天".
INFO:root:Transcript of user request: "明日の天気".
INFO:root:Transcript of user request: "明日の天気は".
INFO:root:Transcript of user request: "明日の天気は".
INFO:root:End of audio request detected.
INFO:root:Stopping recording.
INFO:root:Transcript of user request: "明日の天気は".
INFO:root:Transcript of user request: "明日の天気は".
INFO:root:Playing assistant response.
INFO:root:Finished playing assistant response.
Press Enter to send a new request...
ちなみに、今回もダメもとでgooglesamples-assistant-hotwordを試してみましたが、やはり駄目でした。
下記のエラーになったので、
ALSA lib bluealsa-pcm.c:680:(_snd_pcm_bluealsa_open) Couldn't get BlueALSA transport: No such device
[FATAL:audio_input_stream.cc(47)] Input device could not be opened: default
Aborted
/home/pi/.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 {
type bluealsa
device "XX:XX:XX:XX:XX:XX"
profile "a2dp"
}
}
下記のように音声入力可能なことを示す「ON_START_FINISHED」が表示されるようになったものの、「Ok Google」と呼びかけてもだんまりでした。。
device_model_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
device_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxON_MUTED_CHANGED:
{"is_muted": false}
ON_START_FINISHED
ON_MEDIA_STATE_IDLE
(2019/4/22追記:
その後、pushtotalkでウェイクワードを使う方法を見つけ、試してみました。以下の記事に書きましたので、ご覧いただければと思います。)