Slide 1

Slide 1 text

Amazon Echoでduelする show : 主催者 2018/06/26 スマートスピーカーを遊びたおす会 at IIJ

Slide 2

Slide 2 text

このセッションでは ・資料を公開するつもりなので無理にメモらなくて良いです ・#スマートスピーカーを遊びたおす会 でツイートをお願いします ・生暖かい目でご覧ください

Slide 3

Slide 3 text

自己紹介 Twitter: @surumegohan Blog: https://surumegohan.hatenablog.com Web: https://smartmacchiato.life/ show

Slide 4

Slide 4 text

経歴 修士卒で大手SIerに入社 → SESで大手SIerにDBAとして常駐 → 中堅Web系企業でDBA兼QAエンジニア → VUI(スマートスピーカー)やりたくて無職なぅ ここ数週間はduelist

Slide 5

Slide 5 text

公開済みのスマートスピーカーのアプリ(1/2)

Slide 6

Slide 6 text

SmartHacksさんでランクイン ~Alexaスキル~

Slide 7

Slide 7 text

SmartHacksさんでランクイン ~Google Assistant~

Slide 8

Slide 8 text

Google社で流した光と闇を垣間見る動画 ※なぜか、たいていの人は闇から試す 人によっては闇ばかり試す 動画はこちらにアップしました https://youtu.be/xNT4orKvpgc

Slide 9

Slide 9 text

公開済みのスマートスピーカーのアプリ(2/2) Amazon Alexa スキル「IT業界の深い闇」 ・話しかけるとIT業界の深い闇について垣間見ることができる ・闇を垣間見たその場で、「いいね」「いまいち」等のフィードバックが声でできる ・SDKをいじってDynamoDBにフィードバックを保存している

Slide 10

Slide 10 text

深い闇が記事になってた

Slide 11

Slide 11 text

ところで 本日は・・ スマートスピーカーを遊びたおす会

Slide 12

Slide 12 text

ところで スマートスピーカーを遊びたおす会

Slide 13

Slide 13 text

ところで スマートスピーカーを遊びたおす会 → 遊びたおす

Slide 14

Slide 14 text

ところで スマートスピーカーを遊びたおす会 → 遊びたおす → 遊ぶ

Slide 15

Slide 15 text

ところで スマートスピーカーを遊びたおす会 → 遊びたおす → 遊ぶ → 遊戯

Slide 16

Slide 16 text

ところで スマートスピーカーを遊びたおす会 → 遊びたおす → 遊ぶ → 遊戯 → 遊〇王

Slide 17

Slide 17 text

気づいてしまった 声でduelできるんじゃね?

Slide 18

Slide 18 text

なので Amazon Echoで duelしてみた カードゲームで戦ってるようにしてみた

Slide 19

Slide 19 text

使ったモノの数々 ■物理的なモノ ・(RaspberryPi3B & HDMIモニタ)×3セット ・カテゴリ6aのLANケーブル 3本 ・Amazon Echo Plus ※Plusの独自機能は未使用 ■ソフト的なモノ■ ・Alexa Skill - sdk v2 ・AWS Lambda - Node.js 8.10 ・AWS IoT – AWSIoTPythonSDK Python 2.7 ※ラズパイのデフォルト

Slide 20

Slide 20 text

構成図 プレイヤー Amazon Echo Lambda IoT Shadow RaspberryPi RaspberryPi RaspberryPi

Slide 21

Slide 21 text

肝となるAWS IoTの機能 ~デバイスシャドウ~ ・Things(今回はラズパイ)に紐づくJSONのこと ・このJSONを通して非同期に通信する ・Reported(デバイス用)とDesired(アプリ用)の2つの状 態を持つ ・ReportedとDesiredに差分がでると、Delta属性がJSONに付 与されて、メッセージが発信される

Slide 22

Slide 22 text

デバイスシャドウの例 ・AWS IoTの「シャドウ」でdesiredとreportedを記載

Slide 23

Slide 23 text

デバイスシャドウの例 ・desiredのfooの値を1に変えて保存すると差分としてdeltaが 自動的に生成される

Slide 24

Slide 24 text

デバイスシャドウの例 ・hogeを消したい場合は null に設定して保存する ※ hogeの行を削除して保存しても削除されず復活する・・・

Slide 25

Slide 25 text

今回どうしたか ・画像のファイル名をそのまま設定 delta(差分)にファイル名が直に出力されるようにすれば、 そのまま取得して、xdg-openコマンドの引数として実行できる

Slide 26

Slide 26 text

というわけで動かしました 動画を撮りました duelに15分かかったのでダイジェスト版 https://youtu.be/BYkLmGYGCdk

Slide 27

Slide 27 text

ここから設計の話

Slide 28

Slide 28 text

やったことリスト 1. 遊〇王劇場版の5回のduelのやりとりを文字に起こす 2. duelに動きがあるキーワードの言葉をまとめる 3. 声で操作することを念頭に状態遷移表を描く → 今回はハッピーパスが複雑すぎる 4. 必要なIntent(ユーザの発話)とSlotを定める 5. sessionAttributeを列挙 ※ 逐一変化する状況の管理 6. 必要な画像を想定する

Slide 29

Slide 29 text

アニメを文字にしたらこうなる

Slide 30

Slide 30 text

sessionAttributeがこうなる ※設計はしたが実装はかなり妥協して減らしました

Slide 31

Slide 31 text

ここから苦労話

Slide 32

Slide 32 text

苦労話4点 1. そもそもduelがスタートできない 2. Intent(ユーザの発話)がありすぎる 3. 誤認識に対応するslotが増える 4. 通信が不安定すぎて画像が表示されない

Slide 33

Slide 33 text

苦労話1: そもそもduelがスタートできない 「アレクサ、デュ〇ルをスタート」が認識されない → duelという英単語がそもそもレアケース → 同音の日本語も存在しない → 15回くらい話しかけてようやく1回認識する → 延々と「わかりませんでした」と言われる

Slide 34

Slide 34 text

解決法 シミュレーターを表示させて 「デュ〇ルをスタート」を20回話しかけて、Alexaがど う認識したのかテキストで確認する →呼び出し名「どうやろう」が一番認識率が高い ※「デュ〇ル」の単語のみでやっても意味がなかった

Slide 35

Slide 35 text

苦労話2:Intentありすぎ 1.俺のターン 2.僕のターン 3.ターン終了 4.ターン終了を了承 5.手札のN枚目を選択 6.伏せてあるN枚目を選択 7.召喚したN枚目を選択 8.狙う相手がN枚目か選択 9.トラップで割り込む 10.カードの効果を語る 11.攻撃 12.直接攻撃 13.発動 14.召喚する 15.伏せる 16.悔しがる

Slide 36

Slide 36 text

妥協 ゲームに制約として最大値を設けて妥協 ・手札の数 ・伏せられる数 ・召喚できる数

Slide 37

Slide 37 text

苦労話3: 誤認識をさけるためのslotが増える 例1:ターン 1.ターン 2.タウン 3.豚 4.父 5.トン 6.アマゾン 例2:手札 1.手札 2.fだ 3.って下 4.って二 5.十二 6.てふだ 例3:現れろ 1.現れろ 2.現れよ 3.新悪いよ 4.やろ 5.現れやろ 6.新ろ

Slide 38

Slide 38 text

解決法 ・使用するセリフを絞る ・テスト画面でAlexaがどのように誤認識するか最低3回 話しかける ・それでもダメな時はエラーにして再度発話させる

Slide 39

Slide 39 text

苦労話4: 通信が不安定すぎて画像が反映されない ・非同期で通信しているので、画面が反映される まで待っていられない → 待っているとAlexaが発話して8秒経ってしまう ・無線の調子がよくない場合がある → 集合住宅あるある? → RaspberryPi3Bの無線がそもそもイマイチ説

Slide 40

Slide 40 text

解決法 ・Alexaの発話メッセージに「間」を微妙に挟んで実質的に8秒 以上稼ぐ ※悪手 → ‘〇〇しました。’ ・なるべく安定した通信ができる手段をとる → 無線より有線にする → 今回は有線LAN 1000Mbps対応の物理穴から カテゴリ6aのLANケーブルでラズパイに接続した ※ RaspberryPi3Bの有線は1000Mbps未対応

Slide 41

Slide 41 text

苦労しなかった話: カードの効果を長く語る 「FF外(えふえふがい)から失礼の効果により、 140文字しかないのにリソースを使い、 相手の召喚は維持できなくなる」

Slide 42

Slide 42 text

解決法: 説明用のインテントに {explain} {any} スロットをいれる

Slide 43

Slide 43 text

{explain} {any} スロットの中身 ■explain ・効果により ・こう歌により ・後かにより ・もこう歌により ■any ・ほげほげ ・ほげほげほげほげほげほげほげ

Slide 44

Slide 44 text

つまり ■explain ・効果により ・こう歌により ・後かにより ・もこう歌により ■any ・ほげほげ ・ほげほげほげほげほげほげほげ えふえふ外から失礼の{explain} {any} Alexaは定義されているワードの中でどれに一番近いかよしなに判断してくれる

Slide 45

Slide 45 text

無駄に本気で 遊びたおしました

Slide 46

Slide 46 text

宣伝 • スマートスピーカーのロゴマークを(勝手に)作りました • 各社に依存しないようなデザインにしてます • 無償公開しておくので使ってあげてください • 加工や商用利用も原則可です https://github.com/surumegohan/smartspeaker/tree/master/logo IT業界イベントで登壇者がもらえる ワタシハ 〇〇 チョットデキル のスマスピ版Tシャツも作りました ※1着3000円ちょい 2018年6月20日時点

Slide 47

Slide 47 text

大事なこと ・デュ〇ルはカードが大事 ・勉強会も入館カードが大事 入館カードは必ず返却 してください!!

Slide 48

Slide 48 text

主に参考にしたサイト ・Amazon Echo で TVリモコン操作への道 (RPizero & AWSIoT & Lambda & AlexaSkill) 前編 https://qiita.com/toguma/items/57d6faed119c41bd4332 ・AWS IoT Device SDK for Pythonを使ってRaspberryPiとAWS IoTをつないでみる https://dev.classmethod.jp/hardware/raspberrypi/aws-iot-device-sdk-for-python- raspberrypi-aws-iot/ ・AWSの公式ドキュメントの数々 適宜ご確認ください。

Slide 49

Slide 49 text

ターンエンドだ!!