入室盗窃是大多数人永远不想经历的事情。一个人的个人物品被拿走,房屋和家具可能会受损,最糟糕的是当一个人的神圣、受保护的空间受到侵犯时,会感到恐惧。
有一些方法可以降低被盗的风险。没有家庭安全系统的房屋被闯入的可能性比有一个的房屋高 300%(来源)。尽管如此,大多数人并不费心去建立这样一个系统。为什么?
它们很难设置。进入住宅的每一扇门或窗户都需要一个特殊的传感器,这些传感器都需要与基本单元通信。
它们相对昂贵。成本因房屋大小而异,但设备成本从 250 美元到 1500 美元不等,安装成本增加到总成本,监控成本平均每年额外增加 360 美元(来源)。
他们很不方便。家庭安全系统是另一件要记住打开/关闭的事情,忘记这样做会导致系统无效或误报。
我们可以使用基于 Microsoft Azure Sphere 构建的 Safe Sound 家庭安全系统做得更好。Safe Sound 系统是一个集中式家庭监控系统,无需特殊安装,并将通知所有者任何检测到的事件。大多数入室盗窃都是吵闹的:95% 的盗窃案涉及通过打破窗户或踢开门强行进入家中(来源)。Safe Sound 系统利用这一点来侦听强行进入的迹象。所以它可以放在家里的任何地方,如果附近的窗户破了,或者有人开枪,它就会向配套应用程序发送通知。
1 / 2 •安装了 Safe Sound
为 Safe Sound 构建的应用程序适用于 Android 和 iOS 设备,并具有许多功能,包括更新系统的事件冷却时间(报告连续事件之间等待的时间)、查看最近的事件历史记录、模拟窗口破裂、在事件发生时接收通知,以及启用/禁用 Azure Sphere 设备的能力。
Azure Sphere 非常适合这个项目,因为它专注于安全性。它内置了许多安全功能,包括微控制器单元中的内置硬件安全性、专为抵御物联网威胁而设计的定制操作系统,以及一致的安全更新。这确保了 Safe Sound 设备本身是安全的,因为它可以保护您的家。
经营概况
该项目由几个不同的组件组成,这些组件必须协同工作以提供强大的安全服务。在高层次上,Azure Sphere 使用麦克风收集音频数据并不断对其进行分类,以查找表明有人闯入的音频事件。如果它检测到此类事件,它会向 Azure 云服务发送通知,该服务会向关联的应用程序发送通知。其他状态消息,例如控制设备是否处于武装状态,也通过 Azure 云服务在应用程序和设备之间来回传送。
有关不同部分之间连接的直观视图,请参见下图。
服务和设备之间的数据流
音频分类是直接在 Azure Sphere 上使用机器学习实现的。创建一个两层门控循环单元 (GRU) 网络,并根据收集的数据和用各种事件标记的数据进行训练。在这种情况下,使用了三个类别:窗户破裂、枪声和背景噪音。背景噪音包括通常在家中听到的声音,包括寂静。Azure Sphere 将音频连续分类为三个类别之一。如果预测的类别是背景噪声(大多数情况下都是如此),则丢弃预测并检查下一个音频块。如果预测的类别是其他类别,则设备会向所有者发送有关检测到的事件的通知。
1 / 2 •窗户破裂的音频波形
收集音频数据
如图所示,音频数据是通过 Mic 2 Click 收集的,它可以感应声波引起的压力变化,并将它们输出到 Azure Sphere 上的模数转换器 (ADC)。Sphere 每秒从 ADC 获取 16, 000 个样本并将其存储在一系列缓冲区中 - 本质上这是脉冲编码调制 (PCM) 音频格式。每个缓冲区都是一大块音频数据,在本例中为 512 个数据点。每个缓冲区都被送入音频分类器,预测是否有音频事件发生,例如玻璃破碎,这表明窗户被打破了。
执行音频分类
如前所述,音频分类直接在 Azure Sphere 上执行。Sphere 在内存和处理能力方面相当受资源限制,这可能会使运行机器学习模型变得困难。对于此任务,使用了 Microsoft 开发的嵌入式学习库(ELL)。ELL 是专门用于在嵌入式设备上转换和运行机器学习模型的库。虽然可以从 Sphere 连续流式传输音频数据,然后使用 Azure 机器学习等工具在云中执行分类,但在本地进行分类有几个优点:
隐私和安全
通过在本地进行分类,Azure Sphere 收集的音频数据永远不会离开设备。它没有存储在某处的服务器上,因此不太可能意外暴露或被黑客收集。相比之下,如果将音频数据发送到云端以执行模型推理(分类),那么有权访问云服务器的人就有可能收听家中发生的一切。
速度
由于通过互联网通信引入的延迟,云上的机器学习比使用本地处理简单模型要慢得多。在这个项目中,这可能意味着不可能实时执行音频分类,而是将事件检测限制为每隔几秒进行一次。
网络要求
从本质上讲,在云端使用机器学习需要互联网连接,因此没有网络连接的设备将无法使用机器学习。此外,可能需要额外的带宽来处理向机器学习服务器发送数据的设备增加的负载。对于此项目,即使 Sphere 的互联网连接中断,也会检测到音频事件,但不会发送通知,因为它们需要连接。
改进
虽然在这个项目中没有实现,但在边缘运行机器学习模型的能力也允许在设备上更新这些模型,从而改进未来的功能。
来自 Azure Sphere 的音频分类输出示例
因此,音频分类是在 Azure Sphere 上连续进行的。大多数时候,Sphere 会检测到正常的背景噪音。但是,如果有人在 Sphere 的听力范围内打碎玻璃或开枪,它会将其检测为音频事件并向所有者发送通知。
发送通知
在 Sphere 上检测到事件时的操作流程
Azure 云服务用于处理和发送通知。整个流程从 Azure Sphere 检测音频事件并将遥测事件发送到它配置连接到的 Azure IoT 中心开始(请参阅下文了解如何配置该中心)。IoT 中心接收此通信并将其转发到另一个 Azure 服务 Event Hub,该服务允许将事件路由到不同的端点。在这种情况下,事件中心将事件消息传递给自定义 Azure 函数,该函数使用 Google Firebase Messaging API 请求向任何已注册的 Android 或 iOS 设备发送通知(请注意,对 iOS 设备的通知也会通过 Apple 的服务器)。Firebase Messaging 然后将实际通知传送到所有者的手机。
构建安全完善的家庭安全系统
组装一个 Safe Sound 家庭安全系统包括五个主要步骤:首先准备好硬件;然后将软件加载到 Azure Sphere 上;接下来,配置必要的 Azure 云服务和 Firebase 消息传递(如果您有 iOS 设备,还需要配置 Apple 通知服务);最后,3D 打印设备外壳并将其放在方便的地方。接下来的几个部分将更详细地介绍这些步骤。
准备硬件
虽然 Azure Sphere 入门套件硬件开箱即用,但 Mic 2 Click 需要进行一些调整才能与 Sphere 配合使用。如Azure Sphere MT3620 的硬件说明中所述,当输入引脚配置为与 ADC 一起使用时,输入电压不能超过 2.5V。但是,未修改的 Mic 2 在 3.3V(或 5V)下工作,并根据它感知到的声音强度输出 0 - 3.3V。由于 Mic 2 的电阻主要取决于两个相对恒定的组件,即驻极体电容麦克风和运算放大器,因此可以使用简单的分压器将电压降至 2.5V。
驻极体电容麦克风和运算放大器均可在 2.5V 电压下工作,但用于调节运算放大器增益的可编程电位器至少需要 2.7V 才能工作。所以加了分压器后,增益就不再可调了。然而,这不是一个大问题,因为默认增益应该适用于录制和分类一般音频。
要计算分压器所需的电阻器,请查看Mic 2 数据表并假设稳态运行。在仔细解决问题并参考麦克风数据表和运算放大器数据表后,分压器的输出阻抗可以计算为 439 欧姆(主要是由于功率 LED 电阻)。考虑到这一点,在 Mic 2 电路之前串联一个 150 欧姆的电阻器应该可以将输入电压降低到 2.5V。使用烙铁拆焊下图中圈出的现有 0 欧姆电阻器,然后焊接到新电阻器上。将点击板插入 Azure Sphere 上的插槽 #1,您就可以准备软件了。
用 150 欧姆电阻替换圈出的电阻(图片来源:www.mikroe.com/mic-2-click)
设置 Azure Sphere 软件
由于 Azure Sphere 专注于维护 IoT 设备的安全性,因此设置比其他微控制器要复杂一些。在加载此特定项目的代码之前,您需要安装 Azure Sphere SDK、声明您的设备并将其与租户相关联,然后配置网络。此处的文档中指定了每个步骤的更多详细信息。确保您一直执行“配置网络”。
有多种方法可以将代码部署到 Azure Sphere,但如果您想试验或更改代码,最合适的方法是将设备置于文档中指定的开发模式。要将设备置于开发模式,请将 Sphere 插入已加载 Azure Sphere SDK 的计算机,打开 Azure Sphere 开发人员命令提示,然后发出以下命令:
azsphere device enable-development
在开发模式下,Sphere 可用于本地调试并且禁用云应用程序更新。
现在 Azure Sphere 已准备好向其加载一些代码。使用以下方法将 SafeSound 存储库克隆到方便的位置:
git clone https://github.com/jdpwebb/safe-sound.git
为了编译代码并将其加载到 Azure Sphere,我们将使用 Visual Studio 2019,因为它使用起来简单流畅。但是,还有其他选项(目前处于预览状态),如果您更喜欢使用命令行,可以尝试按照此文档进行操作。对于 Visual Studio,请执行以下步骤:
1、打开Visual Studio 2019,选择File > Open > CMake...,打开SafeSound repo > SafeSound_code > CMakeLists.txt下的CMakeLists.txt文件。
2. 选择 Build > Build All 并确保代码编译没有任何问题。
3. 使用 USB 线将 Azure Sphere 连接到计算机。
4. 在工具栏中间的“选择启动项”下,选择 GDB 调试器 (HLCore)。
设置启动项为 GDB Debugger
5. 点击“GDB Debugger (HLCore)”旁边的绿色播放按钮,等待Visual Studio开始调试。
应用程序开始调试后,您会看到一些错误,因为 Sphere 未连接到 Azure IoT Hub。但是,您仍然可以通过按下按钮 A 来测试一切是否正常,这将模拟窗口破裂事件。现在让我们将 Sphere 连接到 IoT Hub!
连接到 Azure 物联网中心
调试和配置与 Azure IoT 中心的通信相对简单,因为 Azure Sphere 应用程序代码自动管理设备预配和与中心的连接。执行以下步骤以允许 Sphere 与 IoT Hub 通信:
1. 按照此处的文档设置 IoT 中心和设备配置服务。
2. 打开 SafeSound repo > SafeSound_code > app_manifest.json 下的 app_manifest.json。X 的字符串以及集线器连接端点都需要替换。
3. 打开 Azure Sphere 开发人员命令提示并发出以下命令以打印您的 Sphere 租户 ID:
azsphere tenant show-selected
将返回值复制到 app_manifest.json 中的 DeviceAuthentication 字段。
4. 登录到Azure 门户并找到您的设备配置服务。复制 ID Scope 并将其粘贴到 app_manifest.json 中的 CmdArgs 字段中。请参阅下图以了解可以在何处找到 ID 范围。
在哪里可以找到 ID 范围和链接的 IoT 中心
5. 在左侧的设置下,单击链接的物联网中心(见上图)。复制 Hub 的服务终结点值并替换 app_manifest.json 的 AllowedConnections 字段中的“Daedalus.azure-devices.net”。
6. 保存 app_manifest.json 文件并通过单击绿色播放按钮运行代码。您应该会看到几条消息,表明设备已成功预配并连接到 IoT 中心。
现在 Safe Sound 家庭安全设备可以与 Azure IoT 中心通信,它需要一个发送通知的地方:一个应用程序!
智能手机应用程序概述
如前所述,为 Safe Sound 构建的应用程序可以控制家庭安全设备,包括布防/撤防和调整某些设置,并允许所有者查看最近事件的历史记录。此外,当 Safe Sound 系统检测到事件时,它将收到通知。该应用程序是使用Flutter构建的,因此只需最少的额外配置即可在 Android 和 iOS 手机上运行。请参阅下面的 Safe Sound 配套应用程序的一些图片。
1 / 4 •控制屏幕
设置应用程序
在手机上构建和加载应用程序之前,必须填写一些变量,以便应用程序可以连接到 IoT 中心以发送和接收来自 Safe Sound 设备的消息。导航到 SafeSound repo > SafeSound_app > lib 并打开 main.dart。文件顶部是三个需要填写的常量:sharedAccessKey、deviceID、iotHubEndpoint。iotHubEndpoint 与之前在 app_manifest.json 中输入的字符串相同。deviceID 是 IoT 中心提供给 Azure Sphere 的 ID。可以通过打开 IoT 中心找到它,单击侧面菜单中的“IoT 设备”,然后选择您的设备。请参阅下图以进行视觉演练。
1 / 2 •在左侧菜单中选择物联网设备
sharedAccessKey 是与 IoT Hub 关联的密钥,它授予持有者以特定方式与 Hub 交互的权限。对于此项目,共享访问密钥需要具有“服务连接”权限。请注意,此密钥授予对您的 IoT 中心的访问权限,不应向任何人透露或签入源代码管理。此外,企业物联网服务将使用后端服务器来验证应用程序用户并管理他们有权访问的服务。然而,就此项目而言,将共享访问密钥直接放在应用程序中更简单、更容易。要找到共享访问密钥,请转到您的 IoT 中心,单击“共享访问策略”,选择“服务”策略,然后复制“主密钥”。请参阅下图以获取视觉指南。
1 / 2 •在左侧菜单中选择共享访问策略
填写变量后,现在可以构建应用程序并将其安装在您的手机上。首先你需要安装 Flutter 。安装 Flutter 后,只需几步即可构建该应用程序。以下说明描述了如何为 Android 手机构建应用程序,因为这是我的手机类型,但可以在此处找到在iOS 设备上构建和加载应用程序的说明。
要创建应用程序的 Android 版本,首先创建一个签名密钥并为应用程序签名(注意:仅按照“为应用程序签名”的说明进行操作;到达“启用 Proguard”后停止)。然后通过打开 flutter 命令提示符并发出以下命令来构建 APK(这可能需要几分钟才能完成):
cd /SafeSound_app flutter build apk --split-per-abi
要安装该应用程序,请先在您的 Android 手机上启用开发者选项和USB 调试。将手机连接到计算机,然后在 flutter 命令窗口中键入以下内容:
cd/SafeSound_app flutter install
恭喜!该应用程序现已安装,您可以测试布防/撤防 Safe Sound 家庭安全系统。该应用程序现在可以控制 Azure Sphere,但还需要执行几个步骤来设置检测到闯入事件时的通知。
设置事件通知
为 Safe Sound 系统启用通知包括两个主要部分:将应用程序连接到 Firebase Cloud Messaging(如果您有 iOS 设备,则连接到 Apple Push Notification Service),并设置 Azure Functions 以在检测到事件时发送实际通知由 Azure Sphere。
将应用程序连接到 Firebase
要将应用程序连接到 Firebase 云消息传递,首先要创建一个 Firebase 项目。
1. 打开 Firebase 控制台并单击“创建项目”并输入项目名称。
2. 单击继续,然后禁用该项目不需要的 Google Analytics。
3. 单击“创建项目”。
1 / 3 •单击创建项目
下一步是配置您的手机以使用 Firebase。和以前一样,此处将显示配置 Android 设备的说明,但如果您有 iOS 设备,请按照这些说明进行操作。
要为 Android 设备启用通知,请执行以下步骤:
1、点击安卓上图“添加应用开始”。
2.填写Android包名“com.jwebb.safe_sound_app”,点击“注册应用”。
3. 下载 google-services.json 文件并将其放在 /android/app/ 中。
4. 重建应用程序并使用与之前类似的过程将其安装到您的设备上:
cd /SafeSound_app flutter build apk --split-per-abi flutter install
现在应用程序可以接收通知,但我们仍然需要配置一个 Azure Functions 来发送它们。
创建一个 Azure 函数来发送通知
完成以下步骤以设置用于推送通知的 Azure 函数。查看图像以进行视觉演练。
1. 导航到Azure 门户并单击 Function App > Create(如果没有为您显示 Function App,请在搜索栏中搜索它)。
2. 填写Function App name,Runtime stack选择Node.js,Region选择Central US。如果您愿意,可以尝试选择不同的区域,但并非所有区域都具有相同的配置选项。单击下一步:托管>
3. 如果尚未选择,请为操作系统选择 Windows,为计划类型选择消耗。请注意,消费计划会按月向您收费,但成本很小。我每周为 Azure 函数和存储支付 1 美分。点击下一步:监控 >
4. 禁用Application Insights(本项目不需要),然后点击Review + create。
5. 仔细检查配置(见下图五)并单击创建。
6. 成功部署资源后,单击转至资源并单击 + 添加新功能(功能旁边)。
7. 向下滚动并选择 In-portal,然后选择 Continue。
8. 向下滚动并选择更多模板...,然后选择完成并查看模板。
9. 向下滚动到 IoT 中心(事件中心)并选择它。出现提示时安装扩展,安装完成后按继续。
10. 在 New Function 窗口中,单击 Event Hub connection 下的 new。
11. 在弹出窗口中选择 IoT Hub 并接受默认值。
12. 最后,在“新建函数”窗口中单击“创建”。
1 / 13 •创建一个新的功能应用程序
现在Function App 已经调试完成,需要配置它通过Firebase 发送通知。这涉及设置凭据以授予 Azure Functions 通过 Firebase 发送通知的权限。执行以下步骤:
1. 转到Firebase 控制台的项目概览页面,点击项目概览旁边的齿轮图标,然后点击项目设置。
2. 选择服务帐户选项卡并向下滚动到 Admin SDK 配置片段。单击生成新私钥并下载生成的 JSON 文件。它包含访问此 Firebase 项目的凭据,将在下一步中使用。
1 / 2 •单击项目概览旁边的齿轮图标,然后单击项目设置
3. 切换回 Azure Function 并单击其名称,然后单击底部中心的控制台。
4.使用以下命令安装firebase-admin SDK
npm install firebase-admin
5. 单击右侧的查看文件,然后单击上传。在文件选择器对话框中,选择在第 2 步中下载的 JSON 文件。
6. 打开 SafeSound 存储库(或从Github 此处)中的 azure_function.js 文件,复制所有代码并将其粘贴到 Azure Function 的在线编辑器中。单击保存。
7. 单击您的 Function App 的名称,然后单击 Configuration。
8. 单击新建应用程序设置并将名称字段设置为 GOOGLE_APPLICATION_CREDENTIALS。Value 字段应设置为 /home/site/wwwroot/IoTHub_EventHub1/.json。
9. 单击确定,然后单击保存。
1 / 6 •打开控制台并安装 firebase-admin SDK
全部完成!现在已为该应用程序设置通知。打开应用程序,选择“事件”选项卡,然后按“模拟事件”对其进行测试。
添加案例
通过 3D 打印外壳进行最后润色。下载附加的 STL 文件并打印它们,或制作您自己的文件。如果您使用附带的外壳设计,则应打印外壳的上半部分,以便按扣水平(即外壳顶部的突出物应与层的方向相同)。这是确保按扣足够坚固所必需的。如果不以这种方式打印,由于打印层之间固有的弱点,按扣很可能会折断。
1 / 2 • Safe Sound 设备的 3D 打印外壳
试验机器学习模型
用于对音频进行分类的机器学习模型是使用此 Python notebook构建的,该notebook 在浏览器中的 Google Colab 上运行,无需安装。
可以将其他功能添加到设备中。一个重要的是在线训练分类模型的能力。通过这种方式,该设备将不断学习(通过用户反馈)并更好地检测家庭入室盗窃。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !