基于Android的儿童运动分析及监控系统设计
2018-01-15张华伟史久琛李啸宇董苏
张华伟,史久琛,李啸宇,董苏
(大连理工大学软件学院,大连116000)
0 引言
儿童时期是人一生中生命力最强、健康问题最少的时期,但也是意外伤害的多发时期。据意外伤害监测网络显示,在中国,意外伤害是0~14岁儿童受伤害的首要原因[1]。数据显示,我国每年大约至少有1000万儿童受到各种意外伤害,40万儿童因意外伤害成为残疾。意外伤害已是0~14岁儿童死亡的首要原因,中国0~14岁儿童意外伤害的伤亡率是美国的2.5倍,韩国的1.5倍[2]。因此,社会迫切需要对儿童的运动状态及安全状况有更全面的了解。父母作为儿童监护人,需要实时关注儿童的运动状态及安全状况。
1 研究现状
目前,国际上许多高校和研究所,如麻省理工学院、牛津大学等都专门设立了针对运动目标检测的研究组或者研究实验室。一些著名公司和研究机构,如IBM、Microsoft、麻省理工学院等近几年来投入了大量的人力物力进行智能监控系统的研究,部分成果已经转化为产品投入了市场。
目前在国内的研究机构中,中国科学院北京自动化研究所下属的模式识别国家重点实验室视觉监控研究处于领先地位。他们在交通场景视觉监控、人的运动视觉监控和行为模式识别方面进行了深入研究。国内其他高校如上海交通大学、北京航空航天大学也对这方面进行了研究[3]。
但是,现有研究仍有许多不足:
(1)市场上的产品主要基于成年人的运动状态以及健康情况的分析,在对于儿童的安全监测的方面存在缺失。
(2)对于儿童的运动状态,市场上已经出现的运动状态分析软件的功能大多数是不适用的,儿童最普遍的运动问题是跌倒,因此应从跌倒分析中对儿童的运动状态以及安全状况进行合理判断。
(3)大多数的国内外人体运动惯性传感器的研究中,应用软件中所反映的数据主要是对于使用者进行反馈,而对于儿童,这些数据需要及时反馈给家长。
本文基于上述问题提出了一种适用于儿童的运动数据统计分析方法,通过调研儿童的大量运动数据,以及检测儿童每日的跌倒信息,对儿童的运动状态以及身体安全状况进行合理判断。本文设计了基于Android的儿童运动分析及监控系统,在检测儿童运动状态的同时还实现了社交功能,可将儿童的运动数据及时反馈给家长,家长可以对儿童的潜在危险与健康情况做出快速反应,更好地保障儿童安全。
2 系统设计
2.1 系统架构
本系统主要包含儿童客户端、家长客户端、网络通信三个模块。其中,儿童客户端主要包含运动统计、儿童监护、社交活动三个子模块,家长客户端主要功包括数据处理、用户管理两个子模块,网络通信模块主要功能为在两个客户端之间进行数据的传输。图1为系统框架图:
图1 系统架构
2.2 儿童客户端模块设计
儿童客户端模块主要包含运动统计、儿童监护、用户管理三个子模块。
运动统计子模块主要是对儿童行走的捕捉,记录与统计每日步数、行走距离和热量消耗。通过图表等可视化方式来展示儿童的活动情况,并将数据保存至服务器,提供了准确可靠的数据支持。
儿童监护子模块主要包括跌倒检测和定位监测两个功能。通过对儿童跌倒行为的捕获,反映儿童运动的稳定性。通过对儿童进行位置监测,实时获取其活动的位置信息并进行范围限定,从而提高对儿童进行保护的安全系数。
用户管理子模块主要实现了注册登录与账号绑定两个功能,使得儿童客户端与家长客户端之间可以良好地进行数据交换,通过家长与儿童账号互相绑定,利用儿童监护子模块获取儿童的潜在危机,并向家长反馈。
2.3 家长客户端模块设计
家长客户端模块主要包括数据处理与用户管理两个子模块。
数据处理子模块是基于儿童客户端上传至服务器端的运动统计数据,家长客户端进行定时数据接收,并以图表形式进行数据展示,根据提示信息,家长可以快捷清晰地了解到儿童的身体状况。
用户管理子模块的注册登录功能可以确定唯一识别家长身份的标识,并可以存储一些必要的信息,账号绑定功能使得一个家长客户端对应多名儿童账号进行绑定,从而实现了对于儿童信息的获取。
图2 儿童客户端模块框架
图3 家长客户端模块框架
2.4 网络通信模块设计
网络通信模块主要包括如下三项功能。第一,儿童客户端将信息封装为JSON字符串,约定action为动作标识,将JSON字符串上传到服务器,服务器经过Java后台处理后将数据写入数据库,实现儿童运动数据的定时上传。第二,服务器数据库端建立Table{Children,Parents,Data}用来获取 Android端上传过来的JSON字符串信息,并将其分类录入对应的表格中。第三,家长客户端向服务器发送action为parents的JSON字符串,服务器查询与家长绑定的儿童运动数据,将结果返回服务器端,服务器将结果通过HTTP协议返回给家长客户端,从而使家长获得儿童运动数据。
图4为本系统的数据流程图:
图4 数据流程图
3 系统实现
3.1 儿童客户端
在儿童客户端中共有三个可以滑动的一级界面,如图 5所示。其中图 5(a)是“运动”界面图,图 5(b)是“监护”界面图,图5(c)是“我的”界面图。在“运动”界面中,主要功能是对于健康数据的统计并给出评价。在“监护”界面中,可以显示儿童在这一天中跌倒的次数并给出相应建议。底部有一个字样为“进入”的按钮,点击可以进入电子围栏的界面。“我的”界面中用于展示用户的个人信息以及进行一些App的设置。
图5 儿童客户端界面图
(1)健康数据收集
该模块可对近七天内儿童行走的步数、消耗热量、行走距离的综合统计,并最终给出评级以显示儿童的健康状况,并以直方图形式展示。
计步的实现主要是通过使用Android4.4新增的STEP_DETECTOR以及STEP_COUNTER传感器。其中STEP_DETECTOR是计步传感器,用于记录激活后的步伐数。STEP_DETECTOR是步行检测传感器,用户每走一步就触发一次事件。STEP_DETECTOR通过分析加速度计的输入识别用户何时走步,每走一步都会触发一个事件。
卡路里统计和距离统计基于用户的一些个人信息进行计算。行走距离计算采用公式(1):
其中D/m表示行走距离,STEP_COUNTER为行走步数,L/m为步长。
卡路里消耗采用公式(2):
其中W/kg表示体重,D/km表示行走距离。在儿童的统计数据达到要求后,对星级进行累加,对儿童行为进行最终评级。
(2)跌倒检测
跌倒检测功能是利用Android内置的加速度传感器accelerationSensor,仿照步数统计算法进行设计,并结合儿童运动的独有特征实现。首先设计后台服务类FallService,在OnCreate方法中通过函数getSystemService(SENSOR_SERVICE)获取传感器服务,并创建跌倒统计算法类FallCountDetector对象detector。之后注册监听器SensorEventListener,并在注册监听器的参数中设置监听对象detector、设置传感器类型TYPE_ACCELEROMETER、设置获取传感器信息的频率SENSOR_DELAY_NORMAL。在具体计数算法FallCount-Detector中,设定数值medumValue为判断跌倒的临界值,实时监测在三个坐标轴x、y、z方向的加速度acceleration_x、acceleration_y、acceleration_z。若此三个方向上的加速度的绝对值存在一个或多个大于medumValue,则视为一次跌倒,并在跌倒总统计数(FALLING_STEP)的原值基础上增加1,若不存在任一方向上的加速度绝对值大于medumValue,则视为一次普通震动,跌倒总统计数(FALLING_STEP)数值保持不变。
(3)地理围栏
地理围栏的功能是对儿童活动范围进行限定,一旦越界则向家长报警,本功能在高德地图API的基础上进行开发。首先在地图视图所关联的XML文件中添加MapView组件。通过AMap对象加载所有的地图信息,并与MapView对象绑定,实现基础地图的显示。
实例化一个MyLocationStyle的对象来进行定位的自定义,设置定位时显示的图标。调用AMap对象的setMy-LocationStyle方法,传入MyLocationStyle对象,完成自定义。实例化AMapLocationClient对象,传入上下文参数,进行定位初始化,并通过setLocationListener方法为该对象设置一个回调监听,当位置发生改变时,执行回调中的函数。调用该对象的startLocation方法开始定位。第一次进行地图加载时,获取到当前位置信息,作为地理围栏的中心,之后该中心不会改变,并自定义安全范围。实例化CircleOption对象,传入围栏中心位置经纬度坐标centerLatlng和安全范围的半径,调用AMap对象的addCircle方法往地图上添加一个自定义的圆形地理围栏图层。在位置变化的回调方法onLocationChanged中,参数为最新的位置信息AMapLocation对象。从此对象中获取到最新定位点的经纬度坐标endLatlng,调用AMapUtils的静态方法calculateLineDistance,传入centerLatlng和endLatlng,计算出儿童当前位置到地理围栏中心的距离。如果大于之前自定义的安全范围的距离,则进行示警,发送示警信号到家长客户端,通知家长采取相应措施。
3.2 家长客户端
家长客户端实现了与儿童客户端进行绑定、对于儿童健康数据的展示、对于儿童存在潜在危险性的示警、与儿童进行联系等功能。每个家长可以绑定多个儿童,在家长客户端进行注册和绑定后,家长客户端会将绑定的数据与用户信息存储在服务器端的数据库中。家长客户端会定期接收服务器端发送的儿童的多种健康数据,通过RecyclerView列表逐条展示;手机的通知栏中也通过Android中的Notification进行显示。在儿童离开地理围栏圈定的范围后,家长客户端会有示警提醒,包括弹出对话框与铃声报警。家长也可以使用界面中右下方的按钮,通过Android中的broadcast发送广播,直接使用手机中的拨号功能向儿童拨打电话,与儿童取得联系。
图6是家长客户端界面图,其中图6(a)是通知栏提示图,图 6(b)是儿童健康数据显示图,图 6(c)是拨号图。
3.3 服务器通信的实现
服务器数据库端建立Table{Children,Parents,Data}用来获取Android端上传过来的JSON字符串信息,并将其分类录入对应的表格中。其中Children表用于存储儿童的基本信息,包括儿童的注册ID、姓名、年龄、性别、体重、步长、绑定家长的ID、手机号等一系列信息;Parents表用于存储家长的基本信息,包括家长的注册ID、绑定儿童的ID、手机号等一系列信息;Data表则用于存储儿童向家长端发送的实时健康数据与危险性评估情况的相关数据。两个Android客户端通过JSON字符串进行数据库中数据的存储与下载,儿童客户端通过定时机制,一定时间定时向服务器发送数据,以更新数据库数据,家长客户端也通过定时机制,一定时间定时接收服务器的数据,以更新儿童的最新数据。此外,Children与Parents表通过主键与外键的约束以及一些验证机制保证绑定信息的无误性。
图6 家长客户端界面图
4 结语
本文设计了基于Android的儿童运动分析及监控系统,通过手机内置的传感器节点对儿童运动数据进行测量,然后通过卡尔曼滤波对基础数据进行处理,分析儿童运动状态。同时,利用高德地图SDK对儿童定位,实现了地理围栏功能,可以充分满足家长对儿童运动、安全方面监控的需求。
[1]王林清.儿童青少年对意外伤害认知和行为的调查分析[J].医学动物防制,2006(11):787-789.
[2]至铭.儿童意外伤害安全防范要做好[J].江苏卫生保健,2017(07):21.
[3]运动目标检测研究意义及国内外现状[R/OL].(2016,09,05)http://www.docin.com/p-1727702961.html