, ,张杰,,
(北京工业大学 信息学部,北京 100124)
近些年,因事故、疾病等因素,导致上肢运动功能障碍的人数逐年提升[1]。这些患者出现了不同程度的劳动能力丧失问题,有些甚至影响到了日常生活。对于这些运动功能障碍者,除了初期的治疗外,仍需要后续的长期康复训练。
研究表明,通过大量密集、重复的康复训练,病患可以最大限度的恢复机体功能,提高工作和生活自理能力[2]。因此,康复训练是必要的治疗过程,在上肢运动障碍疾病的治疗中具有非常重要的作用。
目前传统的康复训练方法主要是在医护人员的指导下一对一进行的,虽然这是效果很好的训练方式,但是它具有明显的缺点:1)受限于医护人员资源;2)训练过程枯燥;3)训练数据难以记录。
这些问题困扰着医生与病患[3-5]。因此,一种可自主进行训练、具有较高趣味性、对训练数据可以详细记录与查询的康复训练系统是当前的重要研究课题。
Saposnik等人基于任天堂Wii游戏系统开发了一个康复训练系统[6],用于轻度偏瘫患者的上肢功能康复训练。阿尔斯特大学的J.W.Burke、P.J.Morrow等人提出了一个基于视觉游戏的中风病人上肢康复系统[7]。汉诺威莱布尼兹大学的Bruckner H、 Bartels C,等人提出了基于惯性传感器的人体运动康复系统[8]。河北工业大学设计了结合主动和被动运动训练的跟关节康复系统用于踝关节的康复训练[9]。
然而这些系统并没有与互联网紧密结合。应用人机交互技术,结合互联网构建康复训练系统,是一种新颖的思路,具有广阔的应用场景。
本文设计的康复训练系统,利用动作采集技术,通过对人体动作的匹配,使患者在康复训练中与计算机交互,由计算机引导患者进行康复训练,摆脱了需要训练场所与专业人员的限制。通过互联网,病人的训练记录以及训练过程中采集到的运动数据可以方便的存储与查询,训练教练等专业人员可以随时查看病人的训练数据,追踪病人的训练情况。
系统的使用人员主要为两类:患者与医护人员。系统为患者提供PC端软件,可用它进行自主康复训练;为医护人员提供康复训练数据管理系统,可通过浏览器查询病人的训练记录与相关数据。PC端软件会将患者训练过程中的数据发送到训练数据管理系统进行记录。整个系统的结构如图1所示。
图1 系统结构
PC端软件通过Kinect传感器采集患者训练过程中的运动数据,并通过USB传输数据。PC端软件利用运动数据计算出姿势、动作的匹配结果,通过图形界面指导病人进行康复训练以及康复游戏。对于病人的训练记录数据,PC端软件通过HTTP协议将数据发送到训练数据管理系统,存储到数据库。
通过浏览器可以访问训练数据管理系统。浏览器向系统服务端发起HTTP请求,接收到请求后,服务端查询数据库中满足条件的数据,并将结果数据渲染为HTML代码,响应给浏览器。浏览器将HTML代码渲染为可视化页面,展示给用户。
系统功能模块如图2所示。
图2 系统功能
整个系统主要包括两部分:PC端与康复训练数据管理系统。
PC端功能包括康复训练、康复游戏、动作录入。康复训练是计算机指导患者进行自主康复的功能模块,训练过程中系统播放标准动作,患者需做出相同的姿势动作。模块计算出患者动作与标准动作的匹配度,若匹配度满足要求则进行下一动作的训练,否则需重试;康复游戏模块构建3D游戏场景,利用康复训练的匹配结果作为输入信号,对游戏内的物体进行驱动,使患者与游戏场景进行交互。动作录入模块用于采集标准动作的数据,提供给康复训练与康复游戏。
康复训练数据管理系统包括动作管理、训练管理、训练记录管理3个模块。动作管理模块提供标准动作数据的查看、删除操作,从PC端动作录入模块录入的标准动作可在本模块中管理。训练管理模块用于编辑训练信息,利用已有标准动作构建训练。训练记录管理模块用于查看病患的训练记录数据,提供了表格、折线图、柱状图3种可视化方式。
Kinect是微软发布的一款体感设备[10-11],集成了许多计算机视觉技术。Kinect传感器包含一个红外发射器、红外接收器、RGB摄像头,当人进入Kinect的视角范围时,Kinect会以每秒30帧的速率采集彩色视频流、深度视频流。Kinect把人体分为32部分,使用随机决策森林的分类算法与概率近似度的匹配方法,识别人体关节点,生成人体骨骼数据[12-13]。每帧骨骼数据包含20个人体关键关节点的空间坐标信息,如图3所示。
图3 人体骨架关节点
20个关节点分别为:头部、肩部中心、左手、右手、左手腕、右手腕、左肘部、右肘部、左肩、右肩、脊柱、髋部中心、左髋、右髋、左膝盖、右膝盖、左脚踝、右脚踝、左脚、右脚。每个关节点的数据包含x、y、z三维空间坐标,Kinect的世界坐标系是右手坐标系,其中,Z轴正方向为Kinect传感器的朝向方向,Y轴正方向为正上方方向,X轴正方向为Kinect的左方向。
静态姿势为人在某一帧的骨骼状态,基于Kinect采集到的人体骨骼关节点坐标数据,本文提出了一种上肢静态姿势特征的计算方法。
本文采用4个向量来描述人体上肢,即左肩-左肘、左肘-左手、右肩-右肘、右肘-右手腕这4个向量作为特征来描述一个静态姿势。两个动作的相似度,由四组对应向量的余弦相似度来表示。
采用这种方式的优点为:
1)向量的平移不变性,可保证不同的位置不会影响相似度。
2)两向量的余弦相似度仅与两向量的夹角有关,与向量的模无关,此性质可保证不同的身材不会影响相似度。
通过Kinect获取左肩、左肘、左手腕、右肩、右肘、右手腕这6个点的坐标。设某个向量起点关节、终点关节的坐标分别为(x1,y1,z1)、(x2,y2,z2),则对应的向量为:
v=(x2-x1,y2-y1,z2-z1)
(1)
分别计算四组向量的余弦相似度,对于两个向量a(x1,y1,z1)与b(x2,y2,z2),余弦相似度为:
(2)
余弦相似度的取值范围为[-1,1],当值为1时两向量方向相同,相似度最高;值为-1时两向量方向相反,相似度最低。为了方便求和运算,本文采用1-cos的值作为两向量的相似度,将余弦相似度映射到[0,2]上,其值越小相似度越高。故最终相似度的计算公式为:
(3)
对于两个动作的匹配,本文采用的方法为:计算两个动作对应的四组上肢向量的相似度Sim1、Sim2、Sim3、Sim4,当且仅当4个的相似度均满足某个阈值条件时,两个姿势匹配成功,否则匹配失败。
此阈值越低则对两个姿势的相似度要求越高,经过试验表明,将此阈值设置为0.1能取得较好的效果。
动作是一组静态姿势的序列,每一帧都是一个静态姿势。本系统的训练策略为训练者模仿标准动作,将病人的实际动作与标准动作进行匹配,故采用帧匹配的方法,每组对应的帧之前计算相似度,最后计算所有对应帧相似度的平均值作为两个动作的相似度。
然而对于同一个动作,由于动作快慢的因素,两个序列可能长度不同,且不同的运动节奏也会导致两个动作序列在时间轴上有一定的差异,帧不是简单的按顺序一对一对应关系。采用动态时间规整算法DTW(dynamic time warping)可以找到两个序列最佳的对齐方式。
DTW是在孤立词语音识别中最简单有效的算法,基于动态规划(DP)的思想,解决了长短发音不同的模板匹配问题,是语音识别中出现较早、较为经典的一种算法,有着广泛的应用。 算法利用动态规划的思想,寻找两个不同长度序列的最小匹配路径,匹配路径上的点就是两个序列的对应关系。DTW算法可以消除时间轴上的差异,规整时间轴,找到最佳对齐方式[14]。
设有两序列R、T,长度分别为M、N:
(4)
记Rm与Tn之间的距离为d(Rm,Tn),简写为d(m,n),1≤m≤M,1≤n≤N。对齐的Rm与Tn,表示为a(m,n),则连个序列对齐的路径A可表示为:
A=a1,a2,…,ak,…,aK
max(M,N)≤K≤M+N
(5)
则两个序列的匹配距离为A的累积距离为:
(6)
对于路径A,有以下3个约束条件:
1)边界约束:路径必须从起点(1,1)到达终点(M,N)。
2)单调性约束:路径保证时间顺序单调不减,对于两个匹配ak-1(m,n)、ak(x,y),则存在m≤x,n≤y。
3)连续性约束:m和n只能依次增加0或者1,即(m,n)后的点必须是(m+1,n)、(m,n+1)或(m+1,n+1)中的其中一个。
具有最小累积距离的路径是最优规整路径,满足上述约束条件,DTW的递推公式为:
(7)
两个序列的匹配路径与对齐关系如图4所示。
图4 匹配路径与对齐关系
Kinect采集的动作序列为30帧/秒,由于每两帧之间相隔时间过短,差异过小,故每3帧抽取1帧,即每秒抽取10帧。两姿势帧之间的相似度d(m,n)用4对四肢向量的相似度平均值来表示,即:
(8)
最终求得路径上的累积相似度和D(R,T),路径长度Len(R,T),则路径平均相似度为:
Meand=D(R,T)/Len(R,T)
(9)
若路径的平均相似度小于阈值时,则两个动作匹配成功。经过试验表明,将此阈值设置为0.05时,匹配精度与完成难度能达到较好的平衡。
系统会实时采集训练者的运动数据作为样本数据与模板动作进行匹配。模板动作由康复教练录入到系统,动作的起点和终点可人工进行选择。而对于在训练过程中实时采集的样本数据,则需要找到动作起点和终点。
在本系统中,起点和终点的判定策略如下:当前的实时姿势与模板动作的起始姿势相匹配时,则将此姿势标记为起点;在起点已标记的情况下,若3秒内姿势的变化程度很小,即认定为没有变化时,则将3秒前的姿势标记为终点。
终点标记成功后,样本动作数据为起点、终点间的姿势序列数据。
PC端的功能模块与数据流如图5所示。
图5 PC端功能模块与数据流
其中,Kinect通过 USB连接到计算机;数据接收模块采用Kinect SDK提供的事件模型获取骨骼数据;姿势向量模块计算出上肢姿势向量后,将向量数据发送到姿势匹配、动作匹配、动作采集模块,通过消息队列、采用生产者-消费者模式进行数据的传输与处理,生产者为姿势向量计算模块,消费者为姿势匹配、动作匹配、动作采集模块;由于姿势匹配、动作匹配与康复游戏之间存在环境隔离,且只需要发送识别结果,数据量较小,因此采用TCP协议,通过Socket进行数据的传递;PC端各模块与数据管理平台之间通过Http协议,采用json数据格式进行数据的传递。
PC端为患者提供了康复训练、康复游戏两种方式。康复训练方式,会在窗口上显示要完成的标准姿势、动作,当病患完成的动作与标准动作匹配成功或超时,则会进行下一个动作的练习;训练的所有动作都完成后训练结束,如图6(a)所示。
在动作训练过程中,Kinect实时采集姿势帧数据,在某个时刻会有3种状态:初始、开始、结束。其中,初始状态存在于开始动作采集且还没有标记到动作起点的时刻;开始状态存在于已标记动作起点且还没有标记到动作终点的时刻;结束状态存在于标记终点后的时刻。
最初,系统处于初始状态;在初始状态下,当动作起点标记完成后进入开始状态;在开始状态下,当动作终点标记完成后进入结束状态;在结束状态下,起点与终点之间的动作数据会与模板动作进行匹配,匹配完成后则再次进入初始状态,开始新一轮的动作数据采集。
康复游戏采用Unity3D平台进行开发,采用赛跑的游戏策略,控制人物与猫进行赛跑。游戏可以选择简单、一般、困难3个难度,难度越高猫的移动速度越快。游戏接收姿势、动作匹配模块的匹配结果,当匹配成功时会控制游戏人物角色前进3秒,时间可累加。若控制的人物角色先到达终点则游戏胜利,否则游戏失败,如图6(b)所示。
图6 PC端软件界面
角色的前进包括两部分:空间位置的移动与角色动画的播放。在改变角色坐标的同时播放角色的奔跑动画,便可实现角色的前进效果。
累积前进时间每秒都会减1,若累积时间大于0角色会前进,当累积时间减至0则停止前进。累积时间的自动减少通过Unity中的协程(IEnumerator)来实现,协程执行的程序会提交到主线程中运行,因此不会导致线程不安全的问题。
本游戏的跑道在Unity场景的世界坐标系中是沿着Z轴方向的,因此可通过判断角色位置的Z坐标是否超过终点线的Z坐标来判别是否抵达终点。
医护人员可以利用动作采集功能,向系统录入标准姿势、动作。点击采集页面上的开始按钮会开始采集数据,点击停止按钮会停止录制。录制完成后可以调节两个滑动条分别选择起点、终止帧,在输入框输入名称后上传姿势、动作。上传的姿势是起点帧对应的姿势,上传的动作为起点、终点帧之间的动作。
数据管理系统采用MVC模式,将程序分为三部分:模型(Model)、视图(View)、控制器(Controller)。Moel层用于实现系统功能的处理逻辑;View层用于实现用户与页面的交互逻辑;Controller层是Model与View之间的桥梁。MVC模式实现了系统的职能分工,降低系统的耦合性[15]。
数据管理系统使用SSM框架进行开发。SpringMVC框架负责请求的转发,根据请求的URL调用相应的处理方法处理请求;MyBatis框架负责对象关系映射,使得数据库的操作更加的便捷;Spring框架作为Bean容器,提供了IOC与AOP的特性,接管了对象的创建、组装工作,使得程序的开发更加的便捷。3个框架整合后简化了程序的开发工作。
数据管理系统提供了权限管理、动作管理、训练管理、训练记录管理的功能。
权限管理是管理系统的基础模块,用于区分限制不同用户的功能与数据的操作权限。在本系统中,用户的角色分为3种:系统管理员、医护人员、病患。系统管理员能够创建用户、分配用户角色、为病患用户分配医护人员;医护人员可以查看病患信息、姿势数据、动作数据、训练数据、训练记录数据。对于病患信息、训练记录数据,医护人员只能查看分配给自己的病患的数据。
动作管理用于管理录入的标准姿势、动作,提供了查看、编辑、删除的功能,如图7(a)所示。
训练管理可以让医护人员利用已有的标准姿势、动作,自由组合搭配,构建康复训练,如图7(b)所示。
图7 数据管理系统web端界面
训练记录管理可以查看病患的训练记录,包括病患在某次训练中每个动作的用时、完成情况数据,如图7(c)所示。此外,系统提供了柱状图与折线图的数据可视化方式,可以查看指定病患历次训练的训练总用时、完成度趋势折线图,以及某次训练各中各动作的用时、完成度柱状图,分别如图7(d)与图7(e)所示。
本文设计的系统包含PC端与训练数据管理系统两部分,PC端提供给患者,用于进行自主康复训练;训练数据管理系统可以记录、管理训练动作数据及病患的训练记录,并在WEB端提供多种可视化方式供医护人员查看数据。经实验,本系统可以供病患进行自主康复训练,并能够有效地解决医护人员资源限制、训练过程枯燥、训练数据与记录不易管理等问题。综上,本文所述基于Kinect的上肢康复网络系统,在病患康复训练方面有着广阔的应用场景。