跌倒检测,关爱独居老人—基于AidLux的跌倒检测小助手

本文正在参加『In AidLux,To AIoT』AI应用案例征集活动

0.前言

年轻人独居是自由,但对老人来说,独居意味着抗风险能力差。尤其是对于在异地工作的子女来说,更是会担心家中老人的身体。老人相对于年轻人而言平衡力差,稍有不慎就会跌倒,且不少老人在跌倒后没有能力独自爬起。若是在家中跌倒,在无人帮助的情况下更为艰难,因此一定要做好预防工作。

本文以MediaPipe Pose人体关键点检测算法为基础,结合七牛云平台、喵提醒公众号和AidLux平台,制作了一个跌倒检测小助手,并且部署到手机上。希望能对各位读者有所帮助。

本文项目github链接:https://github.com/Study-Li404/mediapipe_fall_detection

完整的测试效果如下,当老人跌倒时,指定用户的手机会收到一条提醒,以便于迅速作出反应。

mediapipe pose 跌倒检测示例_哔哩哔哩bilibili_教程

1.项目整体方案介绍

1.1AidLux介绍

AidLux是基于ARM架构的跨生态(Android/鸿蒙+Linux)一站式AIoT应用开发和部署平台。该平台集成了当前主流的AI框架和AI应用所依赖的各种库,并做了全面的环境部署、适配和整合优化。可以让开发者把正在开发的AI应用快速迁移到Aidlux中,进行运行、调试与发布。

1.2业务实现流程

本文采用人体关键点定位的方案,通过对每一帧图像中的人体关键点进行检测,通过跌倒判定逻辑进行跌倒判断,若为跌倒状态则将图片上传七牛云,通过喵提醒发送提醒消息。工作流程如下图所示:

2.项目具体实现流程

2.1mediapipe pose讲解

本文所使用的人体关键点检测算法为谷歌所提供的mediapipe pose算法,该算法可以检测人体33个关键点。关键点分布如下图所示。

本文选器肩膀处两个关键点11,12和脚部两个关键点27,28。取11和12关键点y的中值为shoulder_y,取27,28关键点y的中值为ankle_y。在正常行走过程中,ankle_y的值必然大于shoulder_y,所以我们可以判定,当ankle_y的值必然小于shoulder_y时为跌倒状态。实现代码如下。

2.2七牛云使用教程

登陆七牛云官网(https://www.qiniu.com/)注册账号,注册账号后点击右上角矩形处。

选择对象存储Kodo。

选择空间管理,点击新建空间,输入存储空间名称,选择存储区域,点击确定。

此时我们可以看到,我们的空间列表中有了一个名为“person-fall-detection”的新空间。

在我们实际应用过程中,我们会使用代码上传相应的检测图片,所以需要用到外链、密钥和空间名称。点击空间名称,在空间概览中获得我们的空间名称。

随后点击文件管理,得到我们的外链域名。

点击右上方的头像选择密钥管理。

得到我们的AccessKey(AK)和SecreKey(SK)。

使用代码测试一下我们的七牛运平台是否配置好(注:该代码由江大白提供)。

运行后会得到一个链接:

复制该链接到浏览器上,会得到我们上传的图片。

2.3喵提醒使用教程

关注“喵提醒”的账号,点击回复消息中最后的“注册账号”。注册完账号后,在回复页面点击“提醒”,点击“新建”。

输入“标题”与“备注”,点击保存。

保存后会显示“喵码”和“网址”,将其记录下来。

使用代码测试喵提醒功能。

测试结果

2.4Aidlux使用教程

在应用商店搜索Aidlux,下载并注册。

将手机的wifi网络和电脑的网络连接到一起(若没有wifi,可以用usb数据线连接手机和电脑,开启手机的usb共享网络功能),打开安装好的手机上的Aidlux软件。点击Cloud_ip。

手机界面上会跳出可以在电脑上登录的IP网址。在电脑的浏览器上,随便输入一个IP,即可将手机的系统投影到电脑上。

root输入aidlux.

点击左下角文件管理界面

找到home文件夹,并双击进入此文件夹。

点击右上角上传图标

选择上传文件夹

上传结束后我们可以看到home下面多了一个名为fall_detect的文件夹,随后就可以凯撒测试了。

3.测试效果

安装好所需要的库,运行代码。

终端输出:

可以正常输出说明所需要的库安装好了。断开wifi。打开AiCode。

点击上方的加号。

点击open。

选择我们上传的关于跌检测的代码文件夹。

点开main.py

点击左上角的运行按钮,点击Run Now,

喵提醒输出结果:

4.不足与改进方向

4.1 漏检

从视频效果来看,mediapipe pose在检测类似于侧面的人体关键点存在漏检的现象。经过初步分析,在进行人体关键点检测之前加一个人体检测器,根据检测器输出的bounding box对原图进行切割,再进行人体关键点检测,效果也许会有所提升。

4.2关键点检测不准确

本文使用的mediapipe pose更加适合正对视角的关键点检测,在目标较小和非正对视角时存在关键点检测不准确的情况,后续有时间会尝试更多更加精准的关键点检测算法。

4.3判定逻辑不足

本文所采用的跌倒判定逻辑比较单一,主要是为了提供一个跌倒检测的实现流程,后续应该再添加一些判定逻辑会使得跌倒检测更加的准确。

5.结语

本文的技术部分的介绍到这里就结束了,感谢Aidlux提供的平台可以使得开发者将自己run好的模型进行快速验证和部署。感谢大白提供的教程(万字长文手把手教你Yolov5制作家庭安防告警系统:https://mp.weixin.qq.com/s/wK8LVf2ogRVBKm91d5lAuA

尤其对于许多像我这样的学生而言,Aidlux可以让我们将学习的算法进行落地验证,看一看自己训练出来的模型在实际的工作中是什么效果。也减少了很多的经济成本和时间成本。

我今后会在Aidlux平台上尝试各种稀奇古怪的AI应用项目,感谢Aidlux平台的支持。也衷心希望能和各位开发者一起在此平台上进行各种AI项目的交流。

PS:Aidlux文档里有很多案例的代码教程,注释非常详细,大家有需要可以好好学习一下。

项目很不错?

值得学习一下