まずは、簡単にスマートスピーカーについて知るところから始めていきましょう。
いいから何やったのか知りたい方は、『どういう手順でしゃべらせる?』からお読みください。
Contents
スマートスピーカーとは
対話型の音声操作に対応したAIアシスタントを利用可能なスピーカーで、AIスピーカーとも呼ばれているものです。
音楽鑑賞や調べ物、買い物といったサービスを「音声」のみで利用できる新しく注目されているデバイスです。
その証拠に色んなメーカーがこぞって開発を進めています。
各社のスマートスピーカー
それでは各社が提供しているスマートスピーカーってどんなのがあるのか。。。
2018年10月現在では、日本未発売のものもありますがこれぐらいをおさえておけば大体のスマートスピーカーをおさえられていると思うものをまとめました。
※ここに記載しているサイズや価格は標準仕様のものを載せています。他にもエントリーモデルやハイエンドモデルを揃えているものもあります。
Google Home | Google Assistant | 直径: 96.4 mm 高さ: 142.8 mm | 15,120円(税込) | Buy Now | ||
Amazon Echo | Amazon | Alexa | 直径: 88 mm 高さ: 148 mm | 11,980円(税込) | Buy Now | |
Clova | LINE | Clova | 直径: 201.05 mm 高さ: 139.84 mm | 14,000円(税込) | Buy Now | |
Invoke | Microsoft | Cortana | 直径:106.68 mm 高さ:241.30 mm | 199ドル | 日本未発売 | |
HomePod | Apple | Siri | 直径: 172 mm 高さ: 142 mm | 349ドル | 日本未発売 |
補足)その他のスマートスピーカー
上記にはないが、スマートスピーカーだと打ち出して販売されている製品がいくつか見受けられると思います。
これらを表に載せなかったのは、他社のAIアシスタントを搭載しているからです。例えばSonyのスマートスピーカーであればGoogleAssistantを搭載しているといった具合です。今回の記事ではAIアシスタントが独自のものだけをリストアップしました。
GoogleHomeとは
Google Homeの説明は今更ですが、2016年に北米で発売されたGoogle製のスマートスピーカーです。Google Assistantを搭載しており様々な操作を行えます。家にあるだけでなんか未来感を楽しめるというおまけもついてきます。
購入して、WiFiにつなぐだけでできることをご紹介すると、以下のようなことが声だけで出来るようになります。
音楽をかけたり、どこか行きたい時にどれぐらいかかるかさくっと知りたい時には非常に便利そうです。
- 音楽をかける(GooglePlayMusicやSpotify)
- 天気予報を聞く
- 場所を調べる
- 交通状況を確認する
- 言葉の意味を調べる
- 翻訳する
- アラーム・タイマーをセットする
- スケジュールを確認する(Googleカレンダー)
- ラジオをかける(日経電子版News Radiko etc…)
- スマート家電との連携
きっかけ
発売当初からとても気になっていたのですが、飽きっぽい自分の性格から考えると結局置物になるよなと思いつつスルーをしていた所、昨年末(2017/12)に半額で販売するというニュースが流れたので、miniの価格(約7000円)でHomeが買えるならと購入し、テレビの横に鎮座させました。
意気揚々と初期設定を済ませてからの一週間ぐらいは『アラームかけて~、音楽かけて~、ニュース聞きたい~』とか言いまくってた。。。まではよかったのですが、
- アラーム(寝室と部屋が離れているので使わない)
- ラジオニュース(となりにテレビあるんだからテレビで見る)
- 天気予報(そもそも天気予報を確認する習慣がない)
- 交通状況の確認(交通状況を聞きたくなるときは車乗っちゃってる)
となり、さらに購入当初夢見た『テレビをつけて』とか『電気をつけて』とか『エアコンつけて』とかは対応しているスマート家電でない場合、スマートリモコンがないとだめという事で、案の定二週間程度で置物まっしぐら…
いや、待てそれはまずい
流石に二週間でただの置物に成り下がる(7000円)は痛手。とりあえずなんかしよう…
ところで、話は変わるんですが私年末に仮想通貨始めたんですよ。今話題のコインチェックで…もちろんNem買ってました。はい、やられましたねー
それでも、まだギリギリ含み益をm・・・・・・・・あ!これだわ。各通貨のレートをGoogleHomeさんに問い合わせよう。という流れで題材が決まり開発がスタートしました。
どういう手順でしゃべらせる?
という事でやりたいことが決まったので、まずはGoogleHomeを自由にしゃべらせる方法を調べる。
DialogFlow(旧Api.ai)を使えばいいらしい。GoogleHome内臓のGoogleAssistantがDialogFlowと接続してくれるDialogFlowでこういう問いかけにはこういう風に返すとかの設定をしておくだけでいいみたいなことを書いてある。そこからpython使っていろいろする場合は、サーバ(無料で使えるherokuを使えばいいんじゃない?って書いてた)にプログラムをアップロード(正確にはデプロイ)して、Webhookするとかなんとか。。。あんまりよく分からない。わかりやすく図示すると私がやりたいことをイメージに起こすとこんな感じだろうと目論んですすめることにする。
- 1.人(自分)が話しかける
- 2.GoogleAssistantがDialogFlowと接続する
- 3.DialogFlowとサーバ(heroku)をWebhookで通信する
- 4.サーバ(heroku)にデプロイしておいた自作Pythonが動作する
- 5.自作のPythonプログラムがCoincheckのAPIを叩いてレートをjson形式で取得する
- 6.サーバからDialogFlowにGoogleAssistantで読み込めるjson形式で返却する
- 7.GoogleAssistantがGoogleHomeで結果を返す
準備する物(?)
- Python3.5.
- Googleアカウント+DialogFlowアカウント
- サーバ(無いならherokuアカウント)
- (heroku使うなら)GitHubアカウントがあると楽
- GoogleHome
DialogFlowの設定
DialogFlowで新規agentの作成
Dialogflowにログインして、[Create new agent]で新規作成。
反応させたい単語を登録
今回は仮想通貨の銘柄を反応させて、日本円とのレートを答えてほしい。よって、入力として受け取る単語(ビットコインとかイーサリウムとか)をEntities
に登録します。左側のEntities
を選択してCREATE ENTITY
で新しい単語帳を作成します。
必要な単語と文字揺れが起こってもいいように日本語とか略称とかを入れて[SAVE]で保存します。
どんな反応をさせたいかを登録
次に、『ビットコインの値段は?』と聞いたら『今の価格はXXX円です。』といった返答が欲しいのでQ&Aのフローを登録していきます。登録する先はIntents
です。左側のIntents
を選択してCREATE INTENT
で新しい単語帳を作成します。
Entities
に正しく登録されていれば、蛍光ペンでなぞったような色が付きます。
その他の設定として重要な所はActionの所に入力する任意の文字列が重要です(後述)。また、Responseはとりあえず返答をどうするかなので上手く結果が返ってこなかった場合を想定して、「わかりませんでした」としておきました。
最後に、Fullfilmentについてはどちらもチェックを付けておいてください。全ての設定が終わったら[SAVE]で保存します。
最後に一つDialogflowでの設定がありますが、今はできないので一旦作業を中断して次に進みます。
GitHubの設定
自作のPythonファイルを利用して計算をしたりしたい場合は、サーバにファイルをアップロード(正確にはデプロイ)してあげる必要があります。その際に以下のGitHubを参考にしました。
herokuへデプロイするための準備(プログラムなど各ファイル作成)
下のGitHubのデータ一式を一旦zip形式とかでダウンロードして、必要なものを利用して自分のGitHubアカウントにリポジトリを作成して、同様の校正でアップロードします。
とりあえずこれだけあれば動作しましたっていう構成をスクショしたので貼っときます。
まず、この中からapp.pyのコードを変更します。修正内容は割愛します。
from __future__ import print_function from future.standard_library import install_aliases install_aliases()
from urllib.parse import urlparse, urlencode from urllib.request import urlopen, Request from urllib.error import HTTPError import json import os import requests from pandas import DataFrame from flask import Flask from flask import request from flask import make_response from flask import render_template import sys import logging app = Flask(__name__) app.logger.addHandler(logging.StreamHandler(sys.stdout)) app.logger.setLevel(logging.ERROR) # Flask app should start in global layout coins = {'Bitcoin': 'btc_jpy', 'Ethereum': 'eth_jpy', 'NEM': 'xem_jpy', 'Bitcoin Cash': 'bch_jpy', 'Ripple': 'xrp_jpy', 'Monero': 'xmr_jpy', 'Augur': 'rep_jpy', 'Litecoin': 'ltc_jpy', 'Lisk': 'lsk_jpy', 'DASH': 'dash_jpy', 'Factom': 'fct_jpy', 'Ethereum Classic': 'etc_jpy', 'Zcash': 'zec_jpy' } @app.route('/webhook',methods=['POST']) def webhook(): req = request.get_json(silent=True, force=True) print("Request:") print(json.dumps(req, indent=4)) res = processRequest(req) res = json.dumps(res, indent=4) # print(res) r = make_response(res) r.headers['Content-Type'] = 'application/json' return r def processRequest(req): if req.get("result").get("action") != "check_Cryptocurrency": #Actionで設定した文字列に合わせる。 return {} base_url = 'https://coincheck.com/api/rate/' cryptocurrency, currency = get_currency(req) if currency is None: return {} url = base_url + currency print(url) data = requests.get(url).json() res = makeWebhookResult(currency, data, cryptocurrency) return res def get_currency(req): result = req.get("result") # requestライブラリでデータを取得して返却させる if cryptocurrency is None: return None return cryptocurrency, coins[cryptocurrency] def makeWebhookResult(urrency, data, cryptocurrency): # なんかうまいこと取得したデータを加工 return { "speech": speech, "displayText": speech, "source": "apiai-crypt" } if __name__ == '__main__': port = int(os.getenv('PORT', 5000)) print("Starting app on port %d" % port) app.run(debug=False, port=port, host='0.0.0.0')
次にrequirement.txtの中身を記述します。
Pythonは様々なOSSライブラリを利用して、プログラムを動作させていますがherokuにはライブラリは入っていません。この問題を解決するために、「requirement.txt」を使っています。このテキストファイルの中にインストールしたいライブラリとそのバージョンを書き込んでおくことでデプロイ時にこのライブラリもインストールしてくれます。
requests==2.18.4 pandas==0.22.0 Flask==0.10.1 future==0.16.0
もうひとつ重要な点があります。DialogflowのEntities
にあるActionで任意に決めた文字列と合わせてください。
とりあえずは、ここまででPythonファイルの作成は完了。
あとは、これをWebを介してGoogleHomeがアクセスできるようにすればいい。方法は次の更新で行う。
ピンバック: 【GoogleHome】仮想通貨のレートを喋らせてみた2 | 趣味で始める機械学習