スマートスピーカーは、対話型の音声操作に対応したAIアシスタントを搭載したスピーカーであり、AIスピーカーとも呼ばれます。音声だけで音楽鑑賞や調べ物、買い物などのサービスを利用できる新しいデバイスです。各メーカーが開発を進めており、さまざまな選択肢が存在します。
いいから何やったのか知りたい方は、『どういう手順でしゃべらせる?』からお読みください。
主なスマートスピーカー
以下は、2018年10月現在の主要なスマートスピーカーの一覧です。各社が提供しているスマートスピーカーには、Google Home、Amazon Echo、LINE Clova、Microsoft Invoke、Apple HomePodなどがあります。
補足)その他のスマートスピーカー
上記にはないが、スマートスピーカーだと打ち出して販売されている製品がいくつか見受けられると思います。
これらを表に載せなかったのは、他社のAIアシスタントを搭載しているからです。例えばSonyのスマートスピーカーであればGoogleAssistantを搭載しているといった具合です。今回の記事ではAIアシスタントが独自のものだけをリストアップしました。
GoogleHomeとは
Google Homeは、2016年に北米で発売されたGoogle製のスマートスピーカーです。Google Assistantを搭載しており、さまざまな操作を音声で行えます。音楽再生や天気予報の確認、交通状況の確認などが可能です。また、スマート家電との連携も可能であり、家庭内の操作をより便利にします。
(2024年現在)私の家には、GoogleHomeが3台あり活用中です。
スマートスピーカーの活用例
スマートスピーカーは、日常生活をより便利にするためのツールとして活用されています。以下は、Google Homeを活用した具体的な使用例です。
- 音楽の再生(Google Play MusicやSpotifyなど)
- 天気予報の確認
- 地図上での場所の調査
- 交通状況の確認
- 言葉の意味や翻訳の確認
- アラームやタイマーの設定
- スケジュールの確認(Googleカレンダー)
- ラジオの再生(日経電子版NewsやRadikoなど)
また、スマート家電との連携により、テレビやエアコン、照明などを音声で操作することも可能です。
この開発を思いついたきっかけ
発売当初からとても気になっていたのですが、飽きっぽい自分の性格から考えると結局置物になるよなと思いつつスルーをしていた所、昨年末(2017/12)に半額で販売するというニュースが流れたので、miniの価格(約7000円)でHomeが買えるならと購入し、テレビの横に鎮座させました。
意気揚々と初期設定を済ませてからの一週間ぐらいは『アラームかけて~、音楽かけて~、ニュース聞きたい~』と色々話しかけていました。
しかし、購入当初夢見た『テレビをつけて』とか『電気をつけて』とか『エアコンつけて』とかは対応しているスマート家電でない場合、スマートリモコンがないので物置になりそう。
流石に二週間でただの置物に成り下がる(7000円)は痛手。とりあえずなんかしよう…
スマートスピーカーの設定方法
なお、スマートスピーカーを最大限に活用するためには、適切な設定が必要です。以下は、Google Homeを例にした設定方法の一例です。
DialogFlow(旧Api.ai)を使えばできます。
GoogleHome内臓のGoogleAssistantがDialogFlowと接続してくれるDialogFlowでこういう問いかけにはこういう風に返すとかの設定を行えば正しく返答してくれます。
そこからpython使っていろいろする場合は、サーバにプログラムをアップロード(正確にはデプロイ)して、Webhookするとかなんとか。。。あんまりよく分からない。わかりやすく図示すると私がやりたいことをイメージに起こすとこんな感じだろうと目論んですすめることにする。
- 人(自分)が話しかける
- GoogleAssistantがDialogFlowと接続する
- DialogFlowとサーバ(heroku)をWebhookで通信する
- サーバ(heroku)にデプロイしておいた自作Pythonが動作する
- 自作のPythonプログラムがCoincheckのAPIを叩いてレートをjson形式で取得する
- サーバからDialogFlowにGoogleAssistantで読み込めるjson形式で返却する
- 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で任意に決めた文字列と合わせてください。
まとめ
スマートスピーカーは、AIアシスタントを搭載した新しいデバイスであり、日常生活をより便利にするためのツールとして注目されています。適切な設定や活用方法を理解することで、より快適な生活を実現することができます。
コメント