Raspberry PiでAlexaのサンプル動かしてみた

こんにちは、ハードウェア好きのm-yamashitaです。

Raspberry Piを入手した & Amazon echoが待ちきれないので
試しにAlexaのサンプルを動かしてみました。(せっかくなので日本語対応)
手順を説明して行きます。*Raspberry PiのOSインストールなどの初期設定は省きます。

ハードウェア構成

Raspberry Piはリンクにあるセットがおすすめです。HDMI、SDカードが付いているのですぐに環境構築できます。

HDMIでディスプレイのスピーカーで音を出力していましたが、ぷつぷつ切れて使い物にならなかったです。マイクもある程度、集音性がないとサンプルのセンサーが反応してくれません。入出力ともにある程度のスペックで整えることをお勧めします。

Raspberry Piの環境構築

まず、サンプルを動作させるために、VNC Serverをインストールします。

設定ファイルを下記のようにします。

AmazonDeveloperアカウントの登録

こちらでアカウントがない方は登録してください。
日本語のスキルを使いたい場合は日本のAmazonで商品が見れるアカウントを紐づける必要があります。
設定→ユーザー権限→新規追加で登録が可能です。

Alexaのデバイス登録

こちらに手順が詳しく書いてあります。

この手順で作成して出来た下記のものを、後に設定します。

  • ProductID
  • ClientID
  • ClientSecret

Alexa Avs Sample Appのインストール

Raspberry Pi上のデスクトップにとりあえずインストールします。

インストール設定をします。
先ほどデバイス登録した際に取得した3点を下記のファイルにそれぞれ書き込みます。

日本語に対応させます。

localeを下記のように変更

日本語がサンプルアプリの言語リストに表示出来るように設定します。(39行目)

インストールスクリプトを実装します。(10分〜くらい時間がかかります。)

インストール中に音声出力の設定、
言語(ここではとりあえずen-USで)を聞かれるので環境通りに設定します。

Alexa Avs Sample Appの起動

3つのターミナルを開いて下記のコマンドを順番に走らせます。

詳しい画面遷移はサンプルのwikiに書いてあります。
起動後のAmazonアカウントで認証する際に、日本語のAmazonを見れるアカウントでログインするのがポイントです。
そうすれば日本語のスキルを仕様することができます。

AlexaのiOS,Androidアプリをインストールして、同じアカウントでログインすれば紐付けされています。設定で地域や住所を登録すると、”今日の天気は?”と聞くと設定した地域の天気を教えてくれます。

Raspberry Pi起動時にシェルスクリプトを走らせられるみたいなので
先ほどの3つをまとめてスクリプトにしたら良いと思います。

やってみた感想

Amazonのサンプルが物凄くシンプルかつ、簡単に設定できたのでAmazonの本気度が感じました。マニュアルも充実しててほとんど迷いませんでした。ただ音に依存するものなので、マイクとスピーカーの性能が低すぎると使い物になりませんでした。(Raspberry Piの初期設定の環境では使い物にならなかった。)

マイクとスピーカーの性能が良いものにしてしまえば、本物と同等またはそれ以上の物が作れそうです。(Windowsでも出来るみたいなので、自作PCとかで動かしたらやばそう)

日本のスキルに初音ミクやピカチューと会話するスキルがあったので試して見ましたが、意外に楽しかったです。二つともまともな会話になりませんが、一人でいる時の寂しさは解消できそうです。またJoysoundのカラオケのスキルもあったのですが、音がメインだからか物凄くしっくりきました。声だけで色々出来ることはとても便利だな実感できる体験が出来ました。

Amazon Echoが待ちきれない方、簡単に作れるのでぜひ試してみてはいかがでしょうか!

Google Home でルンバハック

Google Home の音声命令でルンバにいろんなことをさせてみた

こんにちは。ルンバハック愛好家の kamoc です。
この記事は、おうちハック Advent Calendar 2017 の5日目のエントリーです。

Google Home や Amazon Echo など、各社から AI スピーカーが続々と発売されていますね。かくいう私は「Echo の招待が来てからアドベントカレンダーのネタを作るか〜。」なんて考えていましたが、一向に招待メールが来ず・・・。元々購入する予定は無かったのですが Google Home の購入に至りました。(私が Amazon のファンなだけで、決してガジェットとしてどちらが優秀というわけではないですよ。)
この記事では Google Home を用いてルンバにいろいろやらせてみたことについてと、Google Home を使ったりいじったりした感想を紹介します。

作ったもの

ルンバのWifi対応モデルでは、Google Home に標準対応するようになるそうですが、執筆時点ではまだ対応していなかったので、掃除するコマンドを実装するのに加えて無駄な楽しい機能を付け加えてみました!
実装した音声コマンドはこちらです。

  • ルンバ、掃除して!
  • ルンバ、歌って!
  • ルンバ、前進!
  • ルンバ、右へ!
  • ルンバ、左へ!
  • ルンバ、全速前進!
  • ルンバ、とまれ!
  • ルンバ、マグナムトルネード!

今回つくったものを動画にまとめたのでご覧ください。

幼き頃、某ミニ四駆アニメを観ながら、『マシンに向かって話しかけたって反応する訳ないじゃーん。』とか思っていましたが、2017年の今、ついに現実のものになりましたよ! やったよ土屋博士。

さて、技術的にどんな感じで作ったのか紹介していきます。
ここからは実装の詳細の話になるので、興味のない方はGoogle Home を使ってみた感想まで読み飛ばして下さい。

システム構成

システムの全体構成はこんな感じです。

システム構成図

音声命令を受け取ってからの処理の流れは以下のようになります。

  1. GoogleHome に入力された音声コマンドを Dialogflow の Intent が処理する
  2. Dialogflow の Fulfillment で Firebase CloudMessage を送る
  3. CloudMessage を受け取った Android 端末がシリアル通信でルンバに命令を送る

各処理について順番に紹介していきます。

GoogleHome に入力された音声コマンドを Dialogflow の Intent が処理する

Dialogflow は自然言語を用いたユーザー体験を実現するためのサービスで、 Google Home アプリを開発するために使用します。
Dialogflow の Intent では、『もし◯◯と言ったら、◯◯を実行。』という動作の定義を行います。具体的な手順については以下の記事を参考にさせていただきました。こちらの記事では api.ai という Dialogflow の旧名称で記載されているので、適宜読み替えてください。

Intent の定義

今回私が設定した Intent はこんな感じです。

Intent の定義

黄色くハイライトされているのはこの後紹介する Entity で、コマンドのバリエーションを定義します。
コマンドを受け取った時にプログラムでゴニョゴニョするために、忘れずに Use webhook にチェックを入れておきます。

Entity の定義

続いて、Entity の定義です。ここではルンバの動作パターンを定義します。私が作成した Entity はこんな感じです。
Entity の定義

左側のカラムは日本語でも問題なく動作しますが、この後紹介する Fulfillment でこの値を使用するので半角英数にしました。右カラムは複数のワードを定義することができます。そのため、「前進」の他にも、「走れ」「前へ進め」「パンツァーフォー」といった具合に、いろいろな言い換えを準備しておくことができます。
作ったものを動かしていると、自分が「前進」なのか「進め」なのか、どのワードで設定したか忘れてしまうことがありました。文言レベルで正しく命令しないと解釈してくれないため、固有名詞以外を Entity で定義する場合は、いろんなパターンを準備しておいたほうが快適に使えるようになると思います。

Dialogflow の Fulfillment で Firebase CloudMessage を送る

続いて、Dialogflow の Fulfillment について紹介します。
Fulfillment では、具体的な処理を定義します。
定義するためには以下の2通りの方法を利用することができます。今回は Inline Editor を使用しました。

Webhook

読んでその名の通り、Webhook です。
Webhook の先で実際にやりたいことの処理を実装していくことになります。工夫次第ではなんでもできますね!
ただ、音声命令のトリガーで Webhook を叩くちょっとしたデモを作るのであれば、Dialogflow を使うよりも IFTTT を使った方が同じことが簡単に実現できると思います。

Inline Editor

今回お世話になったのはこちらの Inline Editor です。
実態は Firebase の Cloud Functions で、ブラウザ上で手軽にプログラムを書くことができます。
デフォルトの index.js にちょろっと変更を加えただけです。変更点について紹介していきます。
まず、CloudMessageを送信するためにモジュールの読み込みと初期設定を、 index.js の先頭で行います。

このデモでは Firebase DB は使用しませんが、firebase-admin の初期化のために必要になるので、Firebase コンソールで DB を作成して URL をセットしてあげてください。

次に、音声入力されたコマンドを CloudMessage として送信する部分を実装します。
processV1Requestメソッド内の、actionHandlersを拡張します。

今回はデモなので、Firebase の token はソースにべた書きしてしまっています。
parameters から Entity で定義したルンバコマンドを取得し、CloudMessageに乗せてお家の Android 端末に通知を飛ばします。

Dialogflow のソースコードは Gist にあげておきました。

CloudMessage を受け取った Android 端末がシリアル通信でルンバに命令を送る

あとは、 Android 側で PUSH 通知を受け取り、コマンドに合わせてルンバを動かしてあげれば完成です。
この部分については、ルンバと Android 端末をつなぐケーブルを自作する必要があったりして長くなるので、具体的な説明は割愛します。
Android アプリのソースコードも GitHub にあげておいたので、興味がある方は見てみて下さい。

Google Home を使ってみた感想

この記事では Google Home を使ってルンバに音声で色々なことをさせてみました。
最後に、Google Home を触ったり、使ってみた感想を紹介します。

音声で操作する体験が素晴らしい

音声で家電を制御する体験は、想像以上に快適なものでした。
ルンバに掃除をさせる場合、従来は

  • iRobot App を立ち上げてクリーンボタンを押す
  • ルンバ本体のクリーンボタンを押す

といったように、ワンアクションする必要がありましたが、「ルンバ、掃除して」と一声かけるだけで良いのはとても快適です。Google Home からの掃除命令は公式でサポートされると発表されています。しかし、執筆時点では、まだ自分で拡張しないと利用できない模様です。)(2017/12/15 追記: ついに公式でも対応しました!)
ほんの一手間の節約なのですが、毎日やることなので長期的に見ればそれなりの時間の節約になります。
また、 Google Home に話しかけるという行為が、日常生活から大きく乖離したアクションでないことも良い点だと思います。私の場合、日常から飛躍しすぎると、すぐに飽きてしまい使わなくなってしまうのですが、これなら日常生活に溶け込んで行きそうです。

現状、自分で拡張しない限りできることが少ない

ちょっとデフォルト状態だとできることが少ないかなーと思います。
私の場合、 Google Play Music や Spotify などの対応サービスに契約していないこともあり、自分で拡張した機能以外における恩恵はあまり感じませんでした。ただ、この記事で紹介したように、簡単に拡張ができるため、今後さまざまなコンテンツが登場することを期待しています。

IFTTT で言うところの IF だけでなく THAT も担えてほしい

私が調べた限りでは、 「もし◯◯なら、☓☓を実行する。」ということを実現したい時に、Google Home は前半部の「もし◯◯なら」の部分しか担えない点が残念でした。例えば、自分が管理しているサーバーがダウンしたら Google Home が通知するようなものを作れたら便利なのにな〜と思いました。
2017/12/07 追記 以下の記事で Google Home 外部トリガーで喋らせる方法が紹介されていました!

現状ではまだ物足りなさを感じる Google Home ですが、手軽に対応アプリを開発できることもあり、今後の発展がとても楽しみです! また、 Amazon Echo が入手できたらいろいろ試してみようと思います!

r-work-02

リモートワーク始める前に感じた不安と実際働いて分かった事

この記事を読まれている方は、リモートワークの会社への就職や転職を検討している方々で、リモートワークという新しい働き方に漠然とした不安があるのではないでしょうか。

例えば、「作業効率本当に良いの?」「業務をサボってると思われるんじゃない?」等、不安や心配な事ってありますよね。

続きを読む

stocpics(ストックピクス)で法人様向けの請求書払いできる機能をリリース!

しくみ製作所株式会社(代表取締役:車拓哉)は、SNSの画像を売買できるサイト「stocpics(ストックピクス)」で請求書払いできる機能を2017年9月1日(金)にリリースいたしました。

請求書払いできるようになったことで、写真を買う側のユーザーは「クレジットカード払い」「請求書払い」の2つの支払い方法から選択して購入・支払いができるようになります。

続きを読む

Dコミュ

セガ・インタラクティブ 社、「頭文字D ARCADE STAGE Zero」コミュニティ運用にBONDOを導入

しくみ製作所株式会社(代表取締役:車拓哉)が提供するファンコミュニティ開発・運営サービス「BONDO」が、「頭文字D ARCADE STAGE Zero」(ゲーム開発企業:株式会社セガ・インタラクティブ 以下セガ・インタラクティブ)のコミュニティサイト「頭文字Dこみゅ」に採用されました。

「頭文字Dこみゅ」は、2017年5月24日より運用を開始しております。

続きを読む

SNSの画像を売買できるサービス「stocpics(ストックピクス)」のβ版をリリース

しくみ製作所株式会社(代表取締役:車拓哉)は、SNSの画像を売買できるサービス「stocpics(ストックピクス)」のβ版を2017年7月11日(火)にリリースいたしました。

stocpicsはInstagram, Facebook, TwitterなどのSNSにアップした写真をそのまま販売できる、新しいカタチの写真素材サイトです。
続きを読む

Slackの発言をEmoji reactionでカンタンにGitHub Issue化する

こんにちは yoshitsugu です。

普段Slackを使っていると、「この発言は流れてほしくない」というものがあると思います。

通常であればSlackのpin機能などで事足りると思いますが、バグの報告などはそのままGitHub Issue化できると便利です。

そこで、今回はSlackの発言にreactionをつけることでGitHub Issue化するSlack botを作ってみました。

続きを読む

ハングアウトとYouTubeを使ってビデオ会議を録画してみた

しくみ製作所代表の車です。

ビデオ会議ってホワイトボードも見られないし、セットアップもあって面倒だな〜と思っている人も結構多いかと思います。

弊社では、リモートワークが日常化しているのですが、会議についてはやはり直接会ってお話する方が、生産性が高いのかな〜と思うシーンもあります。

ビデオ会議をリアルの会議に追いつかせようと、弱点ばかりを克服していても消極的なので、
逆に、ビデオ会議のメリットの方に目を向けて、YouTubeを使って録画してみることにしました。

続きを読む