APP下载

基于智能手机传感器的老人运动行为监测系统

2023-05-15蔡木生

现代计算机 2023年5期
关键词:加速度服务器分类

蔡木生

(广州软件学院计算机系,广州 510990)

0 引言

随着我国人口老龄化进程的加快[1],老人独居、空巢等现象越来越普遍,他们的健康监护、情感交流等面临着不少问题,不在其身边的子女、亲朋或健康监护机构等迫切需要采用信息化手段对老人的起居生活进行监测,而又不能给对方造成心理压力、侵犯个人隐私。本文提出的居家老人运动行为监测系统就是这方面的尝试,它通过智能手机传感器获取老人运动数据,再应用机器学习算法识别出其行为状态并上传到云端服务器中,亲友等可通过网络实时查看老人行为状态,查询某一时段的运动统计数据等。本文将介绍该系统的设计原理、总体框架、使用技术、主要模块的功能实现等内容。

1 前期基础工作及成果

笔者根据前述要求,对于“如何利用智能手机传感器采集人体运动行为数据?”“怎样获取数据并进行分析、处理?”“如何评价分类结果?”等问题进行研究,并得到相应结果,详情请参见文献[2]。现概述如下。

1.1 数据采集

居家老人的运动行为主要包括步行、跑步、上楼、下楼、乘电梯上楼、乘电梯下楼和静止等7种基本动作。由于手机放置在不同位置会对传感器数据产生较大影响,再细分为:在上衣口袋(或腰包)、裤袋、手或臂包中三类。前4种运动行为与3 种手机放置位置进行组合得到12种类型,加上后3 类运动行为(可认为手机位置对它们无影响),共有15类。

上述运动行为的区分,主要通过运动强度、垂直方向运动两方面指标差异来实现,即通过智能手机三轴加速度传感器来获得x、y、z三个方向的线性加速度以及合成加速度,其中:合成加速度表示运动强度,z方向加速度表示垂直方向上运动变化。文献[2]以Android 手机为例,设计了APP 程序来收集15 类不同运动行为对应线性加速度传感器、加速度传感器及旋转向量传感器的数据,再进行适当运算后得到初始数据集。之所以选择这三类传感器,主要基于数据的坐标系因素影响和分类准确度高低考虑的。传感器的采样频率设为100 Hz,即采样间隔为0.01 秒,一次采样的数据项有12 项,即采样时间(1 项)、线性加速度acc 及合成加速度(4 项)、acc1 加速度(3 项)、acc2 加速度(3 项)和分类标签(1项)。

1.2 数据处理

从手机传感器获取的是时序数据,前后记录有关联,数据量巨大且易受噪声影响,为此,通常采用滑动窗口技术来处理,即将数据集的记录按一定规则排序,再依次划分为一个个窗口,再以窗口为单位计算时域、频域特征指标,时域特征有平均数、标准差、最大值、最小值等;频域特征包括经傅里叶变换后得到的加速度幅度、频率、均值等。经过上述方式加工处理后,数据大为减少,集中趋势更加明显,可提高分类准确度。文献[2]以acc、acc1、acc2三类数据(10 项)为基础,分别计算它们的均值、标准差指标,对acc、acc_z 两个重要指标,还分别计算它们的最大值、最小值,再选取通过傅里叶变换得到直流分量、全部频谱之和、主要频谱指标(最多为16 项)等频域特征,特征总数为60 个。当然,窗口大小、步长的确定有要求,通常窗口大小不少于采样频率2倍,为方便窗口中记录进行傅里叶变换,窗口记录数通常设置为2(kk为自然数)条,步长值通常为窗口大小的50%。

1.3 分类识别

运动行为识别是典型的分类问题,可采用机器学习、深度学习算法来实现,评价算法优劣的主要指标有准确率、计算用时等。经测试,传统机器学习中集成学习算法(如RandomForest[3]、XGBoost[4]、LightGBM[5]等)有不俗表现,准确度可达到95%以上,且用时少;深度学习算法(以Tensorfolow-GPU2.x为工具,采用Kerass构建全连接神经网络)表现也不错,准确率可达到94%左右,不足之处训练时间较长,但在构建特征向量方面有独特表现,可节省这方面的开销。

2 监测系统的组成及主要功能

该系统的工作流程包含数据的采集、传输、分析与处理,模型的建立、训练、评价、应用以及分类结果的保存与发布等系列流程,可分为三个部分,即:手机传感器数据采集与发送端、云端服务器、信息查看客户端,如图1所示。

图1 运动监测系统的组成

三者的执行顺序、功能不同,现说明如下:

2.1 被监测对象(老人)手机端

主要功能是:通过老人随身携带的智能手机,采集加速度传感器等数据,并发送到云服务器,但训练数据采集、分类数据采集两者有一些差异:

(1)训练数据采集包括智能手机的线性加速度传感器、加速度传感器的x、y、z三个方向数据及旋转向量传感器的矩阵数据,再进行适当运算,并加上分类标签,形成初始数据集,以文件方式存储在手机存储卡中,之后传输到云端服务器,这是老人运动行为分类模型训练的基础性数据;

(2)老人运动数据的采集,通过模型和数据,可对运动行为进行分类。采集数据的内容与(1)类似,不同点是没有运动分类标签。为展示系统的强大功能及实用性,还可划分为实时采集传输、采集后以文件方式存储再批量传输两种模式。

2.2 云端服务器

这是系统的核心部分,具备接收数据、处理数据、训练模型、分类识别、保存结果、发布信息等功能,具体如下:

(1)接收手机端发送过来的数据,包含实时传输和以文件方式批量传输两种模式;

(2)数据处理的基本方法,采用滑动窗口技术来处理时序数据,构建对分类结果有重要支撑作用的时域指标、频域指标,即以窗口为单位,对其中的数据分别计算acc_x、acc_y、acc_z、acc、acc1_x、acc1_y、acc1_z、acc2_x、acc2_y、acc2_z项的均值、标准差指标,对acc、acc_z两个重要指标,还要分别计算它们的最大值、最小值等时域指标,并选取各自通过傅里叶变换得到直流分量、全部频谱之和、主要频谱指标(取前16项)等频域特征,特征总数达60个;

(3)根据步骤(2)所述方法,对同一测试者同一运动行为的大量连续数据采用滑动窗口技术进行计算,得到包含时域指标、频域指标的新样本,加上分类标签,构建3个集成学习分类模型(即Random Forest、XGBoost、LightGBM)并进行训练,再将模型参数以文件方式保存在云服务器中;

(4)对老人的运动行为数据按步骤(2)方法进行处理,利用步骤(3)训练好的模型划分类别,将结果保存到数据库中。考虑到可能受通信质量影响,本系统具有实时分类识别、传输文件批量分类识别两种模式;

(5)建立Web 服务器,实时发布老人运动状态及某一时段内运动行为的统计信息,方便亲友查询。

2.3 信息查看客户端

老人的亲友、健康监护机构等登录系统后可通过网页浏览器查看老人的运动行为状态,包括:

(1)实时查看老人运动状态;

(2)查询某一时段内老人运动行为状态、各类运动统计信息等。

3 监测系统的实现

系统首先要执行的操作是采集、发送、接收传感器数据及运动标签,再处理、建模并训练,之后依据数据利用训练好的模型对老人的运动行为进行分类识别,分为实时识别、文件存储批量传输识别两种模式,之所以这样划分是基于手机通信质量提出的,信号好,采用实时模式;反之则先将数据存储在存储卡,后续再批量传输、识别,两种模式可根据实际需要在手机操作界面切换。两种模式主要流程如图2所示。

图2 两种工作模式的主要流程

3.1 云端服务器的选购与软件安装

服务器是系统的核心组成部分,其配置高低直接影响系统性能和响应速度,当然也要考虑成本问题。为满足用户随时随地上传数据、实时查询信息资料等要求,故选购云端服务器,而非本地服务器。本系统选购的是华为S6 弹性云服务器,主机规格为2核4 GB,带宽为5 Mbit/s,硬盘为40 GB,包年使用费用近700元。

服务器安装的软件有:操作系统为Windows Server 2018 标准版;在数据处理和可视化、人工智能等方面,Python 有独特优势,故安装Anaconda 3.5、Python 3.8、scikit-learn 0.20 等开发工具,数据库为MySQL 5.1,Web 服务器则选择Tomcat9.0。

3.2 训练数据的采集、传输和处理

训练数据通过操作智能手机APP 来实现,因要求较高,先以文件方式存储在存储卡,再发送到服务器进行处理。现以Android 手机为例进行说明:

3.2.1 数据采集

训练数据项有12 项:时间(精确到ms)、三类加速度数据(10 项)及分类标签,其中:线性加速度acc1、加速度acc1 的x、y、z三个方向数据可直接得到,合成加速度需要根据公式(1)计算得到:

而acc2 则由acc1 与旋转矩阵R_mat相乘得到,计算公式如(2)~(4)所示:

其中:i表示不同时点。

分类标签则通过点击APP 界面中的单选按钮来对应,真实运动应与标识内容相一致,如图3所示。

图3 训练数据采集操作界面

传感器的采样间隔为0.01 秒,每条记录包含12 个数据项,用逗号分隔开,存放在csv 文件中,文件名以“labeled_”开头、后面是提交的时间(精确到ms),容易区分。

3.2.2 手机端文件发送

需要与服务器约定、配合,这里选用Http协议中的HttpURLConnection 类来实现,传输文件的名称不变,可批量传输。需注意两点:①请求方式设为post,Content-Type 的值设“multipart/form-data”,并在其中约定好“分界符”;②文件传送是费时操作,不允许直接在界面上执行,解决方法是以多线程方式在后台执行;本系统采用继承轻量级异步类AsyncTask、重写doIn-Background()和onPreExecute()等方法来实现。

3.2.3 服务器端接收文件

由一个Servlet来实现,即在doPos(t)方法中接收手机端上传的多个文件,可借助apache 的fileupload 组件来完成,文件的存放位置可根据后续模型训练、分类识别的需要来定。

3.2.4 训练数据的处理

主要内容已在前面提及,现说明两点:

(1)滑动窗口大小的确定:根据奈奎斯特定理,采样频率不少于传感器取样频率的2倍,步长通常为窗口大小50%,还应考虑后续实时输出运动状态的间隔,例如传感器取样频率为100 Hz,则窗口记录大小可取为256,步长值为128,即由256 条记录(时长2.56 秒)生成一个新样本,前后窗口的距离为128 条记录(间隔为1.28秒);

(2)为方便计算,可将数据文件加载成Pandas中的DataFrame对象,通过调用mean()、std()、max()、min()等函数来计算时域指标;可引入scipy.fftpack 包进行傅里叶变换,得到直流分量、全部频谱之和、主要频谱等频率指标。

3.3 分类模型训练

经检验,传统机器学习中集成学习算法的分类准确度可达95%以上,且用时少,故本系统的分类模型选用RandomForest、XGBoost、LightGBM 三类算法。操作流程是:先安装好相关库,再建立模型,之后进行训练、测试。为方便后续直接使用已训练好的模型,需要调用joblib.dump()方法以文件方式来保存模型,分类时先用joblib.load()加载模型,再进行分类识别,以提高工作效率。

3.4 运动行为实时识别子系统

本系统的一项重要功能是具备对老人运动行为进行实时识别功能,操作界面如图4 所示。实时识别模式包含数据的发送、接收、处理、识别、保存等一系列操作,具有相当复杂度,前后环节需要密切配合才行,现介绍实现思路。

图4 运动数据采集 操作界面

(1)手机端、服务器端的数据传输采用TCP协议来实现。

以Android 手机为例,数据发送程序是用Java 语言编写的,而服务器端中数据处理、分类识别程序是用Python 语言编写的,选用TCP协议可以跨越编程语言不同这一道“坎”。具体做法是:服务器端先创建socket,并绑定好IP和双方约定端口,等待手机端请求;手机端以服务器端IP、约定端口为参数创建socket,发起连接;服务器响应之后,手机端连续发送运动数据,服务器端则持续接收数据、处理数据。

(2)服务器端中接收数据、处理数据程序的协调问题。

将它们写成函数,以线程方式运行。有时接收到的数据记录可能不完整,应舍去。存储数据的中间容器是一个指定大小(如5120)的list对象(每条记录包含11 个数据项),数据存入容器的位置、读取容器中数据位置分别使用int 型变量“写指针”“读指针”来指示,当指针指向最后位置的下一个时,指针通过取模运算可复位到0(即第一个位置)。还设置了“写入记录总数”和“读取记录总数”两个变量,用来标识已存入、处理的记录总数。

可将存入数据线程、处理数据线程看作是数据容器的“生产者”和“消费者”,两者之间存在着资源竞赛问题:当存入数据速度太快时,会出现容器中数据未被读取就被覆盖的情况;如果处理数据速度太快,则会导致容器中可读取数据的记录数不及一个滑动窗口的大小要求,这两种状态都应避免,解决办法是让运行快的线程进行适当休眼(如0.05秒),如图5所示。

图5 接收数据、处理数据线程示图

(3)分类操作并将结果存入数据库。

为避免分类结果受随机因素的影响,分类时分别利用已训练好的RandomForest、XGBoost、LightGBM 模型进行判别,并用“投票法”来确定结果,服务器终端输出分类结果如图6所示(输出结果不考虑手机的放置位置)。

图6 服务器终端显示的分类结果

可以看出:两个状态相隔约1.28 秒(步长值),输出结果要比真实的运动行为滞后2 秒左右,这是采用滑动窗口技术无法避免的。两种状态切换时的中间过渡期容易错分。

将分类结果存入数据库中,数据处理程序、Web 服务器利用数据库这一中介来传递数据;当数据库中的类别数据有变化时,通过查询操作能及时显现出来,利用数据库还可以进行统计分析。结果数据表信息如表1所示。

表1 tb_activities表的字段属性

3.5 运动状态信息的发布与查询

要让亲友等能够实时查看、远程查询老人运动行为状态等,可行做法是在云端服务器中安装Tomcat 等Web 应用服务器,从数据库中读取相关记录处理后再发布,用户通过电脑、手机等登录系统后即可随时随地查看。

本系统采用dao+pojo+servlet 技术来展示数据,dao 负责数据库连接、操作等;pojo 包含实体类Activity 和StateCounter;包含4 个servlet 程序,分别实现接收数据文件、查询某一时段内各时点运动行为状态、统计某一时段内各种运动行为的时间长度、实时查看运动状态等功能,项目结构如图7 所示,系统主页面如图8 所示。图9~图11 为查询、统计、实时查看示图,其中:运动行为时长=该类运动行为记录数×相邻窗口间隔时长(如1.28 秒),实时查看功能则采用定时(间隔为1秒)来刷新浏览器,从数据库中获取最新数据来达成。

图7 Web项目结构

图8 运动信息查询系统主页面

图9 某一时段各时点运动行为状态查询

图10 某一时段内各类运动行为统计时长

图11 某一时段运动行为状态实时展示

从上不难看出,通过系统三个组成部分的分工协作,亲友等能够通过手机、电脑等实时查看、远程查询老人运动行为,实现对老人的起居生活进行监测的目标。

4 结语

本文根据作者前期对“基于智能手机传感器的人体行为识别技术”进行研究、实践的成果,提出了老人运动行为监测系统的设计方案。这是一个具有实用性和中等复杂程度的应用系统,由老人手机端、云端服务器和客户端三部分组成,实现了从数据的采集、发送、接收、处理,到模型的建立与训练、分类识别及结果的保存与发布等一系列功能,涵盖了移动应用开发、数据分析与处理、机器学习、数据库、Web 应用开发等知识内容。开发难点主要有三个:①平台、编程语言的多样性问题;②数据传输的可靠性问题;③前后环节的协调性问题。开发过程中探索出选用跨语言、平台的协议(如HTTP、TCP)、数据库(如MySQL)及线程同步等方法来化解,取得较好效果。由于老人携带手机的习惯、时长因人而异,不能保证手机不离身,这客观上会影响系统的使用,后续改进方法可考虑将手机变换为携带方便的手环等微小设备,确保数据采集、发送的时效性和稳定性。

猜你喜欢

加速度服务器分类
“鳖”不住了!从26元/斤飙至38元/斤,2022年甲鱼能否再跑出“加速度”?
分类算一算
通信控制服务器(CCS)维护终端的设计与实现
分类讨论求坐标
天际加速度
创新,动能转换的“加速度”
死亡加速度
数据分析中的分类讨论
教你一招:数的分类
中国服务器市场份额出炉