Edited at

Amazon DeeplensとAlexa proactive API で 鯖の寒干しを鳥から守ろうじゃないかl


はじめに

「スマートスピーカーを遊びたおす会 Vol.5」

https://kotodama.connpass.com/event/120483/

呼んでいただいてありがとうございます。


Attention

本日のスライドはQiitaのスライドモードで作っており、説明の中で画面が下スクロールします。



本日のゴール

今日は時間も短いので、AIとAlexa って なんか楽しそうで、なんかできそうだなと思ってもらえることがゴールです。



Who are you?

Tomoharu Itoh(オランダ在住)

https://hugtech.io


  • Alexa Champion.

  • Assisted By Alexa Certified Skill Builder as Subject Matter Expert.

コミュニティ AAJUG(えーじゃぐ)

https://aajug.connpass.com/

(開発してるひともそうでないひとも、機会と話したいひと、みなさん Welcome です)



鯖を監視するに至った背景


  • 海外在住だと日本食が恋しい。

  • 幸いなことに毎週土曜、家の近くに市場が出て、新鮮なお魚が買える。

  • 1週間保存がきくように、干物にしておきたい。



そしてあいつがやってきた。


Version1 自作物干し機(ボール+網)

50586616_10213440426820978_2736226104099471360_n.jpg

流石に無防備すぎた。


Version2(オランダでよく見る自転車のカゴ)

50797736_10213440976274714_2988765340676128768_n.jpg

匂いは防ぎようがなく、あいつがやってきた。


鯖の天敵

Gull_in_water3.jpg



そして、うみねことの戦いが始まった。



鯖を安全に見守るために必要な課題を整理しよう


  • 干してる間、カゴを見とくの辛い。

  • あいつが来たら呼んで欲しい。

  • ちょっと僕を焦らせて欲しい。(SNSで通知来るだけでは私は性格的にスルーする可能性がある)



実現できそうか考えてみよう。


1. そこにあったの。Deeplens。

AWSの提供するAIカメラ。あくまで初心者用。トレーニングすみのモデルが用意されているので、簡単にAIのパワーを体感できる。

スクリーンショット 2019-03-04 22.20.01.png

もちろん、ラズパイとかObnizとか、サードパーティのマイコンにカメラくっつけて、オリジナルのモデルを動かしてもOKです。

(これはまた機会があれば、、、)


2. ころがるスマートスピーカーの山

焦らせてくれそうな声で話してくれれば、、、

52854572_10213641641211212_4015413535470256128_n.jpg


3. ワタシAWSチョットデキル

AWS Lambdaでだいたいなんでもつながるでしょ。。



設計


アクティビティ図

無題の図形描画 (2).png


使うもの的にはこう

無題の図形描画 のコピー.png



さあ、作ってみよう。


Deeplens Object Detection Model

Deeplens にはすでに定義されたモデルがあります。Object Detectionモデルを使ってデプロイします。

スクリーンショット 2019-03-05 10.37.13.png

証明書を入れ込んだりするのが多少面倒ですが、チュートリアルとドキュメントを読んでがんばりましょう。


MQTT

MQTTはデバイス間でメッセージを軽量にやり取りするサブスリプション型のしくみです。

Deeplensにプロジェクトがデプロイされると、MQTTのメッセージバッファ(トピックといいます)も勝手にデプロイされます。

スクリーンショット 2019-03-05 10.38.51.png

鳥(ではないかもしれないが)を検知すると、以下のようなメッセージが飛びます。



{ bird: <percent of confidence> }


AWS IoT Rules

デプロイしたモデルはその他にも、Person(人間)とか、Dining(テーブル)とか、いろいろなものを通知してくるので、鳥だけフィルタしたいのです。そういうときには、AWS IoT Rules が使えます。

先ほどのメッセージをSQLクエリでフィルタできます。今回は 「80%くらいの自信があって鳥だって言ってるなら」 と、設定しました。

そして、クエリにマッチした場合Lambda関数を呼ぶということも同じ画面でポチポチ設定できます。

スクリーンショット 2019-03-05 10.38.01.png


AWS Lambda

AWS IoT Rules から呼ばれるLambda関数です。

後述のAlexa Proactive API をCallするコードです。Callするには、このAPIが許可されたスキルのClientIdとClientSecretが必要です。これは後述します。

スクリーンショット 2019-03-05 10.43.09.png

コードはこちら

https://github.com/haruharuharuby/bird-detect-message-handler


Alexa Proactive API

Proactive APIは、定型句(スキーマといいます) をAlexaデバイスに通知できる機能です。

「荷物が届きました」 とか 「今日はXXXゴミの回収日です」 とか。

定義済みスキーマの一覧

https://developer.amazon.com/ja/docs/smapi/schemas-for-proactive-events.html

Proactive APIでは、通知をカスタマイズできないので、今回は が来たことにします。

AMAZON.WeatherAlert.Activated

なければここからリクエストを送りましょう。みんなが希望していれば届くかもしれません。

https://alexa.uservoice.com/forums/906892-alexa-skills-developer-voice-and-vote


Alexa Skill

Alexa Skill で、Proactive API を使うように構成します。

Alexaのデベロッパーコンソールで、「アクセス権限」 のところに、ClientIdとClientSecretがあります。

前の章で出てきたLambdaのコードで利用します。

スクリーンショット 2019-03-05 10.50.41.png

一回何かしらの情報取得を有効にしないとメッセージングの項目が出て来ないことがあります。


Skill Manifest

通知は、SkillのマニフェストにPermissionブロックとEventsブロックを記載して、許可してあげる必要があります。

スクリーンショット 2019-03-05 11.00.11.png

後日談として、当初 AWS CodeStarというサービスの中にAlexa Skillのテンプレートがあり、それでスキルを作ろうとしていたのですが、Manifest がデプロイされないので、やむなくASK CLIでやっています)

Note:

JAWS DAYS 2019 において 「CodeStarでアレクサ スキルでTwillioで電話かけてお金を払わせる」 ハンズオンの資料があります。 CodeStarに興味があればどうぞ。

https://qiita.com/motchi0214/items/a95335679ee7e9d0b660


Alexa App

Alexa の DeveloperConsoleでの作業を終えて、Skillをデプロイして、Alexa Appを見ると、「設定」→「通知」のところに該当するスキルが出てきます。 通知を有効にします。 (開発中だったので、名前がhello nodeになってます)

スクリーンショット 2019-03-05 11.02.51.png

スクリーンショット 2019-03-05 11.02.58.png

モバイルアプリでは、画面遷移しないことがあります。そのときは、Webブラウザからアクセスします。


スキルで通知を許可

最後にスキル側でも、通知を許可します。(開発中だったので、名前がhello nodeになってます)

スクリーンショット 2019-03-05 11.04.43.png

コードはこちら

https://github.com/haruharuharuby/server-room



実際の映像はこちら

https://www.youtube.com/watch?v=LAIqYFEcx1E

テストように、フィルタのパラメータを以下としています。

select person from '<<topic-filter>>' where person > 0.400

実際はこうです。

select bird from '<<topic-filter>>' where bird > 0.800

英語で試していますが、もちろん日本語でもできます。



Alexa Day 2019

それでは4月6日に神戸でお会いしましょう!(ちがうって)

https://alexaday2019.aajug.jp/

スクリーンショット 2019-03-05 10.51.29.png



ありがとうございました!