使用ADXL362加速度计构建跌倒检测系统
扫描二维码
随时随地手机看文章
老年人跌倒是一个严重的健康问题,尤其是在全球人口结构发生变化之际。到2050年,全世界65岁及以上的人口将超过15亿,其中很大一部分人将独立生活。然而,这种独立性也带来了风险;研究表明,在65岁以上的人中,每年约有28-35%的人会跌倒,而在70岁以上的人中,这一数字上升到近42%。与跌倒有关的伤害,特别是髋部骨折和创伤性脑损伤,在老年人急诊室就诊和住院治疗中占很高的比例。反复跌倒和害怕再次跌倒是常见的,影响生活质量和行动能力。
跌倒后的第一个小时——通常被称为“黄金一小时”——对及时接受治疗至关重要。援助的延误会大大增加严重伤害、慢性残疾甚至死亡的风险。跌倒检测系统已经成为一种解决方案,使用基于传感器的警报立即通知护理人员,减少紧急响应时间。这些系统在老年人中有很高的接受度,他们认为这是一种保持独立性的方法,同时减少了跌倒焦虑的心理负担。在这个项目中,我们的目标是通过将深度学习技术与Particle Photon 2和ADXL362加速度计相结合,创造一种经济实惠且高度精确的可穿戴跌倒探测器。
数据集
高质量的数据集对于建立准确的跌倒检测系统至关重要,特别是针对老年用户的可穿戴设备。跌倒检测系统需要包含各种现实场景的数据,例如不同类型的跌倒和日常非跌倒活动,以确保模型能够可靠地区分实际跌倒和普通动作。然而,收集这样一个数据集是极具挑战性的。它包括精心安排的数据收集环节,由志愿者模拟各种跌倒(如向前、向后和横向跌倒)和常见活动,并使用专门的运动传感器记录这些活动。这个过程不仅是劳动密集型的,而且需要高标准的安全性和一致性,特别是如果目标是用现实的强度和背景来表现不同类型的跌倒。
SisFall数据集全面解决了这一需求。它包括19种日常生活活动和15种类型的跌倒,收集了38名志愿者的数据——15名老年人(60-75岁)和23名年轻人(19-30岁)。数据集中包含的不同类别的Fall的详细信息如下所示。
数据集中包含的所有ADL类在下表中显示。
该数据集由38名志愿者收集的数据组成,他们被分为两组:老年人和年轻人。老年人组由15人组成(男性8人,女性7人),青壮年组由23人组成(男性11人,女性12人)。
下表显示了各组的年龄、体重和身高
准备数据集
数据集采集使用三个传感器,包括两个加速度计——ADXL345加速度计(配置为±16g, 13位模数转换器- ADC)、一个飞思卡尔MMA8451Q加速度计(±8g, 14位ADC)和一个陀螺仪——ITG3200陀螺仪(±2000°/s, 16位ADC),采样频率为200hz。跌倒的样本数据如下所示
在本项目中,我们利用ADXL345加速度计捕获的原始加速度数据,重点关注对应于X、Y和Z轴的每个数据条目的前三列。
现在加速度计的数据(x, y, z)用下面的公式转换成重力单位:
我们在这个项目中使用ADXL362加速度计,它提供12位分辨率,可以测量到±8g的范围。
上传数据集到边缘脉冲
为了将加速度计数据上传到Edge Impulse进行机器学习模型训练,我们首先需要以Edge Impulse的数据采集格式进行准备。包含加速度计读数的数据集分为两类:ADL(日常生活活动)和FALL。每个读数包括三个轴的加速度值,我们从原始传感器单位转换为m/s²,以标准化测量。
为了确保安全的数据传输,我们需要Edge Impulse项目中的API和HMAC密钥。这些键可以从边缘脉冲工作室的仪表板>键选项卡中访问,允许我们生成数据验证的签名。一旦数据被格式化并签名,它就可以上传到Edge Impulse工作室,在那里它将被用来训练我们的机器学习模型进行跌倒检测。
下面是一个Python脚本,它促进了这种转换和打包,将原始加速度计数据转换为所需的JSON格式,与Edge Impulse Studio的数据摄取API兼容。
一旦您成功下载了SisFall数据集,您可以通过运行以下命令将原始数据转换为边缘脉冲数据采集格式:
这里,‘SisFall_Dataset’指的是输入文件夹的名称。执行此命令后,将创建一个名为‘data’的输出文件夹,其中包含所有数据文件。现在从数据采集选项卡上传数据集到Edge Impulse。
上传数据集后,使用以下命令使用ressample .py重新采样数据
重新采样完成后,执行训练/测试分割,将数据集以80/20的比例分割为训练和测试数据集。
创造冲动
要在Edge Impulse中构建ML模型,您应该从创建一个Impulse开始。这是定义处理和分析传感器数据的整个管道的起点。
要在Edge impulse中创建脉冲,请遵循以下步骤:
1. 创造新的冲动
导航到脉冲设计部分。
点击Create Impulse,开始建立你的冲动管道。
2. 添加处理块
单击Add a processing block。
从可用处理块列表中选择Raw Data。原始数据块处理原始传感器数据,不进行任何预处理。它允许深度学习模型直接从原始数据中学习特征,自动识别与分类相关的模式和特征。你也可以使用频谱分析,这对于分析重复运动非常有用,比如来自加速度计的数据。提取信号随时间变化的频率和功率特性。但由于我们要建立一个深度学习模型,我们没有进行任何预处理。
3. 添加学习块
点击添加学习块。
选择分类作为学习模块。分类块负责从原始数据中的特征中学习,并应用这些知识对新的、未见过的数据进行分类。它识别数据中对应于不同类(例如,ADL、FALL)的模式。
4. 配置窗口大小和增加
将窗口大小和窗口增加设置为4000ms。
这意味着数据将被分成4000毫秒(4秒)的帧,帧之间不会重叠,从而产生不同的、独立的数据窗口进行分类。
选择4000ms的窗口大小是因为它为捕获有意义的数据模式提供了足够的上下文,使其成为分类任务的理想选择。
5. 保存冲动
配置完处理模块和学习模块后,单击“保存脉冲”。
功能一代
在这个阶段,我们准备继续到Raw Data选项卡并开始特征生成过程。Raw Data选项卡提供了各种操作数据的选项,包括调整轴缩放和应用过滤器。然而,对于这个项目,我们选择保留默认设置并直接生成特性。
为了生成特征,我们将利用一系列算法和技术来识别数据中的关键模式和特征。这些提取的特征将被脉冲的学习块用于将加速度计数据分类为两个预定义类之一。通过仔细选择和提取相关特征,我们的目标是建立一个更准确和鲁棒的加速度计数据分类模型。
模型训练
提取并准备好特征之后,我们现在准备进入Classifier选项卡,开始训练我们的模型。Classifier选项卡提供了各种微调模型行为的选项,例如调整隐藏层中神经元的数量、设置学习率和确定训练epoch的数量。
但在我们的情况下,默认模型是不够的,所以切换到专家模式,这将给我们空间来建立我们自己的深度学习模型。在这个项目中,我们使用时态CNN。
时间卷积神经网络(Temporal CNN或TCN)是一种深度学习模型,旨在通过应用卷积层来捕获数据中的时间依赖性来处理序列数据,例如时间序列数据。与通常用于图像处理的传统卷积神经网络(cnn)不同,Temporal cnn专门针对时间序列数据的顺序特性进行了优化,使其适用于语音识别、视频处理和传感器数据分类等任务。
时间CNN是如何工作的:
卷积层:时态cnn使用在时间序列数据上滑动的1D卷积层,应用过滤器捕获随时间变化的重要模式或特征。这些过滤器可以捕获局部特征,如趋势、峰值或周期性,这对于理解基于时间的数据至关重要。
扩张:时态cnn的一个关键特征是使用扩张卷积。这允许模型在不需要过于深入的网络的情况下捕获跨时间步长的依赖关系。通过在过滤器之间跳过一些时间步,扩展卷积使模型能够有效地处理更广泛的时间上下文。
残差连接:时态cnn经常使用残差连接,这有助于防止梯度消失,并允许网络在不丢失早期层的重要特征的情况下学习更深层次的表示。
为什么它有用?
加速度计数据,如SisFall数据集提供的数据,本质上是连续的——它由按规则时间间隔进行的测量组成。跌倒是突然发生的事件,在加速度计数据中表现出不同的模式,例如加速度的快速变化、突然的峰值或方向的急剧变化。这些特征对跌倒检测系统至关重要,但识别它们需要分析跨多个时间步长的时间依赖性和模式。
时态cnn非常适合于跌倒检测,因为:
捕捉时间模式:跌倒的典型特征是加速的快速和突然变化。时间cnn擅长于识别这些时间模式,如加速度计信号随时间的峰值或趋势。卷积滤波器有效地捕获了这些时间依赖性。
大型数据集的可扩展性:SisFall数据集包含大量标记加速度计数据,用于日常生活活动(ADL)和跌倒事件,数据量大且变化很大。时态cnn非常适合处理大型数据集,因为它们能够在不同的时间尺度上提取层次特征。通过有效地处理大量数据,它们可以学会区分许多类别(如不同类型的运动或跌倒)数据中的细微差异。
长序列的效率:时态cnn特别擅长处理长序列的数据。有了像SisFall这样的数据集,它可能包含来自加速度计的长时间序列数据,Temporal cnn可以捕获事件之间的长期依赖关系,比如跌倒前的积累或跌倒后的行为,而不需要过于深入的模型。
有效泛化:时态cnn可以很好地泛化到看不见的坠落事件,因为它们专注于从原始数据中学习鲁棒特征。这在跌倒检测中是至关重要的,因为现实世界中的跌倒事件在强度、方向和身体方向方面可能有很大差异。
降维:模型可以通过学习时间依赖关系来学习关注最相关的特征。这减少了对大量手动特征工程的需求,这在处理像SisFall这样的大型数据集时特别有用。
我们的TCN模型总结如下:
该模型对输入数据进行多层处理,包括:
重塑和归一化:对输入数据进行重塑,并对加速度计数据应用预定义的均值和方差值的归一化层,确保数据在通过网络之前进行标准化。
时序CNN块:多个一维卷积层以增加膨胀率(1,2,4,8)捕获时序数据中的时间依赖性。这些层使用ReLU激活和dropout进行正则化。
全局平均池化:经过卷积层处理后,全局平均池化降低了时间维度,只保留了最重要的特征。
完全连接的MLP层:池化的特征通过多层感知器(MLP)通过ReLU激活和dropout进行进一步处理。
输出层:最后的输出层使用softmax激活将数据分类为预定义的类别(如FALL或ADL)。
该模型的学习率为0.0005,批大小为32,使用Adam优化器进行20次epoch的训练。培训过程包含回调以监控进度。在训练模型之后,我们取得了令人印象深刻的98.9%的准确率,考虑到数据集的大小,这是特别显着的。
模型试验
在训练和微调我们的模型之后,我们继续使用model Testing选项卡和classified All特性在未见过的数据上测试它的性能。这一步使我们能够评估模型准确检测跌倒的能力。该模型在测试数据上的强大性能,实现了很高的分类精度,表明它是可靠的,能够为现实世界的应用提供有价值的见解。
部署
在部署页面上,选择“创建库”选项并选择“粒子库”,这将创建一个粒子库。
设置粒子光子2
1.将Photon连接到您的计算机:首先使用附带的微型USB电缆将Photon设备连接到您的计算机。确认设备上电,LED灯亮起。
2.创建并访问您的Particle帐户:如果您还没有Particle帐户,请访问Particle网站进行注册。注册后,登录您的帐户,继续进行设备设置和管理您的设备。
3. 设置Photon2
打开浏览器,进入setup.particle.io开始配置你的Photon设备。安装向导将引导您将设备链接到您的Particle帐户。
在继续之前,请确保您的Photon已连接到计算机并已打开电源。
如果检测到光子,它将在设置界面中显示为“P2”。选择此选项以继续。
选择P2并继续安装。
当您选择“P2”时,设备将自动切换到DFU模式,其中LED将闪烁黄色,表示已准备好固件闪烁。
现在Photon处于DFU模式,下一步是用必要的固件flash设备。这一步确保你的Photon准备好正常工作并与云平台通信。
在这一点上,你可以创建一个新的产品或分配光子到一个现有的产品。
重要的是要分配一个唯一的名称,以设备,所以它可以很容易地识别在您的粒子帐户。
闪烁之后,你需要配置Photon的Wi-Fi设置。输入Wi-Fi网络所需的凭据,以便设备可以连接到互联网并开始运行。
现在,一切都准备好了!
粒子工作台设置
如果你想在不使用Particle Web IDE的情况下开发固件并在本地flash,你可以按照本指南在VS Code中设置Particle Workbench。
整合Twilio的短信提醒
将Twilio与Particle Photon 2设备集成,您可以直接从Photon 2发送SMS警报,使其成为即时通知至关重要的应用程序的理想选择,例如在跌倒检测系统中。按照以下步骤设置和集成Twilio与你的Photon 2发送短信提醒。
设置一个Twilio帐户,并获得您的凭据
如果你还没有,在Twilio的网站上注册一个Twilio账户。
一旦您的帐户设置,从Twilio控制台获取您的帐户SID和认证令牌,以及Twilio电话号码。你需要这些来授权并通过Twilio发送短信。
在粒子控制台设置Twilio集成
登录到粒子控制台并导航到集成部分。
点击New Integration并选择Twilio。
事件名称:选择一个事件名称,如twilio_sms_alert,当Photon 2需要发送短信时将触发该事件。
参数:设置如下参数字段:
用户名:您的Twilio帐户SID。
密码:您的Twilio认证令牌。
Twilio SID:您的Twilio帐户SID。
表单数据:设置表单数据字段如下:
来自:你的Twilio电话号码。
收件人:收件人的电话号码(短信提醒将发送到该号码)。
Body:消息文本,它可以包括动态值,如{{PARTICLE_EVENT_VALUE}},如果你想从Photon 2代码定制消息。
编译并上传边缘脉冲模型到光子2
如果你选择将你的项目部署到粒子库而不是二进制文件中,请按照以下步骤从粒子工作台中闪现你的固件:
打开一个新的VS Code窗口,确保已经安装了Particle Workbench
使用VS Code命令面板,输入Particle: Import Project
选择项目。从Edge Impulse下载的目录中的属性文件。
使用VS Code命令面板,输入Particle: Configure Project for Device
选择deviceOS@5.9.0
选择一个目标。(例如P2,这个选项也用于Photon 2)。
编译和Flash在一个命令与粒子:Flash应用程序和DeviceOS(本地)
硬件
这个项目的核心是粒子光子2微控制器,一个轻量级和强大的设备,适合实时跌倒检测。支持2.4 GHz和5ghz Wi-Fi,确保各种网络环境下的可靠连接。由Realtek RTL8721DM处理器和运行在200 MHz的ARM Cortex M33 CPU驱动,Photon 2提供复杂,高速应用所需的处理能力。其紧凑的外形和物联网兼容性使其易于集成到可穿戴设备中。
它的板载RGB LED在本项目中用于直观地指示设备状态。RGB LED可以改变颜色来显示不同的状态,例如在检测到跌倒时的警报模式或在日常监控期间的正常运行。这种内置LED提供了一种快速,一目了然的方式来了解设备的状态,而无需额外的显示组件,以紧凑高效的方式增强用户意识。
ADXL362三轴加速度计在本项目中用于捕获运动数据。这种高性能传感器可以检测沿x、y和z轴的突然加速度,这对识别跌倒至关重要。其超低功耗在测量模式下仅为1.8 μ A,待机状态下仅为300 nA,这是一个显著的优势,因为它确保了最小的电池消耗,使其成为可穿戴和电池供电应用的理想选择。
在这个项目中使用瞬时触觉按钮模块作为用户输入的按钮。该组件允许用户直接与系统交互,提供了一种简单的方法来控制设备,而无需额外的软件接口。
面包板原型
首先,我们将所有内容连接到面包板以测试项目。
CAD设计
摔倒检测系统的外壳使用Fusion 360建模,以实现紧凑的可穿戴手表设计,使该设备可以舒适地佩戴在手腕上。这种配置可以密切监测运动,提高跌倒检测的准确性。
手表外壳由上部和下部组成,下部牢固地固定内部部件。使用M3 × 10mm螺钉固定。还设计了一个小按钮盒来按下按钮。
组装
我们通过将加速度计连接到Photon2的后面部分开始组装,小心地将电线焊接到位。
为了给设备供电,我们使用了一个带有兼容连接器的400毫安锂电池,将其放在Photon2上的加速度计上方。
然后我们固定了按钮模块。
最后,我们完成了所有的连接,完成了焊接工作。
接下来,我们用M3螺钉固定上下部分,并将按钮盒定位到位。
这是我们完成的设备,并附有带子。
系统是如何工作的
跌倒检测系统持续监测加速度计以识别潜在的跌倒。当检测到跌倒时,机载RGB LED会改变颜色以通知佩戴者。如果是错误检测,用户可以按下按钮取消警报,表明他们是安全的。但是,如果在5秒内未按下按钮,系统将此事件解释为合法摔倒,并自动向指定联系人发送警报,确保在需要时及时提供帮助。
这能提供什么?
这款可穿戴的跌倒检测设备重新定义了老年人的独立性,将实用性与强大、精确的技术相结合,在最重要的地方创造了一个安全网。通过将ADXL362加速度计与Particle Photon 2无缝集成,并利用先进的算法,该设备提供快速、可靠的检测,同时通过直观的按钮功能减少误报。
除了简单的监测之外,这种可穿戴设备还可以确保老年人在跌倒后的关键时刻得到及时的帮助,此时立即干预可以挽救生命。对于护理人员和亲人来说,这个设备提供了急需的心灵平静,在不影响佩戴者独立性的情况下培养了一种安全感。这个可穿戴的跌倒探测器不仅仅是一个设备;这是朝着更安全、更有尊严的老龄化迈出的一步,强调了技术在未来几年支持独立和恢复能力方面的重要作用。
本文编译自hackster.io