RaspberryPi
GoogleAssistant
ReSpeaker

Raspberry Pi 3 Model BとReSpeaker 2-Mics Pi HATでGoogle Assistant SDKを活用する

イントロダクション

2017年10月にGoogleから日本語に対応したスマートスピーカー「Google Home」「Google Home Mini」が発売され、2017年3月に雑誌「The MagPi」第57号の付録として配布されて大きな話題になったAIY Projects voice kitが単体で入手できるようになるなど、Google Assistantを利用できるハードウェアデバイスはどんどん増えつつあります。

ここでは、Raspberry PiとReSpeaker 2-Mics Pi HATを組み合わせてGoogle Assistant SDKを活用する方法を紹介します。ReSpeaker 2-Mics Pi HATはSeeed Studioが開発したRaspberry Pi用拡張ボードで、$9.90という低価格にも関わらず、2つのマイクと1つのスピーカー出力、1つのヘッドフォン出力、2つのGroveコネクタ、1つのボタン、3つのRGB LEDを搭載しています。ReSpeaker 2-Mics Pi HATにより、柔軟に拡張でき、かつコンパクトなスマートスピーカーを実現できます。

IMG_5036.JPG

準備

必要なもの

セットアップ

  1. 公式ウェブサイトよりRaspbianのイメージファイルをダウンロードする(例:RASPBIAN STRETCH WITH DESKTOP September 2017)
  2. Etcherをダウンロードして解凍する
  3. Etcherを起動して画面右上の歯車アイコンをクリックし「Auto-unmount on success」のチェックを外す etcher-settings.png
  4. 画面右上のBackをクリックして本の画面に戻り、ダウンロードしたイメージファイルとSDカードリーダーを指定してFlash!をクリックしてイメージを書き込む etcher-main.png
  5. 書き込みと検証が終わるまで10分間程度待つ
  6. ウェブブラウザでhttps://mascii.github.io/wpa-supplicant-conf-tool/にアクセスし、アクセスするWi−Fiアクセスポイントの情報を入力して追加ボタンを押し、wpa_supplicant.conf作成ssh.txt作成をクリックする
  7. ダウンロードされた2つのファイルを書き込みが終わったマイクロSDカードの最上位階層(/boot/)にコピーし、マウントを解除してマイクロSDカードを取り出す
  8. 取り出したマイクロSDカードをRaspberry Piボードに挿入してマイクロUSB端子に電源を接続し、起動する
  9. ターミナルでarp -an | grep b8:27:ebと入力してRaspberry Piが取得しているIPアドレスを見つける(例:192.168.1.123)2
  10. ターミナルでssh pi@192.168.1.123と入力し、ユーザーpiに対して初期設定されているパスワードraspberryを入力してログインする
  11. SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.(SSHが有効で、'pi'ユーザーのデフォルトパスワードは変更されていません。これはセキュリティ上のリスクです。新しいパスワードを設定するには、'pi'ユーザーとしてログインし、'passwd'と入力してください。)という警告が表示されるので、警告に従ってpasswdコマンドを入力し、パスワードを初期値から別のものに変更する
  12. sudo apt-get updateに続けてsudo apt-get upgradeを実行して最新版へ更新する
  13. sudo raspi-configRaspberry Pi Software Configuration Toolを起動し、4 Localisation OptionsI2 Change TimezoneAsiaTokyoを選択し、exitキーを押してツールを終了する

ReSpeaker 2-Mics Pi HATのセットアップ

まず、ReSpeaker 2-Mics Pi HATに搭載されているコーデックチップ「WM8960」を使用できるようにするため、カーネルを再ビルドし、再起動します。

$ git clone https://github.com/respeaker/seeed-voicecard.git
$ cd seeed-voicecard
$ sudo ./install.sh 2mic
$ sudo reboot

再起動後にaplay -larecord -lで再生と録音、それぞれにseeed2micvoicecが追加されていることを確認します。

再生に対応したハードウェアデバイスのリストを出力する
$ 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 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
録音に対応したハードウェアデバイスのリストを出力する
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

確認できたら、seeed2micvoicecをデフォルトの入出力デバイスとして使用するよう、/home/pi/nano .asoundrcを実行し、以下の内容を入力します。

/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 "hw:1,0"
  }
}

/home/pi/.asoundrcの設定を済ませたら、Google Assistant SDKサイトでの説明Configure and Test the Audioのステップ1で説明されているテストを順に実行します。

スピーカーから音声を再生できることを確認する
$ speaker-test -t wav

speaker-test 1.1.3

Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
WAV file(s)
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 128 to 131072
Period size range from 64 to 65536
Using max buffer size 131072
Periods = 4
was set period_size = 32768
was set buffer_size = 131072
 0 - Front Left
Time per period = 0.032640
マイクから音声を録音しスピーカーから再生できることを確認する
$ arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw
Recording raw data 'out.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
$ aplay --format=S16_LE --rate=16000 out.raw
Playing raw data 'out.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono

これでReSpeaker 2-Mics Pi HATのサウンド入出力に関する一通りの動作確認ができましたので、alsamixerコマンドでAlsaMixerを起動し、F6キーを押してサウンドカードを選択し、ボリュームを適切に変更します。

alsamixer-select.png

alsamixer-playback.png

alsamixer-capture.png

以上でReSpeaker 2-Mics Pi HATのセットアップと動作確認は全て完了しましたので、Google Assistant Libraryのセットアップと動作確認へと進みます。

Google Assistant Libraryのセットアップと動作確認

  1. Configure a Developer Project and Account Settingsの説明に従ってプロジェクトを作成し、そのプロジェクトに対してGoogle Assistant APIを有効化し、OAuth Client IDを作成してダウンロードする
  2. 作成したclient_secret_<client-id>.jsonファイルをRaspberryPiの/home/pi/にアップロードする(例:~/Downloadsにダウンロードしたファイルを192.168.1.123のRaspberry Piにアップするのであればscp ~/Downloads/client_secret_<client-id>.json pi@192.168.1.123:/home/pi/
  3. Activity controlsページで自分のGoogleアカウントのアクティビティコントロールを確認し、Web & App Activity(ウェブとアプリのアクティビティ)Device Information(端末情報)Voice & Audio Activity(音声アクティビティ)の3つが有効(青色)になっていることを確認する
  4. Download the Library and Run the Sampleで説明されている手順に従ってPythonの仮想環境を準備し、Google Assistant Libraryをインストールする
  5. google-assistant-demoを実行して動作確認を行う

参照


  1. ReSpeaker 2-Mics Pi HATに搭載されているコーデックチップ「WM8960」がサポートするのが8Ω負荷の1Wであるため、これに合ったものを選択します。 

  2. b8:27:ebはRaspberry Pi FoundationのベンダーIDなので、arp -anの出力からこのIDを含む行だけを抽出することで、同じネットワークに接続されている全ての機器の中からRaspberry PiボードのIPアドレスだけを抽出できる。もし、複数のボードを接続する場合には順に接続することで混乱を避けられる。