コンピューター好きのブログ

主にコンピューター・ラズパイと電子工作・オーディオ関連の記事を書いています。

Raspberry Pi Zero WでUSBマイクとBluetoothスピーカーを使ってGoogle Assistantを試してみました

Raspberry Pi Zero WとUSBマイクとBlutoothスピーカー

Raspberry Pi Zero WとUSBマイクとBlutoothスピーカー

以前、Raspberry Pi Zero/Zero WではGoogle Homeを作ることはできないという記事を書きました。

 

www.toomath.net

 

このとき、googlesamples-assistant-hotwordがエラーになると書きましたが、その後、googlesamples-assistant-pushtotalkというものがあることを知り、これならRaspberry Pi Zero Wでも使えるかもと思い、やってみました。

googlesamples-assistant-pushtotalkは「OK、Google」と言う代わりに、キーボードのEnterキーを押してから、話かける方式のGoogle Assistantです。

 

 

Google Assistant SDKが使えるようにする

まず、下記記事で書いたようにGoogle Assistant SDKの設定をしました。

 

www.toomath.net

 

ほぼ、下記の本の通りに設定するだけです。

ラズパイ&無料ソフトでAIスピーカーを作る (日経BPパソコンベストムック)

ラズパイ&無料ソフトでAIスピーカーを作る (日経BPパソコンベストムック)

 

 

Bluetoothスピーカーを接続する

Raspberry Pi Zero Wはアナログ音声出力端子がないので、下記のいずれかの方法で音声を出力する必要があります。

  • HDMI経由で出力する
  • USB接続スピーカーを接続する
  • Bluetoothスピーカーを接続する

 

現在、Raspberry Pi Zero Wはディスプレイの無い部屋にあるので、ディスプレイには接続していません。このため、HDMI経由で音声を出力することができません。

また、私はUSB接続スピーカーを持っていません。なので、消去法によりBluetoothスピーカーを使うことにしました。

 

Bluetoothレシーバー(プリンストン・テクノロジーのPTM-BTR1)経由でダイソーのUSB電源スピーカーを接続しました。

接続は、下記の記事に記載した方法で行いました。

 

www.toomath.net

 

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: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ON_MUTED_CHANGED:
{"is_muted": false}
ON_START_FINISHED
ON_MEDIA_STATE_IDLE