5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

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

by haruharuharuby
1 / 14

はじめに

「スマートスピーカーを遊びたおす会 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


実際の映像はこちら

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

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


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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
5
Help us understand the problem. What are the problem?