亚马逊AWS官方博客

扩展 AWS DeepLens 以使用 AWS Lambda 发送 SMS 通知

AWS DeepLens 是一个带有摄像头的支持深度学习的开发人员工具包。它使您能够通过实操计算机视觉教程和预建模型来开发机器学习技能并进行扩展。

本博客文章将说明如何借助 AWS IoT 规则引擎和 Lambda 函数来利用云功能扩展 DeepLens 的本地功能。我们在这里介绍的简单功能是:在您通过 DeepLens 设备看到热狗后向您的电话号码发送 SMS 通知。我们期望有更多的高级用户扩展此功能以包含其他 AWS 云服务,例如 Amazon Elasticsearch Service (利用时间轴和帧为检测到的所有对象和面部构建控制面板和搜索界面)、Amazon Kinesis Analytics (构建有关在您的店面前走过的人数的异常检测模型)、Amazon Rekognition (使用名人识别和面部搜索 API 来识别您周围的 VIP) 和很多其服务。

这里有一张示意图展示了系统中数据的流动 – 从摄像头前部的物体一直到您口袋中的移动设备。

创建 Lambda 函数

首先,您将创建一个 AWS Lambda 函数,该函数将在云中运行并为具有足够高 (>0.5) 的概率获得热狗的人筛选来自您的 DeepLens 设备的消息。在此过程中,您还将在 AWS IoT 规则引擎中创建一条规则,用于从您使用 AWS Greengrass 部署到设备的 Lambda 函数获取消息。

  • AWS Lambda 控制台上,转到“Create Function”。
  • 筛选包含“iot-button-email”的蓝图并选择它作为您的蓝图模板。
  • 为您的 Lambda 函数指定一个名称。例如,Hotdog_Notifier”。
  • 在“Role”字段中保留“Create a new Role from template(s)”值。
  • 为新角色指定名称。例如,“Hotdog_Notifier_Role”。
  • 在“Policy Templates”中添加策略“SNS Publish policy”。
  • 在“aws-iot”部分中,切换为使用“Custom IoT Rule”。
    • 选择“Create a new rule”。
  • 为该规则指定名称 (例如,“search_hotdogs”) 和描述。
  • 在规则查询语句中放置以下 SELECT 查询:Select Hotdog from ‘/$aws/deeplens/KJHFD-DKJO87-LJLKD/inference’。此查询可捕获来自 DeepLens 设备的采用以下 JSON 格式的消息: { "Hotdog" : 0.5438 }
  • 在后面的复选框中启用“Trigger”。
  • 我们将在下一步中修改 Lambda 函数的代码。
  • 将环境参数从“email”更改为“phone_number”,并将您的电话号码作为“Value”放置。请注意,电话号码格式应包含国家/地区代码 (例如,美国号码 +15555555555)。您可以在 AWS SNS 常见问题中阅读有关针对 SMS 的国际支持的更多内容:https://aws.amazon.com/sns/faqs/#sms-related-questions
  • 选择“Create Function”按钮。
  • 切换为您刚刚创建的 Lambda 函数的“Configuration”。您可以查找左侧的配置选项卡 (“configuration”、“triggers”和“monitoring”)。
  • 在 Lambda 函数代码中,我们可以删除常规 SNS 订阅所需的所有帮助程序函数,例如 findExistingSubscription、createSubscription 和 createTopic。删除“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 函数,但我们现在将通过 IoT 规则引擎测试它,以模拟来自 DeepLens 设备的消息流。

测试配置

  • IoT 控制台中,选择“Test”选项。
  • 在以下消息上方选择“Publish to a Topic”和“Publish to the topic you defined in your Rule”: { "Hotdog": 0.68725 }
  • 您应该会收到 SMS 通知,其中包含消息“Your DeepLens device just…”,该消息是您在 Lambda 函数中定义的。
  • 现在是时候向您的 DeepLens 设备展示一些对象和一根热狗了。祝您好运!
  • 如果您在向设备展示一根热狗后没有收到信息,请回到顶部的图表,然后验证您是否按照颜色匹配了相关值以及是否提供了正确的电话号码和国家/地区代码。

结论

Amazon DeepLens 是一个开放式教育和创新平台,我们希望开发人员能提出很多不同的想法来使用它解决现实生活中的问题:从分析在商店周围走动的人员到为您的汽车自动打开车库门,或者在您的餐厅里的桌子很脏或客人请求服务时提醒您。这只是您可以使用 AWS DeepLens 构建 (借助与本博客文章中的简单扩展类似的扩展) 的系统的一个小型示例。


补充阅读

了解如何通过 HTML 页面上的 AWS DeepLens 自定义和显示项目输出


作者简介

Guy Ernest 是 Amazon AI 的首席解决方案架构师。 他有一个令人非常兴奋的机会来帮助塑造和践行策略,以构建思想共享并广泛使用适用于 AI、机器学习和深度学习使用案例的 Amazon 云计算平台。在空闲时间,他喜欢与妻子和家人呆在一起,收集一些令人尴尬的故事,然后在谈论 Amazon 和 AI 的未来时进行分享。