Amazon Web Services ブログ

AWS DeepLens を拡張し AWS Lambda で SMS 通知を送信

AWS DeepLens は、ディープラーニング対応の開発者ツールキットを搭載したビデオカメラです。コンピュータビジョンのハンズオンチュートリアル、事前構築されたモデルを使用して Machine Learning スキルを開発し、拡張することができます。

このブログでは、AWS IoT ルールエンジンと Lambda 関数を使用し、クラウド機能で DeepLens のローカルな機能を拡張する方法について説明します。このシンプルな機能は、たとえば DeepLens デバイスでホットドッグを見た後に、あなたの電話番号に SMS 通知を送信することができます。Amazon Elasticsearch Service (タイムラインやフレームで検出されたすべてのオブジェクトや顔を対象にするダッシュボードや検索インターフェイスの構築)、Amazon Kinesis Analytics (店の前を通り過ぎる人数の異常検出モデルの構築)、Amazon Rekognition (有名人の認識や顔検出の API を使用して近辺にいる VIP を識別) や、その他の AWS クラウドサービスでこの機能を拡張するために上級ユーザーが今後この機能を利用していくだろうと我々は予測しています。

次の図はカメラの前のオブジェクトからポケットの中にあるモバイルデバイスまでに渡るシステム内のデータフローを示しています。

Lambda 関数の作成

まず、クラウドで実行が可能で DeepLens デバイスからのホットドッグの確率が高い (>0.5) メッセージをフィルターできる AWS Lambda 関数を作成します。このプロセス中に、AWS Greengrass を使用するデバイスでデプロイした Lambda 関数からメッセージを取得できるように、AWS IoT ルールエンジンでルールを作成します。

  • AWS Lambda コンソールで [Create Function] にアクセスします。
  • 「iot-button-email」がある設計図をフィルターに掛け、それを設計図のテンプレートに選びます。
  • Lambda 関数の名前を入力します。たとえば「Hotdog_Notifier」といったようなものをお使いください。
  • Role フィールドは [Create a new Role from template(s)] のままにします。
  • 新しいロールに名前を指定します。たとえば「Hotdog_Notifier_Role」といったようなものをお使いください。
  • 「SNS Publish policy」ポリシーのポリシーテンプレートを追加します。
  • [aws-iot] セクションで [Custom IoT Rule] を使用するように切り替えます。
    • [Create a new rule] を選択します。
  • 名前を指定し (たとえば「search_hotdogs」など)、説明を追加します。
  • ルールクエリステートメントに [SELECT] クエリを選びます。[/$aws/deeplens/KJHFD-DKJO87-LJLKD/inference] から [Hotdog] を選択します。このクエリは次の JSON 形式で DeepLens デバイスからメッセージをキャッチできます。 { "Hotdog" : 0.5438 }
  • 次のチェックボックスでトリガーを有効にします。
  • 次のステップで Lambda 関数のコードを変更します。
  • 環境パラメーターを [email] から [phone_number] に変更し、自分の電話番号を値として入力します。この際、電話番号には国コードを忘れずに入れてください (たとえば米国の場合は +15555555555)。SMS の海外サポートについては AWS SNS に関するよくある質問をご覧ください: https://aws.amazon.com/sns/faqs/#sms-related-questions
  • [Create Function] ボタンを選択します。
  • 先ほど作成した Lambda 関数の [Configuration] に切り替えます。[Configuration] タブは左側にあります (設定、トリガー、モニタリング)。
  • Lambda 関数のコードで findExistingSubscription、createSubscriptioncreateTopic といった通常の SNS サブスクリプションで必要とされるヘルパー機能をすべて削除することができます。[use strict] まで、すべてのコードを削除します。SMS を直に送信するため、コードも変更します。
    'use strict';
    
    /**
     * This is a sample Lambda function that sends an SMS Notification When your
     * Deep Lens device detects a Hot Dog
     * 
     * Follow these steps to complete the configuration of your function:
     *
     * Update the phone number environment variable with your phone number.
     */
    
    const AWS = require('aws-sdk');
    
    const phone_number = process.env.phone_number;
    const SNS = new AWS.SNS({ apiVersion: '2010-03-31' });
    
    exports.handler = (event, context, callback) => {
        console.log('Received event:', event);
    
        // publish message
        const params = {
            Message: `Your DeepLens device just identified a Hot Dog. Congratulations!`,
            PhoneNumber: phone_number
        };
        if (event.Hotdog > 0.5)
            SNS.publish(params, callback);
    };
  • [Save] を選択します。この画面からでも Lambda 関数をテストすることができますが、DeepLens デバイスからのメッセージフローをシミュレートするため、ここでは IoT ルールエンジンを介してテストを行います。

設定をテストする

  • IoT コンソールで [Test] オプションを選択します。
  • 次のメッセージの前にルールで定義したトピックに [Publish to a Topic] を選択します。 { "Hotdog": 0.68725 }.
  • 「DeepLens デバイスが先ほど… (Your DeepLens device just….)」といった SNS 通知が届きます。これは Lambda 関数で定義したものです。
  • では、DeepLens デバイスに何らかのオブジェクトとホットドッグを見せてみましょう。上手くいくといいですね!
  • デバイスの前にホットドッグを見せてもメッセージが届かない場合は、上記の図に戻り色に合わせた値が設定されているか確認してください。また、国コードを含む正確な電話番号を提供しているかどうかもご確認ください。

まとめ

Amazon DeepLens は教育そしてイノベーションを目的とするオープンプラットフォームとして設計されています。実社会での問題解決に繋がる様々なアイデアを開発者が持ち寄ることを期待しています。店の近辺を行き交う人々の分析や、車庫のドアを自動で開いたり、レストランのテーブルが汚れていることを知らせたり、客がサービスを必要としていることを知らせることができます。これは、このブログで紹介したようなシンプルな拡張方法を使用して AWS DeepLens で構築できるシステムの簡単なサンプルです。


その他の参考資料

HTML ページで AWS DeepLens を使用してプロジェクト出力のカスタマイズや表示する方法をご覧ください。


今回のブログの投稿者について

Guy Ernest 氏は Amazon AI のプリンシパルソリューションアーキテクトです。マインドシェア構築の戦略に携わり、Amazon の AI、Machine Learning、ディープラーニングのユースケースのクラウドコンピューティングプラットフォームを幅広く使用しています。時間がある時は家族との時間を楽しみ、面白くちょっと恥ずかしい話しを集めたり、Amazon や AI の今後について話し合ったりしています。