基于IMU姿态传感器的游泳数据分析系统
2021-10-18王嵩张雨飞霍梅梅
王嵩,张雨飞,霍梅梅
(1.浙大城市学院,计算机与计算科学学院,杭州310000;2.浙大城市学院,浙大城市学院怀卡托大学联合学院,杭州310000)
0 引言
1 系统整体框架设计
本系统采用前后端分离模式,手机端有数据采集模块、数据管理模块;服务端有任务调度模块、任务处理模块、数据管理模块。服务器上算法使用Python,用Flask框架搭建服务器,后台接口使用Java,用Spring Boot+MyBatis-Plus搭建服务器,数据库采用5.7版本的MySQL云数据库。客户端数据管理模块流程图,将数据打包成JSON格式,采用HTTP 1.1协议上次服务器,服务器进行处理、调用算法服务,将结果返回客户端。
2 算法及后台设计及实现
2.1 传感器与数据识别现状
目前监测运动数据的主要方式为两种,一种是通过视频、图像等视觉方式获取,一种是通过加速度传感器获取[1]。基于视觉的方式主要是在运动状态识别上,对于运动数据的获取比较困难,如速度、计数等,另外也存在布置难度大、对环境光要求高、建设成本高等问题。
近些年来,智能手机和智能手表越来越普及,基于其内置的传感器来进行人体行为识别的研究越来越多。加速度传感器、惯性导航系统[2]被越来越多运用到运动健康等方面。文献[3]利用加速度传感器实现游泳监测系统。文献[4]把LPMS-B应用于机器人末端姿态测试。文献[5]采用陀螺仪、加速度计和磁强计组合的方法确定姿态。文献[6]设计了无线人体传感器网络的数据采集系统,
在运动识别领域,基于IMU的可穿戴传感系统[7],用于游泳泳姿识别和运动分析,重点研究下肢运动。文献[8]利用一个单一的防水无线运动传感器连接在游泳运动员的身体中心(背部)。文献[9]提出了一种基于HMM的动作识别方法。
在运动状态识别上,已经有研究者提出了多种分类的模型,文献[10]介绍了常见的用于运动数据采集的传感器和相应方法。文献[11]准确识别跑步姿势,帮助跑步者减少或避免因跑步姿势不当而带来的运动损伤。文献[12]提出一种优化的姿势识别算法。文献[13]提出一种深度图像骨骼跟踪的游泳运动员姿势识别校正方法。
目前国内主流的关于运动识别的研究主要集中在走路、跑步、摔倒检测[14]、康复医疗[15]等日常人体行为上。基于加速度传感器的游泳运动监测的技术研究及应用[16]主要集中在国外,国内现有的相关研究成果较少。而且大部分研究以使用移动设备自带的传感器获取数据,通过采集多个部位或者腰部的数据来实现,在实际运用中不符合用户日常习惯,所以本课题采用LPMS-B2九轴传感器(传感器),它大小适中,适合佩戴在手部,与常用的手环类似,符合用户日常佩戴习惯,易于推广。
LPMS-B2是日本LP-RESEARCH公司与广州阿路比电子科技有限公司共同研发生产的一款高性能微型无线传输型姿态传感器,利用蓝牙技术,可以轻松地与个人电脑、智能手机等设备通信,适用于机器人和人类动作的测量。
1.2.1 RNA-seq数据获取 人结肠癌细胞株SW1116瞬转miR-1254模拟体后24 h,通过TRIzol®提取细胞全RNA,干冰保存送检北京贝瑞和康公司测序。
2.2 数据采集
目前采集数据的设备主要以姿态传感器为主,本文选用的LPMS-B2九轴传感器功能强大,带有三轴加速度计、三轴陀螺仪、三轴磁力计以及气压与湿度传感器,体积小,方便用户佩戴,通过蓝牙通讯方便使用App连接。
游泳是一项涉及到许多部分的运动,早期研究会通过将多个传感器固定在人体多个部位,获取各个部分的加速度速度,来获得完整运动信息。这方法确实会提高识别率,可过多的设备对于佩戴者来说非常不适,且会影响到运动,实验成本也很高,因此本文通过一个传感器来获取加速度数据。
单个传感器采集的部位不同对结果也会产生很大影响。对于游泳运动,不同的泳姿,手和脚的运动特性较为明显,从日常使用角度看,手上佩戴传感器更符合人们的习惯,所以本文将传感器佩戴在手腕部来获取数据。
2.3 算法实现及服务部署
由于实际中,获取到的数据不是理想情况,会产生许多噪声信号,对此我们采用滤波对数据进行预处理工作,平滑加速度信号曲线,自定义一个滤波器类,设置归一化截止频率,返回一个低通滤波,利用该滤波进行平滑降噪,核心代码如下:
预处理过后的数据比之前更加平滑,如图1所示,可以提高计算的准确率。
图1某一段加速度数据比较
对于泳姿识别,以及其他数据计算主要通过滑动窗口来计算数据。
定义一个窗口帧数大小,通过滑动窗口,当窗口内数据的最大值与最小值之差超过阈值,找到最大值对于时间点,并且超过另一阈值,将时间点保存,窗口从下一个小于阈值的时间点开始;不超过阈值,则将窗口随时间点移动固定值。保存下来的时间点即游泳划臂一次的时间点,基于这些时间点,计算划臂次数、时间等数据,泳姿则通过阈值大小、最高与最小的差值、最大值的是否超过该泳姿的阈值来判断。将算法通过Flask[17],这个微型的Python开发的Web框架,将服务部署在服务器上。
系统除算法以外的后台服务使用Java的Spring Boot+MyBatis-Plus+MySQL部署在服务器。后台包含用户登录、用户注册、文件上传、历史记录查询、数据分析等接口,前后端使用HTTP协议通讯,数据传输使用JSON格式。在上传文件后会调用Python后台的计算接口,传入文件在服务器上的路径,通过Python计算出结果保存数据库。
3 移动端设计及实现
3.1 Android端
由于需要连接硬件,且应用场景一般不方便携带PC设备,所以本课题的展示采用Android原生开发,通过android.bluetooth下的各类包扫描、连接蓝牙,使用LPMS-B2的工具包,对传感器进行操作,获取传感器数据,再通过HTTP协议将文件上传服务器。
App页面布局使用LinearLayout、RelativeLayout等布局格式。首页使用FixedViewPager、Common⁃TabLayout实现底部tab导航栏。通过Fragment,设置首页、历史、我的3个页面。首页中通过Horizon⁃talScrollView实现横行滚动来选择不来同的模式,游泳知识则是通过Lottie来将JSON文件生成一个动画;历史页面通过HTTP请求获取历史记录列表,展示模式与对应图标、传感器记录时长;我的页面读取登录时缓存在activity上的信息渲染页面,如图2所示。
首页选择模式后跳转到蓝牙扫描页面,如图3所示,可以选择传统蓝牙扫描和低电耗蓝牙扫描,选中LPMS-B2的蓝牙点击连接,获取蓝牙信息并传参跳转到操作页面,通过LPMS-B2的工具包中的service进行配对和连接。
图2
图3 蓝牙扫描页面
在操作页面可以设置传感器的参数、实时显示传感器的数据、动画展示传感器正在进行的动作、离线缓存等函数操作。通过函数控制,将传感器中的数据读出并以csv格式存储在本地文件夹下,通过接口将文件上传到服务器,并计算该文件的数据,将结果保存到数据库。
历史记录选中某一条目时跳转到记录详情页面,如图4所示,展示该次游泳的泳姿、距离、时间、划臂、频率、配速、卡路里等一系列数据。
图4 历史记录详情页面
用户可以通过查看数据的方法对比自己的游泳数据,能够清晰直接地了解到自己的游泳是在进步还是落后,可以让用户能进行更加针对性的训练来提高某项数据。
3.2 iOS端
Apple新技术SwiftUI,提供了用于声明应用程序用户界面的视图、控件和布局结构。该框架提供事件处理程序,用于向应用程序传递敲击、手势和其他类型的输入,并提供工具来管理从应用程序模型到用户将看到并与之交互的视图和控件的数据流。使用App协议定义应用结构,并用包含构成应用程序用户界面的视图的场景填充该结构。创建符合View协议的自定义视图,并将它们与SwiftUI视图组合在一起,以使用堆栈、列表等显示文本、图像和自定义形状。将强大的修改器应用于内置视图和自己的视图,以自定义其渲染和交互性。在多个平台上的应用程序之间共享代码,并根据其上下文和表示方式调整视图和控件。
CoreBluetooth,核心蓝牙框架提供了应用程序与配备蓝牙的低能耗(LE)和基本速率/增强数据速率(BR/EDR)无线技术进行通信所需的类。
进入主页,如图5所示,点击右上方用户按钮进行登录注册,登录后右上方按钮会转变为用户头像,点击头像可以3D的方式显示出游泳能力,修改信息按钮以及退出登录按钮,点击修改信息可对用户的个人信息进行修改,点击退出登录用户即可退出登录。用户可通过横向HStack拖移选择3种不同的游泳模式,进入后通过App连接蓝牙设备LPMS-B2传感器。用户可将数据以蓝牙的形式传输到App,再由App发送请求到服务器处理,并获取反馈。此外,用户还可在主页学习一些游泳知识,该知识会每天定时更新,点击能进行交互。在历史记录页面,用户能查看自己的游泳历史记录,点击打开记录,查看详细数据,以及改进建议。
图5 iOS首页页面
4 结语
本文设计了基于单个LPMS-B2九轴传感器的游泳数据记录分析系统,用户佩戴LPMS-B2传感器在手腕,采集游泳时的加速度等数据,上传到移动端App,再上传服务器,计算出泳姿、划臂、时间、距离等数据,展示在移动端上。最后实验结果证明,系统识别准确率能够满足实际需求,该系统具有更低的开发周期与开发成本,具有一定应用价值。
文中不足之处在于对于泳姿识别率还可以进一步提高,还可以加大实验样本、优化算法和前端页面。