Software development AWS MQTT on STM32

For this project I have to do MQTT middleware integration, and I’m looking for help to integrate the different libraries. The MCU has to be able to exchange information with a MQTT broker (AWS IoT), via a GSM connection. Development hardware : STM32F103 MCU (Nucleo-F103RB development board) … 続きを読む

アマゾン、エッジデバイス向けに6つのIoTサービス群を発表

実世界のIoTデータは多くの場合、大きな欠陥や壊れたメッセージ、間違ったデータが含まれるため、独自にカスタムのIoT分析ソリューションを構築するか、サードパーティのソリューションを統合する必要がある。 そこで、新たに発表されたAWS IoT Device ManagementとAWS IoT Device Defenderにより、IoTデバイス群のオン … 続きを読む

re:Invent 2017にみるAWSとクラウドの進化する方向性

11月27日から12月1日までの5日間にわたり、ラスベガスに4万3,000人の人を集めたAWSの年次イベント”re:Invent 2017”。AWS CEOのAndy JassyやAmazon CTOのWerner Vogelsなどのキーノートでは、今年もさまざまな真サービスが発表されました。仮想環境の管理を用意にするKubernetesをマネージド型で提供するサービスやサーバーレスのデータベースサービス、マシンラーニングのモデル構築から学習、デプロイ、API化まで一気通貫でサポートするサービスなどオンラインメディアからピックアツプして紹介します。

※下記サイトからの転載。ビッグデータ・AIなどに関するトピックを毎週取り上げています。
TechCrowd: https://www.techcrowd.jp/related/

クラウドは次のフェーズへ――、「AWS re:Invent 2017」でアンディ・ジャシーCEOが示した5年間の総決算

クラウドWatchのre:Invent 2017のレポート記事です。Andy Jassyのキーノートで発表された新サービスを紹介しながら、AWSが描こうとしているあらたなクラウドの世界を展望してくれています。

まずは、各種メディアでも今年のre:Invent 2017での新サービス発表の中でも一番にとりあげられている「Amazon Elastic Container Service for Kubernetes(Amazon EKS)」。Kubernetesのマネージドサービスであり、ユーザーのVPC内でコンテナが稼働するインスタンスを起動できるほか、CloudTrailやCloudWatch、ELB(Elastic Load Balancing)といったAWSのさまざまなサービスとKubernetesのスムーズな連携が可能です。

Andy Jassy CEOはキーノートの中で、「インスタンス」「コンテナ」「サーバーレス」の3つのアーキテクチャをAWSのコンピュートリソースとして位置づけ。クラウドの基盤を支えるアーキテクチャがインスタンスという仮想サーバだけだった時代からコンテナやサーバーレスまで含むものにはっきりと拡張してきていることを感じさせます。

次に、Andy Jassy CEOがとりあげたのはデータベース。プロプライエタリなRDBからの解放、データベースの自由を実現するものとして、AWSの各種データベース機能に関する新サービスを発表。その中でももっとも注目を集めたのはAurora Multi-Master。リード重視のAuroraがリード/ライトの両方でスケールできるようになるとのこと。現時点ではシングルリージョン/マルチマスターのみのプレビュー提供だが、Andy Jassy CEOは「2018年の早い段階でマルチリージョン/マルチマスタに対応する」とのべています。

データアナリティクスをより効率的にするものとして発表されたのが、「Amazon S3 Select」と「Amazon Glacer Select」。いずれも必要なオブジェクトデータのみを標準的なSQLを使ってフィルタリング(SELECT)する機能。オブジェクト全体にアクセスする必要がなくなるため、データアクセスのパフォーマンスが最大400%と劇的に向上するとのこと。S3やGlacerが単なるオブジェクトストレージからデータレイクへと進化しつつあることを示す機能追加です。

また、マシンラーニングをより身近な存在とする新サービスもいろいろ発表されています。もっとも注目されているのが”Amazon SageMaker”。マシンラーニングのモデル構築から学習、デプロイ、API化まで一気通貫でサポートするスケーラブルなマネージドサービス。(GA、バージニア/オレゴン/オハイオ/アイルランド)

モデル作成にはデータサイエンスで標準的に使われているJupyter Notebook環境をワンクリックで設定できるほか、トレーニングもデプロイもワンクリックで利用可能。まさにオールインワンのマシンラーニングサービスとのことです。

AWSのSageMakerを使えばふつうのデベロッパーが機械学習のモデルを作れる

TechCrunshのre:Invent 2017レポート記事で、特に機械学習のモデル制作プロセスを管理するためのフレームワークを提供し、そのプロセスに含まれる複雑面倒な部分を取り去る Amazon SageMakerに焦点をあてたものです。

この新しいツールには、三つの主要部分「Notebook」「Jobs」「Models」があるとのこと。Notebookはオープンソースの標準的なツールJupyter Notebooksを使って、モデルのベースとなるデータを概観し整理する。

re:Inventのステージで、Andy Jassy CEOはSageMakerの柔軟性を強調。すぐに簡単に使えるツールとして使ってもよいし、自分のフレームワークを持ち込んでもよい。どちらの場合でも、そしてソースが何であっても、サービスはもっともポピュラーなアルゴリズム向けに調整されているとのこと。

Amazon、re:inventカンファレンスでグラフDB、Neptune発表

TechCrunshのre:Invent 2017レポート記事で、特にAWSの新しいデータベース、Amazon Neptuneに焦点をあてたものです。Amazon Neptuneは、グラフ関係の処理を目的としたサービス。サービスにソーシャルネットワーク的要素を組み込もうとしているならこのデータベースは役に立つかもしれません。

伝統的なリレーショナルDBの問題点は、もともと複雑なソーシャルグラフを扱うようにデザインされていないこと。そのためRDBでは友達関係やフォロー関係のリストを扱うのが難しく、ソーシャルグラフから共通の友達を抽出しようとすると、そのたびにきわめて複雑なクエリーを発行する必要がありました。

Neptuneは数十億に上るソーシャル関係を処理するために最適化されており、複雑なソーシャルグラフも高速に処理し、一つのクエリーを処理するのに1000分の1秒単位の時間しかかからないとのこと。

AWS re:Invent 2017、データベースもサーバーレスの時代へ

週刊BCNのre:Invent 2017レポート記事。数多くの新サービスが発表されていくなかで、
最も盛り上がったのがデータベース関連の新サービスとのことで、「Amazon Aurora Serverless」などを紹介しています。

「Amazon Aurora Serverless」は、利用した分だけ課金されるサーバーレスのリレーショナルデータベース。インスタンスの管理が不要で、自動でスケール。サーバーレスサービスの「AWS Lambda」と同様、閾値などをトリガーにSQL文を実行するなど、まずはIoT分野での活用が想定されるとのこと。また、クラウドネイティブなシステムにおいても、サーバーレスの特徴を生かした活用方法に期待が高まるとのことです。

続きを読む

AWS IoTのThing Shadowを気軽に試してみる with mosquitto

AWS IoTを色々と試してはいたのですが、よく目にするThing Shadowに関しては説明文だけではいまいちピンときませんでした。とりあえずshadowを触ってみたら、仕組みや出来ることのイメージがつきました。
簡単に要点を5つ書きます。

  • Thing Shadowは、デバイスの状態を管理することのできる機能。
  • Thing Shadowで使えるtopic名は、あらかじめ決まっている。(記事投稿時点で、11個⇒一応全部試した結果を下に書きました)
  • Thing Shadowへデバイスの状態を送るには、JSON形式で”state”セクションを記述したものをpublishする。
  • 上記”state”セクションには、デバイスの現在の状態を通知するための”reported”セクションと、デバイスへの指示を通知するための”desired”セクションが存在する。
  • Thing Shadowへのsubscribeによって受け取ったJSONファイルには、デバイスの状態”state”の他、タイムスタンプなどの”metadata”が含まれる。

ここでは気軽にmosquittoを使って試した結果を載せます。

前提条件は、
・mosquitto-clientsを利用して、AWS IoTとのPub/Subができていること
https://qiita.com/TKYK38/items/2ca19b27503f6e0dfc84
です。

AWSコンソールでシャドウドキュメントを開いておく

これを開きながら作業すると、状態が更新されていくところがよく理解できます。
(IoTコンソール > 管理 > モノ > シャドウ で開けます)
shadow_mod.png

publish用のサンプルスクリプト

pub.shadow.sh
#!/bin/bash

endpoint=`aws iot describe-endpoint`

keydir=/home/ubuntu/iot_sdk

### update
topic=$aws/things/EC2_ubuntu/shadow/update

### get
#topic=$aws/things/EC2_ubuntu/shadow/get

### delete
#topic=$aws/things/EC2_ubuntu/shadow/delete

#ifile=shadow.desired.json
ifile=shadow.reported.json

mosquitto_pub --cafile ${keydir}/root-CA.crt --cert ${keydir}/EC2_ubuntu.cert.pem --key ${keydir}/EC2_ubuntu.private.key -h "${endpoint}" -p 8883 -q 1 -t ${topic} -i mosquitto_pub -f ${ifile}

subscribe用のサンプルスクリプト

sub.shadow.sh
endpoint=`aws iot describe-endpoint`

keydir=/home/ubuntu/iot_sdk

topic=$aws/things/EC2_ubuntu/shadow/update
#topic=$aws/things/EC2_ubuntu/shadow/update/accepted
#topic=$aws/things/EC2_ubuntu/shadow/update/documents
#topic=$aws/things/EC2_ubuntu/shadow/update/rejected
#topic=$aws/things/EC2_ubuntu/shadow/update/delta
#topic=$aws/things/EC2_ubuntu/shadow/get
#topic=$aws/things/EC2_ubuntu/shadow/get/accepted
#topic=$aws/things/EC2_ubuntu/shadow/get/rejected
#topic=$aws/things/EC2_ubuntu/shadow/delete
#topic=$aws/things/EC2_ubuntu/shadow/delete/accepted
#topic=$aws/things/EC2_ubuntu/shadow/delete/rejected

mosquitto_sub --cafile ${cadir}/root-CA.crt --cert ${keydir}/tmp.cert.txt --key ${keydir}/tmp.private.txt -h "${endpoint}" -p 8883 -q 1 -t ${topic}

デバイス状態を通知するためのJSONサンプル

shadow.reported.json
{
    "state" : {
        "reported" : {
            "color" : "yellow",
            "power" : "on"
         }
     }
}

デバイスへ指示(状態更新)するためのJSONサンプル

shadow.desired.json
{
    "state" : {
        "desired" : {
            "color" : "red",
            "power" : "on"
         }
     }
}

デバイス状態の更新 /update

/update/accepted をsubした状態で、/updateへshadow.reported.jsonをpubする

以下のようなJSONをsubscribeできる。

{"state":{"reported":{"color":"yellow","power":"on"}},"metadata":{"reported":{"color":{"timestamp":1512807898},"power":{"timestamp":1512807898}}},"version":13,"timestamp":1512807898}

/update/documents をsubした状態で、/updateへshadow.reported.jsonをpubする

以下のようなJSONをsubscribeできる。

{"previous":{"state":{"desired":{"color":"red","power":"on"},"reported":{"color":"blue","power":"on"}},"metadata":{"desired":{"color":{"timestamp":1512805884},"power":{"timestamp":1512805884}},"reported":{"color":{"timestamp":1512808170},"power":{"timestamp":1512808170}}},"version":17},"current":{"state":{"desired":{"color":"red","power":"on"},"reported":{"color":"blue","power":"on"}},"metadata":{"desired":{"color":{"timestamp":1512805884},"power":{"timestamp":1512805884}},"reported":{"color":{"timestamp":1512808184},"power":{"timestamp":1512808184}}},"version":18},"timestamp":1512808184}

/update/rejected をsubした状態で、/updateへshadow.reported.jsonをpubする

例えば、”reported”を”report”と変更し、pubしてみると、以下のようなエラー(JSON)をsubscribeできる。

{"code":400,"message":"State contains an invalid node: 'report'"}

/update/delta をsubした状態で、/updateへshadow.reported.jsonをpubする

reportedとdesiredの差分がある場合にsubscribeできる。

{"version":21,"timestamp":1512808331,"state":{"color":"red"},"metadata":{"color":{"timestamp":1512805884}}}

デバイス状態の取得 /get

/get/accepted をsubした状態で、/getへメッセージをpubする

/getへpubすると、desiredとreported両方の情報をsubscribeできる。
(/getへpubするメッセージは何でもよい。)

{"state":{"desired":{"color":"red","power":"on"},"reported":{"color":"yellow","power":"on"}},"metadata":{"desired":{"color":{"timestamp":1512805884},"power":{"timestamp":1512805884}},"reported":{"color":{"timestamp":1512808392},"power":{"timestamp":1512808392}}},"version":23,"timestamp":1512808573}

/get/rejected をsubした状態で、/getへメッセージをpubする

shadowが存在しない状態で、/getへpubすると、以下のようなエラー(JSON)をsubscribeできる。

{"code":404,"message":"No shadow exists with name: 'EC2_ubuntu'"}

デバイス状態の削除 /delete

/delete/accepted をsubした状態で、/deleteへメッセージをpubする

shadowが削除されると、以下のようなJSONをsubscribeできる。

{"version":23,"timestamp":1512809286}

/delete/rejected をsubした状態で、/deleteへメッセージをpubする

shadowが存在しない状態で、shadowを削除しようとすると、以下のようなエラー(JSON)をsubscribeできる。

{"code":404,"message":"No shadow exists with name: 'EC2_ubuntu'"}

参考情報

AWS IoTの開発者ガイドです。
Thing Shadow の MQTT トピック

続きを読む

AWS DeepLensのトレーニング済みサンプルモデル全部試す!

こんにちは。からっきーです。
IoTLT Advent Calendar 2017の7日目の記事です!

先週ラスベガスで開催されたAWSのカンファレンスre:Inventに参加してきました。

キーノートではたくさんの新サービスや新機能が発表されて盛り上がっていたことをご存じの方もいるかもしれませんが、その中でAWS DeepLensというものも発表されました。

DeepLensはサービス名でもあり、そのサービスで使用するデバイス名でもあります。
これを使うことでなにが嬉しいのかを簡単に説明すると、カメラで撮影した映像のエッジ解析をよりビジネスロジックに集中して実現することができる、といったところでしょうか。
ハードウェアの設計、セッティング、学習モデルのデプロイ、クラウドとの連携といった部分をAWSでマネージしてくれていて、開発者は学習モデルの開発と解析したデータの使い方を考えることに注力できます。

AWS公式の説明ブログ

未発売!これが激レアのDeepLens

DeepLensデバイスはre:Inventで実施されたワークショップに参加した人だけに配布されたもので、なかなかレア度が高いです。
日本にも数個しか存在していないのでは・・

実際のブツはこんな感じ。
下の部分がコンピュータになっていて上にでている黒い部分がカメラです。

deeplens-1-825x510.png

なんとも愛着の湧くフォルムをしたこの子ですが、中身は立派なコンピュータ。

スクリーンショット 2017-12-07 02.22.29.png

Amazon.comでは2018/4/14に発売開始されるそうでお値段は$249!!
商品ページ

学習モデル、ファンクション、出力データ

機器の初期セットアップはこちらを参考にしてみてください。

セットアップが終わったら、あとは学習モデルとファンクションをDeepLensに流し込むだけです。

学習モデルは、こちらもre:Inventで新しく発表されたSageMakerというものを使ってよりシンプルに作れるようになったみたいです。しかしながらまだ学習モデルを作るというところまで私ができないため、最初から幾つか用意されているサンプルを使用します。

ファンクションは、学習モデルの実行と、推論した結果をどうするのか、ということが書かれたLambda Functionです。

推論されたデータアウトプットは、AWSのブログを見ると、AWS IoTにパブリッシュしたり、S3に保存したり、映像をkinesisに流し込んだりなどしてますね。

サンプルプロジェクトを試してみる!

AWSコンソールからDeepLensのページに行くと、予め以下のプロジェクトが使えるようになっています。

  • Object detection

    • 20種類のオブジェクトを検出します
  • Artistic style transfer
    • ゴッホが描いた絵っぽくします
  • Face detection
    • 顔を検出します
  • Hotdog recognition
    • ホットドッグなのか、そうじゃないのかを識別します
  • Cat and dog recognition
    • 犬なのか猫なのかを識別します
  • Action recognition
    • 30種類以上の動きを識別します

順番に試していきます!!
なお、カメラに写すものを実際に用意するのはしんどいのでブラウザで画像検索したものをDeepLensで撮影します。
リアルタイムに解析されて、モニターに出力された映像と、AWS IoTに解析結果が出力されるようになっているものについてはサブスクライブしたデータを記載します。

Object detection

検出できるのは下記のオブジェクト
aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, dinning table, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor

モニター映像

Screenshot from 2017-12-06 07-39-54.png

AWS IoTでサブスクライブしたデータ

{
  "bottle": 0.39,
  "cat": 0.27,
  "chair": 0.44,
  "tvmonitor": 0.35,
  "null": 0
}

Artistic style transfer

モニター映像

Screenshot from 2017-12-06 07-47-58.png

左側がもとの画像、右側が出力結果です。
(これがゴッホの絵っぽいのかはちょっとよくわからない・・)

Face detection

モニター映像

Screenshot from 2017-12-06 07-56-29.png

AWS IoTでサブスクライブしたデータ

検出されている時

{
  "1": 0.45,
  "null": 0
}

検出されていない時

{
  "null": 0
}

Hotdog recognition

モニター映像

ホットドッグじゃない時
Screenshot from 2017-12-06 07-44-51.png

ホットドッグと識別されると青のインジケーターがぐいーん
Screenshot from 2017-12-06 07-44-31.png

AWS IoTでサブスクライブしたデータ

{
  "Hotdog": 0.800466954708,
  "Not Hotdog": 0.199533045292
}

re:InventのDeepLensワークショップではこちらのサンプルを使用しました。
AWS IoTでHotdogというキーワードを拾って、その値をイベントにしてLambdaをフックし、値が0.6以上だったらスマホのSMSに通知する、といった内容でした。
公式ブログ

このホットドッグネタ、現地の方に聞いたところあるドラマでのネタらしく、向こうの人ならわかるやつとのことでした。
調べてみたらその部分がYouTubeに上がっていました。納得。
https://www.youtube.com/watch?v=ACmydtFDTGs

Cat and dog recognition

モニター映像

猫(左上にちっちゃくcat
Screenshot from 2017-12-06 08-06-46.png

犬(左上にちっちゃくdog
Screenshot from 2017-12-06 08-07-34.png

AWS IoTでサブスクライブしたデータ

猫の時


{
  "cat": 0.991203427315,
  "dog": 0.00879661552608
}

犬の時

{
  "dog": 0.965661048889,
  "cat": 0.0343389473855
}

Action recognition

識別できるのは下記の動き

applyeyemakeup, applylipstick, archery, basketball, benchpress, biking, billiards, blowdryhair, blowingcandles, bowling, brushingteeth, cuttinginkitchen, drumming, haircut, hammering, handstandwalking, headmassage, horseriding, hulahoop, jugglingballs, jumprope, jumpingjack, lunges, nunchucks, playingcello, playingflute, playingguitar, playingpiano, layingsitar, playingviolin, pushups, shavingbeard, skiing, typing, walkingwithdog, writingonboard, yoyo

モニター映像

(左上にちっちゃくhorseriding
Screenshot from 2017-12-06 08-17-00.png

AWS IoTでサブスクライブしたデータ

{
  "horseriding": 0.86,
  "lunges": 0.14,
  "pushups": 0,
  "handstandwalking": 0,
  "hulahoop": 0
}

まとめ

今回サンプルプロジェクトを使用しましたが、なんとなくDeepLensを使ってどんなことができるのかがイメージできたのではないでしょうか。
今後はSageMakerでモデルを作って遊んだりしてみたいです。

続きを読む

AWSの新サービス DeepLensを触ってみた SIer主催版IoT縛りの勉強会 SIerIoTLT vol3 / 20171205 …

IT勉強会・セミナーを探すならTECH PLAY[テックプレイ]。点在している技術勉強会、セミナー情報をまとめて掲載しています。技術用語検索、地域検索、開催日時検索から興味のある勉強会をカンタンに探せるサービスです。 続きを読む

カテゴリー 未分類 | タグ