2018年6月26日開催の「スマートスピーカーを遊びたおす会」で登壇した資料に参考サイトのリンクと、動画のリンクを付与しました
https://kotodama.connpass.com/event/89650/
Amazon Echoでduelするshow : 主催者2018/06/26スマートスピーカーを遊びたおす会 at IIJ
View Slide
このセッションでは・資料を公開するつもりなので無理にメモらなくて良いです・#スマートスピーカーを遊びたおす会でツイートをお願いします・生暖かい目でご覧ください
自己紹介Twitter: @surumegohanBlog: https://surumegohan.hatenablog.comWeb: https://smartmacchiato.life/show
経歴修士卒で大手SIerに入社→ SESで大手SIerにDBAとして常駐→ 中堅Web系企業でDBA兼QAエンジニア→ VUI(スマートスピーカー)やりたくて無職なぅここ数週間はduelist
公開済みのスマートスピーカーのアプリ(1/2)
SmartHacksさんでランクイン ~Alexaスキル~
SmartHacksさんでランクイン ~Google Assistant~
Google社で流した光と闇を垣間見る動画※なぜか、たいていの人は闇から試す 人によっては闇ばかり試す動画はこちらにアップしましたhttps://youtu.be/xNT4orKvpgc
公開済みのスマートスピーカーのアプリ(2/2)Amazon Alexa スキル「IT業界の深い闇」・話しかけるとIT業界の深い闇について垣間見ることができる・闇を垣間見たその場で、「いいね」「いまいち」等のフィードバックが声でできる・SDKをいじってDynamoDBにフィードバックを保存している
深い闇が記事になってた
ところで本日は・・スマートスピーカーを遊びたおす会
ところでスマートスピーカーを遊びたおす会
ところでスマートスピーカーを遊びたおす会→ 遊びたおす
ところでスマートスピーカーを遊びたおす会→ 遊びたおす→ 遊ぶ
ところでスマートスピーカーを遊びたおす会→ 遊びたおす→ 遊ぶ→ 遊戯
ところでスマートスピーカーを遊びたおす会→ 遊びたおす→ 遊ぶ→ 遊戯→ 遊〇王
気づいてしまった声でduelできるんじゃね?
なのでAmazon Echoでduelしてみたカードゲームで戦ってるようにしてみた
使ったモノの数々■物理的なモノ・(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 ※ラズパイのデフォルト
構成図プレイヤーAmazon EchoLambda IoT ShadowRaspberryPi RaspberryPiRaspberryPi
肝となるAWS IoTの機能 ~デバイスシャドウ~・Things(今回はラズパイ)に紐づくJSONのこと・このJSONを通して非同期に通信する・Reported(デバイス用)とDesired(アプリ用)の2つの状態を持つ・ReportedとDesiredに差分がでると、Delta属性がJSONに付与されて、メッセージが発信される
デバイスシャドウの例・AWS IoTの「シャドウ」でdesiredとreportedを記載
デバイスシャドウの例・desiredのfooの値を1に変えて保存すると差分としてdeltaが自動的に生成される
デバイスシャドウの例・hogeを消したい場合は null に設定して保存する※ hogeの行を削除して保存しても削除されず復活する・・・
今回どうしたか・画像のファイル名をそのまま設定delta(差分)にファイル名が直に出力されるようにすれば、そのまま取得して、xdg-openコマンドの引数として実行できる
というわけで動かしました動画を撮りましたduelに15分かかったのでダイジェスト版https://youtu.be/BYkLmGYGCdk
ここから設計の話
やったことリスト1. 遊〇王劇場版の5回のduelのやりとりを文字に起こす2. duelに動きがあるキーワードの言葉をまとめる3. 声で操作することを念頭に状態遷移表を描く→ 今回はハッピーパスが複雑すぎる4. 必要なIntent(ユーザの発話)とSlotを定める5. sessionAttributeを列挙 ※ 逐一変化する状況の管理6. 必要な画像を想定する
アニメを文字にしたらこうなる
sessionAttributeがこうなる※設計はしたが実装はかなり妥協して減らしました
ここから苦労話
苦労話4点1. そもそもduelがスタートできない2. Intent(ユーザの発話)がありすぎる3. 誤認識に対応するslotが増える4. 通信が不安定すぎて画像が表示されない
苦労話1:そもそもduelがスタートできない「アレクサ、デュ〇ルをスタート」が認識されない→ duelという英単語がそもそもレアケース→ 同音の日本語も存在しない→ 15回くらい話しかけてようやく1回認識する→ 延々と「わかりませんでした」と言われる
解決法シミュレーターを表示させて「デュ〇ルをスタート」を20回話しかけて、Alexaがどう認識したのかテキストで確認する→呼び出し名「どうやろう」が一番認識率が高い※「デュ〇ル」の単語のみでやっても意味がなかった
苦労話2:Intentありすぎ1.俺のターン2.僕のターン3.ターン終了4.ターン終了を了承5.手札のN枚目を選択6.伏せてあるN枚目を選択7.召喚したN枚目を選択8.狙う相手がN枚目か選択9.トラップで割り込む10.カードの効果を語る11.攻撃12.直接攻撃13.発動14.召喚する15.伏せる16.悔しがる
妥協ゲームに制約として最大値を設けて妥協・手札の数・伏せられる数・召喚できる数
苦労話3:誤認識をさけるためのslotが増える例1:ターン1.ターン2.タウン3.豚4.父5.トン6.アマゾン例2:手札1.手札2.fだ3.って下4.って二5.十二6.てふだ例3:現れろ1.現れろ2.現れよ3.新悪いよ4.やろ5.現れやろ6.新ろ
解決法・使用するセリフを絞る・テスト画面でAlexaがどのように誤認識するか最低3回話しかける・それでもダメな時はエラーにして再度発話させる
苦労話4:通信が不安定すぎて画像が反映されない・非同期で通信しているので、画面が反映されるまで待っていられない→ 待っているとAlexaが発話して8秒経ってしまう・無線の調子がよくない場合がある→ 集合住宅あるある?→ RaspberryPi3Bの無線がそもそもイマイチ説
解決法・Alexaの発話メッセージに「間」を微妙に挟んで実質的に8秒以上稼ぐ ※悪手→ ‘〇〇しました。’・なるべく安定した通信ができる手段をとる→ 無線より有線にする→ 今回は有線LAN 1000Mbps対応の物理穴からカテゴリ6aのLANケーブルでラズパイに接続した※ RaspberryPi3Bの有線は1000Mbps未対応
苦労しなかった話:カードの効果を長く語る「FF外(えふえふがい)から失礼の効果により、140文字しかないのにリソースを使い、相手の召喚は維持できなくなる」
解決法:説明用のインテントに {explain} {any} スロットをいれる
{explain} {any} スロットの中身■explain・効果により・こう歌により・後かにより・もこう歌により■any・ほげほげ・ほげほげほげほげほげほげほげ
つまり■explain・効果により・こう歌により・後かにより・もこう歌により■any・ほげほげ・ほげほげほげほげほげほげほげえふえふ外から失礼の{explain} {any}Alexaは定義されているワードの中でどれに一番近いかよしなに判断してくれる
無駄に本気で遊びたおしました
宣伝• スマートスピーカーのロゴマークを(勝手に)作りました• 各社に依存しないようなデザインにしてます• 無償公開しておくので使ってあげてください• 加工や商用利用も原則可ですhttps://github.com/surumegohan/smartspeaker/tree/master/logoIT業界イベントで登壇者がもらえるワタシハ 〇〇 チョットデキルのスマスピ版Tシャツも作りました※1着3000円ちょい 2018年6月20日時点
大事なこと・デュ〇ルはカードが大事・勉強会も入館カードが大事入館カードは必ず返却してください!!
主に参考にしたサイト・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の公式ドキュメントの数々適宜ご確認ください。
ターンエンドだ!!