Google AIY Projects の Voice Kit を買ってみたのでとりあえず試してみました。
こんな感じのパッケージで届きます。
別途 Raspberry Pi や micro SD カード等も必要なので、単純にスマートスピーカーとして使うだけなら Google Home mini を買った方が安いしお手軽なのですが、 Raspberry Pi 上でスクリプトを作成したり、 GPIO 等でセンサーデバイス等と連携させることもできるのが面白そうだったので購入してみました。今回はひとまず組み立てと動作確認を行ってみます。
基本的な手順は下記 Google の製品ページで紹介されています。
https://aiyprojects.withgoogle.com/voice/#assembly-guide
KSY で購入ですると日本語版の組み立てガイドが付属しているのでそれに従って進めます。
https://raspberry-pi.ksyic.com/main/index/pdp.id/331/pdp.open/331
OS イメージの準備
キットの組み立ての前に SD カードに OS のイメージを書き込んでおきます。今回は下記イメージをダウンロードして使用しました。
https://dl.google.com/dl/aiyprojects/vision/aiyprojects-2018-01-03.img.xz
書き込みには Etcher を使用します。
Etcher を起動して Select Image
をクリックしてダウンロードしておいたOSイメージを選択します。
SDカードをリーダーに挿入してあればドライブが自動的に選択されていますので、 Flash!
をクリックして書き込みを実行します。ドライブが適切に選択されていない場合は Change
をクリックして対象のドライブを選択します。
下記のような表示になれば無事完了です。
組み立て
それではキットを組み立てていきます。箱を開けるとダンボールの筐体や各種パーツ、組み立てガイド(英語)が入っています。
まずは GPIO 等の端子を備えたメインのボードである Voice HAT Accessory Board です。
これをスペーサーを使って Raspberry Pi にマウントします。
そしてスピーカーを Voice HAT の端子に精密ドライバーを使って接続します。
次はマイク基盤です。このマイクでユーザの音声入力を受け付けます。
これも Voice HAT に接続します。
そして外側の筐体と内側のフレームを組み立てます。
内側のフレームと先ほどまでに組み立てた基盤やスピーカーを組み合わせて筐体に入れます。
上部のボタンを取り付けて箱を閉じれば完成です。
デバイスの動作確認
OSイメージを書き込んでおいた micro SD カードを Raspberry Pi に挿入し、USBでキーボードとマウスを接続し、HDMI でモニタを接続したら電源ケーブルを接続して起動します。 Wi-Fi の接続や SSH, VNC の接続が必要であれば設定しておきます。
公式のOSイメージを使用していれば動作確認用のスクリプトが用意されています。まずはオーディオデバイスの動作確認用スクリプトです。デスクトップの下記スクリプトをダブルクリックで実行します。
実行すると下記のようにスクリプトが実行され、テスト用の音声が再生されますので、スピーカーから聞こえていれば y を入力します。続いてマイクのテストも行われますので、 Enter を押して「Testing, 1 2 3」と喋ります。正しくマイクが機能していれば今喋った内容が再生されますので、 y を入力してテスト終了です。
Enabling audio driver for VoiceKit. Playing a test sound... Did you hear the test sound? (y/n) y When you're ready, press enter and say 'Testing, 1 2 3'... Recording... Playing back recorded audio... Did you hear your own voice? (y/n) y The audio seems to be working. Press Enter to close...
次に Wi-Fi の接続テストです。デスクトップの下記スクリプトをダブルクリックで実行します。
実行すると下記のように Wi-Fi の接続確認が行われます。
Checking the WiFi connection... Trying to contact Google's servers... The WiFi connection seems to be working. Press Enter to close...
サンプルプログラムの実行
公式の OS イメージでは Google Assistant SDK のサンプルプログラムが提供されているのでそれを実行してみます。まずは Google Assistant API を有効にする必要がありますので、Google Cloud Platform(GCP) のコンソールにアクセスして、新しいプロジェクトを作成します。
プロジェクト名を入力して 作成
ボタンをクリックします。
プロジェクトが作成されたら「API とサービス」メニューから API とサービスの有効化
をクリックします。
Google Assistant API を検索してクリックします。
API の詳細画面で 有効にする
をクリックします。
次に認証情報を作成する必要があるので、「認証情報」メニューの画面で 認証情報を作成
プルダウンから OAuth クライアント ID
を選択します。
最初は同意画面を作成する必要があるので、 同意画面を設定
をクリックします。
入力フォームでユーザーに表示するサービス名を設定します。それ以外はそのままで構いませんので、 保存
をクリックします。
クライアントIDの作成画面に戻ったら名前を入力して 作成
ボタンをクリックします。
これで認証情報の作成は完了ですので、一覧画面からダウンロードボタンをクリックして json ファイルをダウンロードし、 /home/pi/assistant.json
として保存しておきます。
サンプルプログラム実行の準備ができましたので、デスクトップから Start dev terminal
を実行します。
ターミナルが起動しますので、下記のようにサンプルプログラムを実行します。初回起動時は OAuth での認証が必要ですのでブラウザ上で認証します。認証が完了するとプログラムが実行されますので、 Wake Word「OK, Google」を使って話しかけます。ちなみに現状では英語のみの対応となっています。
$ src/examples/voice/assistant_library_demo.py Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=965148223698-v9m9nb4bgdp58qk159cghm1ketnvin5t.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fassistant-sdk-prototype&state=tA7PMNhUtTMQdAdj2vRu7IuMAYcUe3&access_type=offline 既存のブラウザ セッションに新しいウィンドウが作成されました。 [2018-01-13 14:57:30,435] INFO:google_auth_oauthlib.flow:"GET /?state=tA7PMNhUtTMQdAdj2vRu7IuMAYcUe3&code=4/ESIoWeN3UiJqensJetZpHruY2DCoPh6KWWigZzEuqSE HTTP/1.1" 200 65 [2018-01-13 14:57:30,812] INFO:root:OAuth credentials initialized: /home/pi/.cache/voice-recognizer/assistant_credentials.json Say "OK, Google" then speak, or press Ctrl+C to quit...
続いて、 Google Assistant の gRPC のサンプルプログラムも提供されているので実行してみます。こちらは Wake Word には対応していないので、プログラムを実行した上でスピーカー上部のボタンを押してから話しかけます。こちらもデフォルトでは英語のみの対応となっています。例えば "What's time is it now?" と話しかけると下記のように認識されていることがわかります。
$ src/examples/voice/assistant_grpc_demo.py /home/pi/AIY-projects-python/src/aiy/_drivers/_led.py:51: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(channel, GPIO.OUT) Press the button and speak [2018-01-13 15:07:12,945] INFO:recorder:started recording Listening... [2018-01-13 15:07:46,627] INFO:speech:event_type: 1 [2018-01-13 15:07:46,666] INFO:speech:transcript: what's time is it now You said " what's time is it now " Press the button and speak
まとめ
完成品を買ってくるのとはまた違って、自分で組み立てたデバイスがスマートスピーカーとして動くというのは面白いですね。今回はひとまず組み立てとサンプルプログラムの実行まででしたが、色々なデバイスと組み合わせることもできるので、サンプルプログラムをベースに遊んでみたいと思います。