スマートスピーカーでやったことまとめ

# はじめに
昨年のアドベントカレンダーで「[Google Homeでやったことまとめ](https://qiita.com/miso_develop/items/99624915d3d6e41a5fb3)」という記事を投稿させて頂きました。
今回はそれから1年、Google Homeに限らずAlexaやClovaといったスマートスピーカー全般でやってきた事をまとめたいと思います。



# トイドローン「Tello」を音声操作
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">子供の昼寝中にドローンを音声操作化！<br>途中言いしくじったところはフリップじゃなくグリップで認識されてました…<a href="https://twitter.com/hashtag/tello?src=hash&amp;ref_src=twsrc%5Etfw">#tello</a> <a href="https://t.co/TuDzpJhazU">pic.twitter.com/TuDzpJhazU</a></p>&mdash; 田中みそ (@miso_develop) <a href="https://twitter.com/miso_develop/status/991947467875758082?ref_src=twsrc%5Etfw">2018年5月3日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この動画ではトイドローン「[Tello](https://www.ryzerobotics.com/jp/tello)」をGoogle Homeより音声操作しています。
Telloは安価かつ高性能で普通に遊ぶ分にもオススメできるドローンですが、最大のポイントとしてUDPにて操作可能な[SDK](https://terra-1-g.djicdn.com/2d4dce68897a46b19fc717f3576b7c6a/Tello%20%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/For%20Tello/Tello%20SDK%20Documentation%20EN_1.3_1122.pdf)を公開していることです。

仕組みはGoogle HomeからIFTTT、Firebaseを経由し、Telloと同じWi-FiにあるPCよりUDPをTelloへ飛ばして音声操作しています。
作り方については以下の記事にまとめています。

[Google Homeに話しかけてドローンを音声操作してみる](https://qiita.com/miso_develop/items/a482dc4d168ec0a33818)
![image](https://camo.qiitausercontent.com/38c1f7feee8b90ae9576de9a968ff6715303a7a1/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3230373130392f38623665383739322d306433312d663730302d366333622d6464396433653532336130662e706e67)

同様にAlexaからも音声操作するスキルを作成し[Alexaスキルアワード](https://amazonalexaskillawards.splashthat.com/)にエントリーしたところ、ファイナルステージまで進むことができAmazonさんでデモをおこなってきました。

審査員の池澤あやかさんのツイートより
<blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"><p lang="ja" dir="ltr">ドローンをボイスコントロールするスキル「Tello Control」。むちゃかっこいいんだが…！未来かよ…？<a href="https://twitter.com/hashtag/Alexa%E3%82%B9%E3%82%AD%E3%83%AB%E3%82%A2%E3%83%AF%E3%83%BC%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#Alexaスキルアワード</a> <a href="https://t.co/NuGfYyPZAe">pic.twitter.com/NuGfYyPZAe</a></p>&mdash; 池澤あやか / いけあや (@ikeay) <a href="https://twitter.com/ikeay/status/1045919204837220352?ref_src=twsrc%5Etfw">2018年9月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

さらに最近「[Tello EDU](https://www.ryzerobotics.com/jp/tello-edu)」なる新型が発売されたようで、こちらなら一般公開できる音声操作スキルを作成できるかもしれません。
更にSDKのバージョンもいつの間にか1.3にアップデートしており、ビデオ系のコマンドが追加されていました。



# オリジナルスマートスピーカーを作成
私のアイコン画像で履いている「[バナナパンツ](https://www.amazon.co.jp/MARUSO-%E3%83%90%E3%83%8A%E3%83%8A%E3%83%91%E3%83%B3%E3%83%84-PE-514/dp/B00KKA1BT4)」に[Google Assistant SDK](https://developers.google.com/assistant/sdk/)を搭載し、「履く」スマートスピーカーを作りました。

[デモ動画（YouTube）](https://www.youtube.com/watch?v=nQVJRvZ0TEE)
[![ok-banana-youtube.png](https://qiita-image-store.s3.amazonaws.com/0/207109/a6974549-e273-6127-f6b2-bf0cd8792076.png)](https://www.youtube.com/watch?v=nQVJRvZ0TEE)

入れ物にはRaspberry Pi Zero Wを使用し、スピーカー、マイク、バッテリーをつなげています。
ウェイクワードも「OK Google」ではなく「OK Banana」に変えており、これには「[Snowboy](https://snowboy.kitt.ai/)」というライブラリを使用しています。
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/2deb385d-dd5a-66e0-ec37-7c3b4b4c64e4.png)

作り方やハマリどこを以下のスライドにまとめてありますのでご興味がある方はこちら御覧ください。

[たぶん世界初…？Google Assistant搭載〇〇〇を作ってみた（Speaker Deck）](https://speakerdeck.com/miso/tabunshi-jie-chu-dot-dot-dot-google-assistantda-zai-000wozuo-tutemita?slide=9)

これを作ってみたことでウェアラブルな音声アシスタントに有用性を見出し、スマートウォッチ（Wear OS）を購入してみました。
が、バッテリーがあまり持たず、外にいるときは音声入力の使いみちがあまりなく、家に帰ったら即充電という状態でその真価を発揮できていません。

「[Xperia Ear Duo](https://www.sonymobile.co.jp/product/smartproducts/xea20/)」といった音声アシスタント搭載イヤホンも発売されていますので、こちらもすごく気になっています。



# Google Assistant搭載スマートディスプレイ/スマートミラーを作成
OK Bananaに7インチモニターを繋げてスマートディスプレイ化してみました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Echo Spotの到着が待ちきれないのでスマートディスプレイ自作してみた🤤 <a href="https://t.co/OUIuKrMh9V">pic.twitter.com/OUIuKrMh9V</a></p>&mdash; 田中みそ@12/17スマートスピーカーを遊びたおす会vol.4開催！ (@miso_develop) <a href="https://twitter.com/miso_develop/status/1021803594830372864?ref_src=twsrc%5Etfw">2018年7月24日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

今はもうEcho SpotやEcho Showが発売されていますが、ディスプレイ表示はHTMLほど自由にレイアウトできるわけではなく、レイアウトできるのもあくまで自分のスキルとなります。
しかし自作のスマートディスプレイであれば基本機能のレイアウトも、自作スキルも自由自在に表示できます。
作り込めば結構な可能性があるんじゃないかと思います。

またディスプレイにハーフミラーフィルムを貼ってスマートミラーにも。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">息子がお昼寝したのでスマートディスプレイを改造してスマートミラーにしてみた。<br>フィルム適当に貼りすぎてクソミラーだけど… <a href="https://t.co/49OoaLCdno">pic.twitter.com/49OoaLCdno</a></p>&mdash; 田中みそ@12/17スマートスピーカーを遊びたおす会vol.4開催！ (@miso_develop) <a href="https://twitter.com/miso_develop/status/1022327503145189381?ref_src=twsrc%5Etfw">2018年7月26日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ミラー部分の作り方はこちらの記事を参考にさせて頂きました。
[スマートミラーをつくった - Blog.おにぎりたまごうぃんなー](https://s12bt.hatenablog.com/entry/smartMirror)

ちゃんと作って洗面所の鏡に埋め込んだりしたら結構実用的なんじゃないかと思います。
普段から洗面所にGoogle Home Miniは設置してあり、朝の忙しい時間帯に大変活躍しているので、鏡にも情報が出てくれるとより嬉しいですね。



# Clovaから家電操作
夏に[ClovaのSDK（CEK）](https://clova-developers.line.biz/guide/)が公開され、しかも今年の夏はかなりの猛暑だったため、すぐさま家電操作スキルを作ってエアコンをClovaから音声操作できるようにしてみました。
※当時「[Clova Friends Dock](https://clova.line.me/clova-friends/dock/)」が未発売でしたが、今はこれを使ってしまえば基本的な家電操作は楽勝です。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">今日ちょっと暑すぎなのでClovaさんにエアコンつけてもらえるようにした。<a href="https://twitter.com/hashtag/clova?src=hash&amp;ref_src=twsrc%5Etfw">#clova</a> <a href="https://twitter.com/hashtag/clova_cek?src=hash&amp;ref_src=twsrc%5Etfw">#clova_cek</a> <a href="https://twitter.com/hashtag/%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#スマートスピーカー</a> <a href="https://t.co/ODMv3k3yfe">pic.twitter.com/ODMv3k3yfe</a></p>&mdash; 田中みそ (@miso_develop) <a href="https://twitter.com/miso_develop/status/1018030755237097473?ref_src=twsrc%5Etfw">2018年7月14日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


Firebaseから先の家電操作の仕組みは既に構築済みのものを利用しているため、Clovaからスキルを通してFirebaseへ書き込むまでを実装しています。

[Clovaに話しかけて家電を操作してみる](https://qiita.com/miso_develop/items/f3eb644b8816b41f6792)
![image](https://camo.qiitausercontent.com/65dbb41be88c7e97916223c390db321c5f4cda33/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3230373130392f61653665613061632d393262362d353932362d633463352d3436643063383465396163642e706e67)

また「[Clova公式SDK(Node.js)の使い方まとめ](https://qiita.com/miso_develop/items/6b256c1e8757c0ace4a9)」という記事も投稿しており、Node.js版のClova公式SDKの使用方法をまとめています。



# obnizというマイコン対応スキルをリリース
「[obniz](https://obniz.io/)」という国産マイコンがあります。
一般的なマイコンとは違う面白い仕組みをしており、最大の特徴はクラウドにソースを置いて動かせる点です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/207109/904c6817-4704-bc45-f571-e6b446c782d9.png)
言語もArduinoといったマイコンで一般的使わるCっぽい言語ではなく、JavaScriptで実装できます。
Node.jsでも動くので、LambdaやFirebase、HerokuといったFaaSでも動かすことができるので、つまりスマートスピーカースキルでも使えるのです。

マイコンというとデバイスにプログラムやファーム書き込んだり大変なんじゃ…と一見考えてしまいますが、ユーザーの操作としてもobnizにパーツを繋げてスキルへobnizのIDを伝えるだけです。
これはプログラム自体がクラウドにあるからこそ為せる業であり、obnizの革新的なところです。

## 心の音
[LINE BOOT AWARDS](https://www.line-community.me/awards/)のハッカソンに参加した際にチーム開発し、実際にClova、Alexaで一般リリースしたobniz対応スキルがこちらになります。
スキルの内容としてはobnizと接続した心拍センサーから心拍数を取得し、心拍数と一致するテンポの曲をSpotifyから取得したリストから返します。
※Clova版はLINE BOOT AWARDSにて[obniz賞](https://www.wantedly.com/companies/company_9408489/post_articles/143418)を頂きました。

[心の音（Clova）](https://www.line-community.me/awards/workdetail/5b9d2f41851f7463234355cd?fbclid=IwAR3WxOAqzfH457PPPnsai9TCiSQqxr5tTme30qS-sroAGI7BEMBZn6w8XZA)
[心の音（Alexa）](https://www.amazon.co.jp/%E7%94%B0%E4%B8%AD%E3%81%BF%E3%81%9D-%E5%BF%83%E3%81%AE%E9%9F%B3/dp/B07K32CK1Q)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/e28fbf22-37d5-8410-335c-7598dd989c9e.png)

一般リリースできるか半信半疑でスキルを作っていましたが、無事Clova、Alexaにてスキルリリースできました。
スキルリリースにあたってのポイントを以下の記事に記載しています。
[obniz対応スマートスピーカースキルの作り方](https://qiita.com/miso_develop/items/e905606188aea74a65b3)

obnizは様々な電子パーツを制御できるので、上記のスキルのようにセンサーから値を取得するだけではなく、LEDやディスプレイ、モーター制御といったアウトプット動作もスキルからおこなえます。

今漠然と考えているネタの一つに、obnizに繋げたマイクから音を録音するスキルを考えています。
スマートスピーカー自体でも音声は拾ってくれますが、エンドポイントに届くのは音声データではなく文字列です。
しかし別途obnizに接続したマイクから音を拾えば生の音声データが扱えます。

そうしてくると音楽的な用途が広がって、例えば楽器で短いフレーズを録音して、それを共有してセッションするスキル、なんてのも作れるかもしれませんし、鼻歌を歌うと伴奏が返ってくるスキルなんてのも作れるかもしれません。
※録音はレギュレーションに引っかかる可能性が高そうですが…



# Google Homeの1年間のログを分析
昨年10月にGoogle Homeを購入してから1年が経過したので、発話ログを1年分取得し内容を分析してみました。
[Google Homeと暮らした1年間のログを分析してみた](https://qiita.com/miso_develop/items/9a894c2eedf558c4f2c8)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/207109/dd90afea-b2f9-8856-ded4-67e09b908775.png)

内容をまとめると以下のような感じです。

> * ITリテラシーおばあちゃん級でも結構使ってくれる
> * Google Homeは3回に1回はよくわかってない
> * 一日あたり平均37.4回Google Homeに話しかけてる
>     * 1/3は家電操作でこれがメイン
> * 標準機能もわりと使える
>     * 天気、タイマー、アラーム
> * スマートなスピーカーなだけあって音楽用途に強い
>     * 常時稼働してるスピーカーってだけで強い
>     * Spotifyで新たなアーティスト発掘嬉しい

一般的なスマートスピーカーへの興味は昨年の今頃に比べかなり落ちてしまっているように感じますが、丸1年使い続けた結果には結構興味があったようです。
私はスマートスピーカー関係の投稿ばかりしていますがこの記事は久しぶりにそこそこのアクセス（Qiitaトレンド上位にあがったりと）がありました。



# スマートスピーカー対話モデル変換ツールを公開
スマートスピーカースキルは、コンソール画面での対話モデル作成部（インテント/スロット等）と、エンドポイントのコード部と、実装領域が2つに分かれます。

エンドポイントはビジネスロジックを分離して、コントロール部を各プラットフォームのインターフェースに合わせればそれなりに複数プラットフォーム対応は容易ですが、対話モデルはコンソール画面からGUIをポチポチ操作しなければいけません。
また裏側で持つデータ構造も差異があり共有が難しい部分となっています。

そんな対話モデルを各プラットフォーム間でそれぞれの形式に変換するツールを公開しています。

[Dialogflow2AlexaSkillJson (GitHub)](https://github.com/miso-develop/dialogflow2alexa-skill-json)
[Alexa2Clova (GitHub)](https://github.com/miso-develop/alexa2clova)

またこれらのツールの使い方を紹介している記事も投稿しました。
[スマートスピーカースキルの対話モデル変換ツール](https://qiita.com/miso_develop/items/3baf5ac9026403f508b8)

自分で使う部分しか実装していないため、変換対応関係は現状以下の図のようになっています。
![image.png](https://camo.qiitausercontent.com/e1480cdbc5b8fbd58741c8fc63ae509ec3153d7c/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3230373130392f64323337616166342d376664652d356532622d333837302d3964653962336163393362322e706e67)

# スマートスピーカー関連勉強会へ参加/登壇
スマートスピーカーやIoT関連の勉強会やイベントにちょくちょく参加し、今年1年で大体60イベントに参加しました。
月平均5回と、毎週のようになにかしらの勉強会に顔を出していました。
スマートスピーカー界隈の最前線を突っ走る方々との出会いは今年最大の収穫です。

また私の主催する勉強会「[スマートスピーカーを遊びたおす会](https://kotodama.connpass.com/)」や「VUILT」「IoTLT」の他、「[Alexa Dev Summit Tokyo 2018](https://alexadevsummittokyo.splashthat.com/)」とAmazonさん公式のイベントでも登壇させて頂きました。
登壇回数は今年1月にIoTLTで人生初登壇してから合計22回でした。
多くの成長の場を与えて頂けたことにただただ感謝です。

スマートスピーカー界隈の皆様、来年も引き続きよろしくお願い致します。



# おわりに
昨年の時点で音声による家電操作という、自分にとって必要な機能は実装し尽くしていました。
なので今年はスマートスピーカーの可能性を探るような取り組みを主におこなってきました。

結果的にドローン、オリジナルスマートスピーカー、obnizと、スマートスピーカーの外の世界と繋げるIoTな方向へと進んでいきました。
そもそもスマートスピーカー自体がとてもIoTなデバイスですので、必然的な結果であったと思います。

秋に行われたAmazon Hardware Eventでは[電子レンジ、時計、スマートプラグ等](https://www.gizmodo.jp/2018/09/amazon-2018-sept-hardware-event.html)さまざまなAlexa搭載デバイスが発表されました。
Googleの画面付きスマートスピーカー「[Google Home Hub](https://av.watch.impress.co.jp/docs/series/rt/1154103.html)」は名前の通り家電連携の中核を狙っているという話もあります。
LINEからも「[LINE Things](https://engineering.linecorp.com/ja/blog/line-things-developer-trial/)」の発表があり、いずれClovaとの連携もあり得ると思います。
このように各プラットフォームもIoT方面へ領域を広げていっています。

この一年で私の環境をガラっと変化させたスマートスピーカーは愛すべきデバイスであり、来年もその進化を追いかけつつ、私なりのアプローチを行っていければと考えております。