RaspberryPi3 AndroidThingsでGoogle Assistant SDK のサンプルを試す

Google Assistant SDKをAndroid Thingsで試せるサンプルが公開されていますのでRaspberry Pi3で動かしてみます。

AndroidThingsがインストールされていて、adb connectで接続できる状態になっている事を前提とします。

■Raspberry Pi3本体以外に必要なもの

  • ボタンとLEDのサンプルと同様の配線をしますので、LED、プッシュボタン、抵抗、ワイヤなど
  • HDMIケーブル+モニター(あった方が分かり易いですが無くても動作には影響ありません。画面には入力した音声を認識した結果のテキストがListViewで溜まっていきます。)
  • USBマイク(サンプルではI2sデバイスでも動かせるようですが、USBマイクでも大丈夫です。アマゾンでも購入できます。https://www.amazon.co.jp/gp/product/B00XU1GHO4/ )
  • スピーカー(ジャックに接続するものでOKです。今回は外部入力のある普通のスピーカーにつなぎました。)

■サンプルプロジェクト

https://github.com/androidthings/sample-googleassistant

をcloneしておきます。

 

■デベロッパプロジェクトの設定

Google Assistant SDKガイド ー Configure a Developer Project and Account Settings

https://developers.google.com/assistant/sdk/develop/python/config-dev-project-and-account

ここの記載内容に従って

  • 「GO TO THE PROJECTS PAGE」のリンク先で新規プロジェクトを作成
  • 「ENABLE THE API」のリンク先でGoogle Assistant APIを有効にする
  • 「CREATE AN OAUTH CLIENT ID」のリンク先で “その他” を選択して作成。
  • 画面の ”JSONをダウンロード”を押して、client_secretファイルをダウンロードする。

この時、そのままだとUnknownという名前になってしまう事があるので、その場合は

client_secret_<client-id>.json

という形式に名前を指定してサンプルプロジェクトをcloneしたディレクトリに保存します。(<client-id>の部分は作成した時に付与される長いIDをそのまま入れてください。)

 

■「アクティビティの管理」画面での設定を行う。

https://myaccount.google.com/activitycontrols

にて、以下を有効にする。

  • Web & App Activity(「Chrome の閲覧履歴と Google サービスを使用するウェブサイトやアプリでのアクティビティを含める」のチェックボックスはONにしておく。)
  • Device Information
  • Voice & Audio Activity

 

■google-oauthlib-toolを使ってcredentialsを生成する

https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib

・google-auth-oauthlibをインストール

macで作業している場合、pythonのパスがデフォルトのシステムのpythonの状態だとエラーになるかもしれません。

・credentialsを生成

を実行するとブラウザが立ち上がって、アプリがプロジェクトにアクセスするのを承認するか聞いてくるので、OKします。

ログはこんな感じになります。

 

■Android Studioでプロジェクトを起動

必要なplatformのバージョンがないと言われたらそのままインストールしてください。

今回はUSBマイクを使用するので、AssistantActivity.javaの「I2sデバイスを使用するフラグ」をfalseに設定します。

これで一度ビルドしてエラーが出なかったらOK。

 

■RPIにボタンとLEDを接続

Button and LED sample (https://github.com/androidthings/sample-button )と同じ配線をしますが、5vとGND以外はRPIへの接続ピン(LEDへの出力とボタンからの入力)が異なります。

BoardDefaults.javaを見ると、LEDがBCM25、ボタンがBCM23になっていますので、

それに合わせて接続を変更してください。

Raspberry Pi3のピン配はこちらをご参照ください。

https://developer.android.com/things/hardware/raspberrypi-io.html

試していませんが、Button and LED sampleの配線に合わせてソースを修正しても大丈夫かもしれません。

■実行

Android Studioから実行してアプリが起動したら、

ボタンを押しながら “OK Google” や ”Hello”など適当に英語で話しかけて、終わったらボタンを離してください。(モニターを接続していると画面上に自分が話した内容がテキストでリスト表示されていきます。)

すると、女性の音声で応答が返ってきます。音声認識の精度とレスポンスの早さに驚きました。

「これから雨が降りそう?」とかにも即座に答えてくれました。

試しに「声は変えられますか?」と聞いたら、「今はこの声だけです。」とおっしゃってました。。。

 

動画では”good afternoon”と呼びかけてみました。