HAL9000っぽいスマートスピーカーを作る

はじめまして。突然ですが、SF映画の名作「2001年宇宙の旅」に登場するAIである「HAL9000」を精密に再現したスマートスピーカーが2018年8月現在クラウドファンディングで出資を募っています。しかし、出資を募っている段階ではいつ出荷されるのかはわかりません。その上出資額が最低でも419ドルと少々お高いです。なので「もういっそのこと自分で作れば良いのでは」という結論に至り、作ることにしました。

仕様

私が作ったものは以下のような仕様となっています。

  • Google Assistantの一つのアプリとして開発。Google Assistantに「OK Goolge, HAL9000とつないで」と喋りかけることで起動させる。
  • 起動中に映画内のセリフ(定型文)で話しかけると、HAL9000を再現したアプリが映画内のセリフを(音声ファイルを再生して)返す。
  • Raspberry Pi上でGoogle Assistantを動かし、スピーカーおよびマイクとRaspberry PiをつないでHAL9000っぽくする。
  • クラウドファンディングで出資を募っているスマートスピーカーのようなカッコいい見た目のものではない。ダンボールに紙を貼る小学生の自由研究並みの見た目になる予定。

また、この記事では、基本的に行ったことをたんたんと述べていくだけなので、詳しい解説は参考記事を参照してください。

今回はGoogle Assistant部分のみを構築します。具体的には、Google Assistantに「OK Goolge, HAL9000とつないで」と喋りかけるとHAL9000を再現したアプリを起動させ、映画内のセリフで話しかけると映画内のセリフを返すようにします。次回でRasberry Piを使ってガワを作ります。

プロジェクトの作成

まず、Actions on Googleに接続し、「Add/import project」で新規プロジェクトを作成します。

f:id:namakura878:20180819181602p:plain

Project Nameは英字で決め(ここではHAL9000とした)、"Choose the default language for your Actions"でJapanese、"Choose your country or region"でJapanを選びます。言語設定は後からでも追加できます。

"Welcome to your project, HAL9000!"というページが出てくるので、「skip」で次に進みます。

するとだいたい下図のようなページになります。

f:id:namakura878:20180819181709p:plain

左パネルの「SETUP -> Invocation」をクリックし、遷移した先のページで「OK Goolge, ○○○とつないで」の○○○にあたる部分を入力します。ここでは「HAL9000」としました。忘れずに右上の「SAVE」を押します。

これで新規プロジェクトの作成はできました。

Diagflowの設定

次に、どのようなセリフを受け取ったときにどのようなセリフを返すのかを決める「Diagflow」の設定をします。左パネルの「Build -> Actions」をクリックし、遷移した先のページで「ADD YOUR FIRST ACTIONS -> Custom intent -> BUILD」と進んでいきます。進んでいくと新しいタブが開かれます。この新しく開かれたタブで「Diagflow」を設定します。二回目以降にこのDiagflowを設定する場合は、「ADD YOUR FIRST ACTIONS」ではなく下図の赤丸で囲った「ADD ACTION」を押します。

f:id:namakura878:20180819181725p:plain

●Agent Nameと言語設定

「Agent Name」を設定し(初期の状態ですでに入力されている)、言語設定を日本語にし、「CREATE」を押します。ここの言語設定も後から追加できます。

インテントの設定

インテントでは、このアプリでどのような会話をするのかを設定します。左パネルの「Intent」で設定できます。

f:id:namakura878:20180819181738p:plain

デフォルトでは、

  • Default Fallback Intent(聞こえません等基本的なやりとり)
  • Default Welcome Intent(エージェント起動時に発する言葉等)

の二つが設定済みです。

●対応メッセージの入力

右上の「CREATE INTENT」を押します。初めに「Intent name」を設定します。「Contexts」や「Events」、「Action and parameters」の部分はいじらなくても大丈夫です。「Training phrases」に受け取るフレーズ(複数個でも可)を入力し、「Responses」に返されるフレーズを入力します。

f:id:namakura878:20180819181757p:plain

「Training phrases」にボーマン船長のセリフ、「Responses」にHALのセリフを入力しました。この「Responses」の部分では、SSMLが使えるので、audioタグを使ってHALのボイスを再生させます。mp3やoggファイルが使えますが、ソースのURLはhttpsの必要があるので注意してください。参考にさせていただいた記事ではGoogleのCloud Storageを使用されていました。

Diagflowの設定はこれでおしまいです。

アプリ情報を設定

実機で動かすにはアプリ情報を設定する必要があるので、次はそれを行います。Actions on Googleの画面から申請に必要なアプリ情報を設定していきます。

まずは左パネルの「DEPLOY -> Directory information」で必須の項目をすべて埋めて、右上の「SAVE」を押します。

次に「DEPLOY -> Location targeting」、「DEPLOY -> Surface capabilites」を設定します。「Surface capabilites」はすべてNoで大丈夫です。右上の「SAVE」も忘れずに押してください。

これでアプリ情報を設定はおしまいです。

シミュレータで試す

「TEST -> Simulator」でシミュレータを起動できます。ここである程度きちんと動いているかを試してみましょう。

f:id:namakura878:20180819181819p:plain

また、「Invocation」などのパラメータを変更した場合は、「CHANGE VERSION」を押さないと変更が反映されないので注意しましょう。

実機(スマートフォン)で試す

アプリを開発したのと同じアカウントで紐づけされているスマートフォンGoogle Homeなら、この段階で作成したアプリを起動できます。実際に動かしてみたのが下の動画となります。

正直ここまででだいぶ満足してしまったので続きをやるかどうかはわかりませんが、もし次回があればはRaspberry Piでガワを作ります。

参考記事