APP下载

基于Kinect的坐姿意图判断及其应用研究

2018-10-24吴剑锋马梦鑫蒋濛婷

计算机应用与软件 2018年10期
关键词:被试者坐姿骨骼

吴剑锋 马梦鑫 蒋濛婷 罗 凯

(浙江工业大学 浙江 杭州 310023)

0 引 言

Kinect的发布到现在,有很多跨领域的研究人员参与其中,用它来解决如医疗健康、教育、军用、康复训练及日常生活等各个领域的关键性问题。

也有不少研究人员质疑Kinect的精度问题,认为Kinect无法满足众多科学研究领域。为此,吴纬莹[1]等对Kinect开展精度测试实验,实验采用Kinect与高精度运动捕捉设备NDI Optotrak同时进行人体运动捕捉,实验结果表明Kinect的识别精度误差和稳定性都在cm级。谷军霞[2]等对行为进行了进一步的分析,对于行为描述问题和行为识别问题进行分析,综述了行为分析的各种算法。算法方面,孟明[3]等通过改进Vi Be算法解决Kinect识别的鬼影问题,能比较准确地检测出人体的运动。李诗锐[4]等在Kinect v2的基础上设计了一套有效的去噪算法,提高重建系统的质量,实现了新一代Kinect重建系统。

利用Kinect的人体运动数据捕捉来辅助椅子的设计,罗凯[5]做了相关的研究。郑泽铭[6]利用Kinect的深度摄像机,设计并实现了基于人类认知模型的健康坐姿劝导系统和应用,并验证其可行性。顾军华[7]等利用Kinect摄像头的骨骼关节点识别功能对人体进行建模,并利用神经网络实现动作识别,提高识别率并降低了训练网络的迭代次数。战荫伟[8]等进行了进一步的研究,通过两点法计算角度的大小并定义人体姿势库,并与姿势库进行角度匹配实现姿势识别。文献[9]设计了安置了四个压力传感器的智能椅,验证并总结了不同反馈方式的效果。随着智能硬件和传感器的集成发展,现在市场上也有不少相关产品,如Misfit Shine、MYO等。

而针对坐姿矫正,前人做的都是通过各类传感器和智能系统来对坐姿做出判断后,给予用户的是一种提醒方式,并没有实现实时的纠正。王颖[10]等设计了基于坐姿监督的智能视力保护仪。而本文利用Kinect对坐姿行为进行判断后,直接通过UART与内嵌单片机系统的智能椅进行数据通信,从而实现实时的椅子角度调整,贴合用户肢体,做到有效支撑,即可防止用户长时间的不正确坐姿产生。

1 Kinect 对坐姿意图的判定方法

1.1 坐姿意图观察实验

坐姿意图即通过观察被试者的坐姿,判断被试者的意图,即工作状态。对抽取的20名工作人员和学生进行坐姿观察,观测实验中在观测者的侧面关节节点贴上标签,位置选择分别为:头部的耳屏处、颈部中心点、腰部的腰椎处、臀部的骶椎和腿部的膝关节处。实验中采用传统摄像技术对每位观测者进行20 min的无阻碍拍摄,对观测实验结果影像进行分析发现,不管是工作人员还是学生,在整个观测过程中都有固定的几个坐姿行为。如图1所示,学生的坐姿可分为作业坐姿(a)和听课坐姿(b)两类,而工作人员的坐姿可分为休息坐姿(a)和工作坐姿(b)两类,这与陆剑雄[11]研究相符。

(a) 作业坐姿

(b) 听课坐姿

(c) 休息坐姿

(d) 工作坐姿图1 用户坐姿行为分类

1.2 坐姿意图判定因素选取

观测实验结果表明,用户在座椅上的一系列坐姿行为转换过程中,颈部和腰部以及背部的角度会发生明显的变化,通过Kinect对用户坐姿进行骨骼运动捕捉,并通过processing编程获取被测试者颈部和背部角度,然后将测量数据与观察实验结果进行比对分析,即可得出颈部和背部的角度值变量是区分用户不同的坐姿意图的主要因素。

从图2中可以看到在利用Kinect对观测者进行观测采用的是侧面观测法,因为侧面观测法比较有利与骨骼角度测量算法的优化,Kinect的骨骼数据是3D的,有X、Y、Z三轴坐标,利用向量来进行角度测量时会多个Z轴的误差数据。而运用侧面观测法,即可以认定Z值为恒定值,只需计算二维向量角度值。

(a)

(b)图2 Kinect骨骼运动捕捉图

但是,由于Kinect原始算法中主要针对的是正面检测,因此,采用侧面观测法又会存在一个遮挡问题,左右手和脚的相互遮挡以及手与身体部位的遮挡,遮挡会导致骨骼数据不准确,使测量结果的误差偏大。本文采用信心级别检验方法,即在利用Kinect进行骨骼数据链接显示时考虑每个关节的信心得分:信心得分满分为1分,表示完全无遮挡;当信心得分大于0.5时,表示部分遮挡,不影响准确性;当信心得分小于0.5时,OpenNI会采用猜测的方法来画关节点的位置,这样就会出现肢体错位现象。而本文在根据信心得分划分阈值,不执行低于阈值的骨骼关节点的连接过程,避免错位问题,其信心检验算法流程如图3所示,通过信心级别检验,当出现骨骼遮挡时,绘制出的关节点如图4所示。

图3 信心检验算法流程图

图4 信心检验骨架图

2 Kinect 对坐姿意图判定的关键技术

2.1 免标定追踪技术

进行人体骨骼运动数据捕捉过程,为了能比较准确地获得人体骨骼数据,一般都会采用摄像头标定。而Kinect采用的是免标定追踪技术,运用的是质心检测方法,OpenNI会将每个检测用户作为质心,不需要去确定是否已在Kinect的被检测范围内。

质心是位于检测用户躯干的中央,只要用户在检测范围内,OpenNI就会自动提供用户的质心,不再需要去访问用户像素来计算质心,如图5所示。

图5 用户质心检测图

2.2 骨骼角度算法

本文利用Kinect进行人体骨骼运动数据测量采用的是侧面观测法,在二维平面空间内,把人体侧面头部、颈部、肩部、脊椎中部、尾椎5个骨骼关节点两两连线,从而形成颈部和背部的两个测量角,这同时也是本文进行用户坐姿意图判定的两个主要变量因素,如图6所示。α是头部与颈部两点形成与水平坐标轴形成的夹角,而β是脊椎即肩部中央,脊椎中部和尾椎连线与水平坐标轴形成的夹角,本次测试通过α和β一起来判定用户坐姿行为。

图6 颈部和腰部骨架角度图

根据二维空间的骨骼关节点HEAD的JointType(x1,y1) 、NECK的JointType(x2,y2),SPINE的JointType(x3,y3),根据如下求角转换公式进行α角度的计算。

(1)

本文采用的是Processing的SimpleOpenNI库中,除了SimpleOpenNI库里的各种方法,Processing本身也自带有非常庞大的数学函数库,其中就提供了求方位角的函数方法,即直接使用函数语句atan2(y,x),可以方便的求出α角的值,其主要代码实现如下:

float X_Head=joints[KinectPV2.JointType_Head].getX();

float Y_Head=joints[KinectPV2.JointType_Head].getY();

float a=(Y_Neck-Y_Head)/(X_Head-X_Neck);

//求tanβ的值

float b=atan2(abs_Y_Head,abs_X_Head)*180/PI;

//获取β角的值

β角是由Neck和SpineBase的连线与水平坐标轴相交而成。与α角测量计算相似,通过Kinect测得Neck与SpineBase骨骼点的坐标,计算公式如下:

(2)

在Processing中,其实现代码与α角原理相同。

3 坐姿意图判断对比实验

根据上述描述,Kinect能够实现质心追踪技术和骨骼点角度测量。对比实验过程采用一台Kinect红外摄像头和彩色摄像头同时对一个用户进行坐姿检测,其中红外摄像头来检测用户骨骼点的角度,通过程序算法设定计算出目标角度;而彩色摄像头则直接记录用户在工作过程中的整个坐姿行为,最终两者进行对比,从而来验证Kinect对坐姿意图判断的准确性。

整个对比实验过程中,找来10个观察用户对象,通过上述的方法分别对其工作过程进行检测观察,在整个观测过程中,随机的抽取几个时间段来进行判断验证。

通过实验可获取10组数据,每组数据分别由颈部角度和背部角度组成,将获取的数据进行分析,获取头部与背部的角度曲线。随机抽取一名被试者,将Kinect检测出来的头部和背部角度跟彩色摄像头的录像进行对比,分别绘制出角度曲线如图7所示。

图7 头部与背部角度变化曲线(被试者1)

从图7的曲线可以直观地看出头部和背部角度随时间变化的趋势。并且通过观察,Kinect检测出来的角度与彩色摄像头录像的角度曲线走向基本一致,例如图中圆圈处的拐点,此时背部角度保持不变,头部角度变大,观察彩色摄像头录像发现,此时被试者处于休息状态;从曲线图中随机选取一个时间点(图中虚线位置),对比彩色摄像头录像如图8所示,被试者头部角度约为α约为85°,背部角度β约为97°,即被试者处于休息状态,二者结果一致。

图8 被试者1交叉对比

将10名被试者的Kinect检测数据与彩色摄像头图像进行交叉对比,每隔5 min进行一次人工检测,对比录像与Kinect自动检测角度,获得如表1所示。

表1 Kinect与人工检测角度对比

根据观察实验对象,当被试者背部角度大于90度时,被试者处于休息状态,当被试者背部角度小于90度时,即被试者处于工作状态。对表1分析得知,Kinect能够准确地判断出被试者的坐姿,准确率达到97%;测量精度方面,其标准误差为3°,在可接受的范围内。

4 坐姿意图判断的应用研究

用户在使用现有的座椅进行一系列的坐姿行为过程中,由于座椅不能进行相应的自动调节,从而无法有效地贴合用户身体的相关部位,如头部、背部和臀部,在长时间的工作和学习过程中,用户身体在没有合理的有效支撑势必会发生肢体的不正确弯曲,长此以往就会导致脊柱变形、腰酸背痛、颈椎病和腰椎病等一系列慢性疾病。

根据上述实验已经验证,应用Kinect的角度测量算法是可以精确地判断出用户的坐姿意图,利用这个方法,可以应用在如工业设计、医疗康复、教育等各个领域。本文以陈凯歌设计的儿童坐姿矫正椅[12]为例,应用Kinect来做产品开发过程中的验证判断。

上述实验已经得出颈部和背部的角度值为判定用户坐姿行为的两个主要变量,这也是设计矫正椅的重要决定因素。陈凯歌设计的坐姿矫正椅主要功能是为适应用户的各种坐姿行为来自动做出相应的调整,与用户当前坐姿合理接触,做到有效支撑,从而防止用户肢体的不正常弯曲。

吴新林[13]的研究表明,用户在前倾状态下,最佳坐姿为座面前倾10°且躯干与大腿夹角100°,后倾状态下,最佳坐姿为座面后倾5°且躯干与大腿夹角115°。根据此研究结论,为了能贴合用户的坐姿行为,矫正椅的椅背和椅面是可以自动调整的,分别通过两个直流推杆电机来控制,而控制运动的两个电机固定在一体的支架上,此坐姿矫正椅的各结构部件如图9所示。

图9 坐姿矫正椅结构部件示意图

Kinect获取并判断用户的坐姿行为,通过UART协议传输给单片机控制器,再由单片机来计算出矫正椅上点击所需运行的时间以及运行的方向。坐姿矫正椅工作流程如图10所示。

图10 坐姿矫正椅工作流程图

原型机测试实验表明,Kinect能够检测出来的头部与背部角度,判定出用户的意图,从而对座椅进行调节,适应用户的坐姿。如图11所示,当被试者处于姿势(a)时,Kinect能够准确检测出被试者的坐姿意图为作业姿势,从而控制单片机将座椅的椅面与靠背进行相应的调节;当被试者处于姿势(b)时,Kinect同样能够控制单片机进行相应的调节。

(a) 作业姿势 (b) 听课姿势图11 原型机真人测试

5 结 语

根据相关文献整理和实地的实验调查,对不同用户的坐姿行为进行了分析。通过Processing结合SimpleOpenNI编程技术实现对用户坐姿行为的判断,并通过UART通信和单片机控制原理来进行反馈调节,从而实现对用户坐姿变化的实时调整。本文结合坐姿矫正椅的原型机,采用真人测试。测试结果表明,针对不同坐姿状态,Kinect可以进行有效识别和反馈调节。

猜你喜欢

被试者坐姿骨骼
做家务的女性骨骼更强壮
三减三健全民行动——健康骨骼
坐姿好习惯
德西效应
坐姿矫正器
学生作业坐姿及台灯控制器
德西效应
基于坐姿感应的智能视力保护台灯设计
儿童花生过敏治疗取得突破
为什么我们会忍不住发朋友圈?