基于双目视觉的实时坐姿检测研究*
2022-06-28郑佳罄石守东胡加钿房志远
郑佳罄, 石守东, 胡加钿, 房志远
(宁波大学 信息科学与工程学院,浙江 宁波 315211)
0 引 言
在日常学习、工作与生活中,坐姿是人们最主要的姿态,坐姿检测有助于减少不良坐姿造成的近视、颈椎病、脊椎弯曲等健康问题,也可以辅助教师观察课堂教学中学生的学习行为,另外,其在自动驾驶领域也有一定的应用前景。目前,坐姿检测的研究方法主要分为基于接触式传感器与基于计算机视觉两方面[1]。接触式传感器的坐姿检测方法主要基于压力传感器[2,3]、加速度计[4,5]及表面肌电信号[6]等进行研究,这类方法测量数据精度较高,但数据单一,并且传感器设备需要人体接触,可能会因磨损或挤压等因素而损坏,从而导致无法收集信息。而基于计算机视觉的坐姿检测算法可扩展性高、信息丰富且更加灵活,适合实际应用。随着深度图像传感器的发展,研究者们开始关注人体骨架信息在坐姿检测方面的优势,然而此类方法大多利用Kinect来提取骨骼关键点,过于依赖设备[7],且成本较高。
为了解决上述问题,本文采用骨骼检测算法,利用双目摄像头代替Kinect,实现低成本、实时的坐姿检测。
1 系统框架
本文提出的实时坐姿检测方法的流程如图1所示,首先对双目摄像头进行标定,然后利用其获取实时的坐姿图像,从中提取出左眼、鼻子、脖子、左肩以及右肩5个骨骼关键点,接着计算出眼部关键点的深度信息,最后利用骨骼关键点的相关信息进行9种坐姿的检测,9种坐姿包括距离过远、距离过近、头部左倾、头部右倾、身体左倾、身体右倾、肩膀不平行、驼背以及正确坐姿。
图1 坐姿检测流程
2 相机标定
由于受到制造工艺、环境等因素的影响,相机中不可避免地存在畸变和误差[8],为了确定相机的内参和外参,从而校正畸变,计算图像深度,需要对相机进行标定。文献[9]对比了三种常用的相机标定方法,其中张正友标定法[10]因其标定精度高、操作简单、鲁棒性好等优点,被广泛应用,因此,本文采用张正友标定法进行相机标定。
如图2所示,使用双目相机,通过不同角度下棋盘格模板的图片进行标定,为了使标定的结果更加准确,共采集30组图片。
图2 相机标定过程
3 特征提取
3.1 骨骼关键点
文献[7]对比了目前主流的两种骨骼关键点检测方法OpenPose[11]和AlphaPose[12],通过分析两种方法的优缺点并结合研究需要,本文选择受光线影响较小、在近景中表现较好且速度较快的OpenPose进行骨骼关键点检测。
典型的人体骨架模型包括18个关键点,由于本文检测的坐姿主要依赖腰部以上的关键点,为了减小计算量,提高运算速度,将模型简化,只保留左眼、 鼻子、脖子、左肩、右肩5个关键点,由关键点坐标可计算出各个关键点之间的距离以及脖子与肩膀的夹角,如图3所示。
图3 人体骨架模型简化
对相机采集的双目图像进行骨骼关键点检测,结果如图4所示,简化后的算法可以成功检测5个关键点,且左、右关键点对应。
图4 骨骼关键点检测
3.2 关键点深度信息
半全局立体匹配[13](semi-global matching,SGM)算法被提出以来,因其兼顾实时性与精确性一直受到广泛关注和研究,是目前综合性能较优的几个算法中最为主流的匹配方法[14]。原始的SGM算法利用互信息计算匹配代价,计算原理较复杂,效率不高,因此基于Census变换[15]的方法被广泛用于匹配代价计算。Census变换利用中心像素点与其邻域像素的相对灰度关系来计算汉明距离,具体计算方法如下
(1)
(2)
(3)
式中p=(x,y)为左图中尺寸为w×h的窗口内的中心像素点,q为p邻域内的像素点,I(p),I(q)分别为对应点的灰度值,⊗为按位连接,d为视差值。先按式(1)将中心像素灰度值与其邻域像素灰度值进行比较,再按式(2)将获得的布尔值连接,得到点p的Census编码串,然后计算点p在右图中,视差为d的对应点的Census编码串,最后将两个编码串的汉明距离作为点p的初始匹配代价。这种方法简单易实现,但由于直接将窗口中心像素点的灰度值作为参考值,过于依赖中心像素点,对噪声较为敏感,为了解决这个问题,本文对上述编码过程进行改进。
图5 切尾均值计算示意
如图5所示,以3×3的窗口为例,将点pn(n=1,2,…,8)按灰度值I(pn)升序排列,计算灰度值的切尾均值,参考值I(p)的确定方法如下
(4)
式中I(p0)为中心像素点的灰度值,I(x,y)为除灰度值最大、最小的点以及中心像素点外,窗口内剩余像素点的灰度值。按式(4)计算阈值τ,若与中心像素的灰度差值大于阈值,则用代替I(p0)来计算Census编码串。分别用中心像素点灰度值、窗口灰度值的切尾均值以及改进的方法选择参考值,计算Census编码串,结果如图6所示。结果表明,改进后的Census对中心像素点的依赖降低。
图6 Census编码串计算
为了进一步提高代价的可靠性,在初始代价中融入梯度信息,基于梯度信息的代价计算方法为
原来,东方宇轩将北斗七星阵演绎成七绝逍遥阵之后,请七圣上摘星楼参详指点。七圣历练江湖既久,已各有惊人艺业与武功,遂进一步发挥七绝逍遥阵,以侠客岛北斗七星阵为本,以南华真人《逍遥游》为神,依据东方宇轩悟出的奇变,又求索琴棋书画医卜星相七重境界,合七圣的内力修为,一重一重演绎,化奇艺为绝境,遂成万花第一深奥武学。当年逍遥阵初成,七圣手舞足蹈,欢欣鼓舞,在摘星楼前纵声长啸,万花谷空谷回音,上达星辰,明月照山河,繁星空宇宙,好像都为人间传来的矫矫龙吟失神了一瞬。
(5)
C(p,d)=2-exp[-Cren(x,y,d)/λcen]+
exp[-Cgrad(x,y,d)/λgrad]
(6)
利用Middlebury提供的Tsukuba,Venus,Cones,Teddy共4组标准图像对进行测试,用非遮挡区域平均误匹配率(Nooc)和所有区域平均误匹配率(All)来描述算法的准确性,结果如表1所示,与基于Census变换的传统SGM比较,本文提出的优化算法有效降低了误匹配率。
表1 传统SGM与优化SGM的误匹配率 %
根据三角测量原理,通过视差进一步计算深度信息。
如图7所示,OL,OR分别为左右相机的投影中心,基线T为两投影中心的距离,PL,PR为空间中的一点P在左、右相平面的成像点,f为相机焦距,由相似三角形可推出视差d与深度D的关系为
d=xL-xR,D=Z=Tf/d
(7)
图7 双目相机几何原理
4 实时坐姿检测
由于每个人的坐姿习惯不同,不同的人在同一坐姿下存在差异性,且考虑到实时性的要求,用户在使用时需要先采用正确坐姿。以摄像头实时采集的画面左上角为坐标原点,水平向右方向为x轴正方向,垂直向下方向为y轴正方向,建立坐标系,系统记录正确坐姿下的5个关键点坐标为标准,结合关键点之间的距离、关键点连线的夹角以及设定的阈值进行坐姿判断。用户坐姿下,记左眼关键点与摄像头的距离为D′,与正确坐姿相比,将左眼在x轴上的移动距离记为左倾偏量ΔL,右眼在x轴上的移动距离记为右倾偏量ΔR,颈部在y轴上的偏移量记为颈部偏量ΔH,具体的坐姿判断标准如下:距离过近:D′小于30 cm;距离过远:D′大于50 cm;肩膀不平行:左、右肩关键点在y轴上的差值大于τ1;头部左偏:角α大于0°且小于等于70°;头部右偏:角α大于110°且小于等于160°;身体左倾:ΔL大于阈值τ2;身体右倾:ΔR大于阈值τ2;脊椎弯曲:ΔH大于阈值τ3;正确坐姿:上述情况以外的其他坐姿。其中,各阈值的具体数值:τ1,τ2,τ3分别为20,120,100像素。
5 实验设计与分析
本文在Windows 10,Intel®CoreTMi7—9750 H,2.26 GHz CPU,8 GB RAM的系统上进行实验,为了验证本文方法的有效性,邀请20名用户进行准确性测试,对每位用户的9种坐姿分别测试3次,共测试540次测试,结果如表2所示。
表2 9种坐姿的检测效果
由测试结果可知,本文提出的实时坐姿检测算法在身体左右倾斜以及驼背这三种坐姿上存在一定的误检测,但检测9种坐姿的平均准确率达到95.56 %,总体表现较好。为了进一步提高交互性,当系统连续3次检测到同一不正确的坐姿时,将语音播报提醒用户。考虑到实际工作学习中不宜过于频繁地提醒用户坐姿,系统每隔2 s进行一次检测。
6 结 论
为了解决了穿戴式传感器易损耗、检测不便,以及类似Kinect的深度传感器过于依赖设备功能、成本较高等问题,本文设计了一种基于双目摄像头的实时坐姿检测方法。首先,用张正友标定法对双目摄像头进行标定,矫正畸变;为了提高速率,对Openpose骨架模型进行简化,并利用简化模型提取人体的5个骨骼关键点;接着,针对传统的SGM算法过于依赖中心像素点的问题进行优化,并通过优化SGM计算左眼与摄像头的距离;最终,利用关键点的坐标以及设定的阈值实现对用户坐姿的实时检测。然而,受实际检测时的光线、复杂背景等因素的干扰,本文算法还存在一定的误检测,另外,本文算法只检测了九种常见的坐姿,如何进一步提高算法的鲁棒性、扩大使用范围是今后可研究的方向。