基于深度图像的嵌入式人体坐姿检测系统的实现

2017-12-14 05:42,,
计算机测量与控制 2017年9期
关键词:坐姿关键点头部

,, , ,

(国防科学技术大学 机电工程与自动化学院传感器技术教研室,长沙 410073)

基于深度图像的嵌入式人体坐姿检测系统的实现

曾星,罗武胜,孙备,鲁琴,刘涛诚

(国防科学技术大学机电工程与自动化学院传感器技术教研室,长沙410073)

以检测不良坐姿,分析人们学习工作状态为引导,设计了基于深度图像的坐姿检测系统;该系统采用3D传感器获取人体坐立时的深度图像,设计了一种基于深度阈值的快速前景提取与干扰移除方法,能快速有效的提取坐姿状态下的人体分割图;基于人体轮廓的曲线特征实现了人体关键点定位,通过人体关键点的角度、深度信息与轮廓特征,对不同的坐姿图像进行统计分析,得到了一种区分不同坐姿的判定基准,运用该基准对9种不同坐姿进行识别,平均识别率可达到90%;最后,基于Android平台设计了坐姿检测系统的应用软件,实现了坐姿检测、坐姿提醒以及姿态统计等功能,并且对学习过程进行测试,测试结果表明,本系统可以有效的检测出9种坐姿、并对不良坐姿进行提醒与统计。

坐姿;深度图像;Android

0 引言

坐立已成为现代化生活中人们经常出现的一种方式,上班族每天操作电脑完成工作、学生族在课桌前学习、司机长时间坐在驾驶室。然而,长时间坐立会对人的身体和精神状态带来负面影响,尤其是不良的坐姿习惯,不仅容易引起近视,也更容易导致腰、颈椎疾病和肌肉僵硬劳损,如果不加以预防,会损害身体健康,影响个人的学习工作效率。此外,有研究表明,人的坐姿与他的学习工作状态存在某种关联,因此,有效检测并统计人的坐姿数据,对于隐性分析学习工作效率,会具有更深远的意义。

近年来,计算机视觉领域在人体姿态检测、动作识别和人行为识别等方面取得了诸多研究成果,而对人体坐姿检测方面研究关注相对较少。当然,这几种应用的实现方法大致相同,综合文献综述,可分为两种:基于穿戴式传感器和基于计算机视觉。基于穿戴式传感器的方式,是让目标事先佩戴特有的传感器,用采集的传感器数据对人体姿态进行识别。Tapia 等人[1]将5个无线加速度传感器分别放置在肩部、腕部、臀部、大腿上部和踝关节处,提取FFT 峰度、标准差等特征,对站立/坐下姿态和走/跑活动进行了有效识别。基于计算机视觉的方法,是利用摄像头来提取人体的姿态特征,并采用机器学习方法对不同姿态进行综合识别与分析。Raptis 等人[2]使用 Kinect 获取骨骼信息,从人体结构的角度将骨骼信息转化为人体角度特征,实现了姿态分类系统。Schwarz 等人[3]结合人体解剖学标记和人体骨架模型,从Kinect获得深度图对人体进行全身的姿势估计。相比穿戴式方法,计算机视觉的方法获取的信息量大,识别更可靠,使用更方便,受到了科研学者的广泛关注。特别是深度图像传感器的出现,可以更加准确、实时的对人体姿态进行三维建模,(深度数据不受颜色、光照、环境的影响),越来越多的研究学者开始使用3D传感器进行相关研究。

基于此,本文提出了一种基于3D传感器的坐姿检测方法。相比其他的人体姿态检测系统,本方法主要做了以下两点改进:1)采用Astra3D传感器进行坐姿检测,具有更高的检测效率和更好的检测准确率;2)在Android平板上实现坐姿检测,使整套系统具有更好的便携性。系统实现方案如图1所示,选用Astra3D传感器采集坐姿图像,在Android平板上实现检测算法,算法主要分三部分:1)首先对Kinect输出的深度图像进行干扰去除,并提取人体轮廓图;2)其次,进行人体关键点检测,并提取坐姿特征;3)采用训练好的模型对不同坐姿进行识别。实验中,我们共邀请了18人进行坐姿采集,每人采集了9种不同姿态,前10人用于训练,后10人用于测试。首先跟据前10人提取的特征点训练出不同姿态的最优分界阈值,再利用该阈值对后8人的不同坐姿进行区分,实验结果显示,该检测算法具有较好的鲁棒性。最后在Android平台上实现整套检测算法,并设计坐姿提醒,坐姿数据统计等功能。

图1 坐姿检测系统实现流程图

1 系统硬件介绍

文中,我们选用Astra3D传感器进行数据采集。表1所示是Astra3D传感器的相关配置,相比微软Kinect传感器具有诸多优势,Kinect[4]传感器对硬件设备的要求较高(Windows8以上操作系统、usb3.0的接口以及i7以上CPU),不仅大大的增加了系统成本,还降低了兼容性,不便于安装携带,而Astra3D传感器的体型更小,同时支持Windows、Android以及Linux三大操作系统,具有更高的深度图像精度,更适合小型化、便携式设计。

表1 Astra3D传感器的结构和功能

我们选用广州友善之臂的Tiny4412高性能 Cortex-A9开发板作为Android平台。Tiny4412采用了高性能的三星 Exynos4412四核处理器,集成了 Mali-400 MP 的高性能GPU图形加速引擎,支持 3D 图形流畅运行,其配置完全满足Astra3D传感器。实验中,我们在Tiny4412上安装了Android5.2.0操作系统,并在Java环境下配置了openCV调用接口,利用Android5.2.0丰富的API接口,直接使用Java语言进行软件开发和移植。

2 坐姿检测算法设计

2.1 坐姿深度图像的采集

深度图像的采集是通过在程序中调用Astra3D传感器的SDK接口来实现的,图2所示是采集到的RGB图像与对应的深度图像。

图2 Astra3D传感器采集的RGB图与深度图

深度数据和深度图像是不一样的,图2所示的深度图像是深度数据经过转换后,映射到0~255范围上的灰度图像,而深度数据对应的是实际距离,Astra3D传感器反馈的Z轴数据(Vector3)就对应着实际距离多少毫米。文中,我们使用深度数据进行坐姿特征提取。 Astra3D传感器的深度有效检测范围为0.5~8 m,图2所示的黑色部分则是超出有效范围,转换后的灰度值默认为0的显示结果。

2.2 前景提取

考虑到人坐立的特殊场景,我们可有如下假设:1)人坐立时和周围背景存在一定的距离;2)人坐着的时候,Z轴方向(深度距离)不会有大范围的变化;3)此外,以学习情况为例,我们认为人总会坐在图像视野的中间位置。如图3所示,是采集的人坐着的时候深度图像,人和背景的深度图像灰度值还是存在较大的差异的。本文正式基于这些特点,采用阀值分割法[5]进行快速的前景的提取。

图3 坐姿深度图

具体的实施方法可分为以下几个步骤:1)考虑到人体坐立时身体中心位置通常是不变的,因此在初始状态选择一个固定区域(如图中方框)认为是人体的中心;2)当摄像头初始化时,首先获取方框中的平均深度距离值,认为是人体的最远深度距离M。随后均匀获取深度图像中的点(图像分辨率为320×240,每隔10个像素提取一点),将每个点的深度距离放入向量a中。

(1)

其中:i为图像中的像素点,a[i]为像素点的深度距离值;3)随后求得所有背景点中最近的深度距离值MinBackgroundDepth;将其作为阀值,对深度图像进行分割,即可去除背景得到前景图像;4)最后对分割图像进行高斯滤波、膨胀与腐蚀,去除图像中的空洞与轮廓边缘的毛刺。

为了让后续每一帧都能很好的去除背景,并且不受人体姿态动作变化的影响,本文设计了一种更新方法。具体步骤如下:

1)初始化,获取MaxTargetDepth;

2) 执行公式(1);

3) 获取MinBackgroudDepth作为阀值,进行背景移除;

4) 下一帧,令MaxTargetDepthi+1=MinBackgroundDepth-500,返回第二步;

这样选择是因为背景图像的深度距离值始终变化不大,可以完全的去除背景。另外还可以去除背景前方500 mm之内的干扰(这个区间可以根据情况而改变)。

分析前景提取效果图4,可知本方法对于坐姿的分割具有很好的效果,另外具有实时性良好,不受环境变化与人体移动影响的优点。当人离开后再坐下时,也可以很快的恢复分割功能。

图4 前景分割图

2.3 外部干扰去除

考虑到外人可能会出现在图像视野,对前景分割造成干扰,本文设计了外部干扰去除算法。

在文中,我们只考虑系统在工作过程中外人的走动干扰,根据实际情况,外人不可能出现在目标和摄像头中间。如图5所示,我们在每帧图像中用一个方框来标定检测目标,从图中可以发现,干扰对象总会有一部分区域在方框外部,同时方框内部和外部的干扰对象的深度距离差异不大,因此可以考虑先求取方框外部的最近深度距离,然后以此作为阈值去除外界干扰。当然,若干扰对象全部在方框内部,我们可以认为干扰对象离目标是有比较远的距离(方框大小有限,人在图像中占得的区域越小,距离摄像头越远),直接通过阈值分割即可。

图5 目标方框图

具体方法是:1)首先对前一帧图像进行遍历,得到目标最高点A,以及目标轮廓最左边点B、最右边点C、最底部点D,设定当前帧方框的上边为A的行数减15,左边为B的列数减10,右边为C的列数加10,下边为D点的行加15;2)随后求取1,2,3,4区域中最近的深度距离值;3)最后设定分割阀值为(100代表0.1米),即可去除干扰。

当然,也会存在干扰对象离目标特别近,甚至出现在目标和摄像头中间,此时就无法进行干扰去除。然而,考虑整个坐姿检测过程,这种情况出现的时间会比较少,因此可将其视为异常并直接忽视这种情况,而不对整个姿态检测和统计过程造成影响。为了提高系统的抗干扰能力,我们设定,当系统检测到异常时,下一帧的检测方框默认为固定大小,等异常消失后,仍能恢复到正常的检测状态。

2.4 坐姿特征提取

文中,我们主要采用两种不同特征:人体关键点特征和轮廓特征,对9种比较常见的坐姿(如:低头、头部靠前、偏头、身体倾斜、后仰、趴下等)进行检测。图6所示是设计的人体关键点模型,其中,A为头部顶点;B为头部中心;C1为左肩;C2为肩部中心;C3为右肩;D为身体下部中心点。根据人体形态学,不同坐姿,对应的关键点相对位置也是不一样的。例如:偏头时,头部中心点与肩部角度变化大;身体倾斜时,身体中心线有明显偏移;趴下时,人体深度轮廓和正常坐立时有明显差别。

图6 人体关键点模型图 图7 垂直投影曲线

首先,我们进行头部区域的分割:我们在人体轮廓前景图,计算横向的轮廓宽度,得到人体轮廓的垂直投影曲线如图7所示,肩膀相对人头部的宽度变化较明显(人头部的轮廓宽度约为肩膀的1/2)。

图8 头部定位

关键点获取方法如下:1)首先使用基于均方距离的边缘匹配算法定位头部[6],如图8,其中S′为搜索子图,T为模板图,均方距离相识性评价函数为:

(2)

其中:A,B分别为子图与模板图的轮廓点集;a,b分别为A,B中任意一点;dis(i,J)为i点到J集合的最短距离;Na,Nb分别为A,B集合点的总数。如C为最小值即为定位到头部。根据头部区域获取头部顶点与头部中心点。

(3)

其中:xi,yi为头部像素点的行与列,N为头部区域的像素总个数;

3)根据头部中心点,获取头部区域平均宽度HeadWidth;如widthk=2HeadWidth,则第k行对应肩部区域所在行;

4)随后根据肩部区域得到左肩、右肩、肩部中心的坐标。

xs houlderRight,xs houldrerLeft,xs houlderCenter=xk

(4)

(5)

5)最后,根据肩部坐标以及公式(3)获取肩部以下人体区域的几何中心,即为下身中心点。

通过上述关键点获取方法,分别对正直、头部靠前、仰头、左偏头、右偏头、身体左斜、身体右斜、靠后、趴下坐姿进行关键点获取,获取结果如图9。

图9 坐姿关键点获取

2.5 坐姿检测判定标准的训练与验证

我们首先制定区分不同坐姿的判定标准,然后基于此标准进行不同坐姿的检测。文中,我们首先让10位志愿者(男女都有)正对摄像头坐立,摄像头距离人1米(该距离既能保证人在摄像头视野范围内,也保证了人体坐姿的区分度)。自然的做出9种不同的坐立姿态,每一种姿态需要不断的变化,同一种姿态获取10张不同图像。最终,我们建立了如下的坐姿数据库:包括9种姿态,每种姿态100张图像。通过本文提出的前景分割和干扰去除进行图像预处理,然后进行关键点提取,计算出每种姿态头部深度距离、L1角度、L2角度和身体深度距离4个参数的平均值。

由表2可知,不同姿态对应的参数有着一定差异,本文以关键点角度、关键点深度以及轮廓特征检测不同的坐姿。坐姿判定标准如下。

表2 坐姿参数的平均值

正直:75°lt;L1 lt;105°;80°lt;L2 lt;100°;

头部靠前:头部深度距离小于0.7米;

仰头:头部深度距离值比头部顶点深度距离值小20 mm;

左偏: L1 gt;105°;80°lt;L2 lt;100°;

右偏: L1 lt;75°;80°lt;L2 lt;100°;

身体左斜: L2 lt;80°;

身体右斜: L2 gt;100°;

后仰:肩部中心深度距离值大于1米;肩部中心到身体下部中心的深度距离是逐渐减小的。

趴下:趴下时人体轮廓与其他坐姿有着明显的区别,获取轮廓方框,当长比宽大50像素点时,判断为趴下。

为了验证该判定标准的准确性,我们另外邀请了8名志愿者进行测试。同样,每个人分别做出9种不同坐姿,每种姿态采集10帧图像,最后利用此标准的准确率。

由表3可知,基于该标准的检测准确率还是比较高的(基本上能达到90%左右)。此外,通过测试,该算法的检测速度能达到10帧/s,而在实际过程中,我们每秒检测一帧图像即可。因此,该算法基本上是可以满足坐姿检测系统的准确率和实时性的需求的。

表3 坐姿识别率

3 系统实现与结果测试

本系统设置了不良坐姿的提醒功能,以人在学习情景下的坐姿检测为例:我们认为当人离书桌太近或者身体倾斜一段时间后,该系统要自动给予语音或文字提醒,以促进其纠正错误坐姿。此外,系统还具有坐姿统计功能,在学习结束时,生成坐姿饼状图,让人们更直观的了解其在学习过程中的坐姿情况。

为了验证坐姿检测系统的可行性与有效性,让一名自愿者坐在摄像头前正常学习,使用坐姿检测系统对其进行实时检测。测试结果如图10。

图10 系统测试结果

通过测试实验可知,本文设计的坐姿检测系统能够有效的检测不良坐姿,并进行实时的统计,最终反馈整个使用过程的坐姿饼状图,该系统具有良好的可视化与实用性。

4 结论

本文以检测不良坐姿为引导,设计了基于Android的坐姿检测系统。通过Astra3D传感器采集人的坐姿图像,设计了快速有效的背景移除方法和外部干扰去除算法。通过人体关键点与轮廓特征实现了9种常见坐姿的识别。最后,基于Android平板实现了坐姿检测系统,具有坐姿检测、不良坐姿提醒和坐姿数据统计等功能。实验表明,本系统能够有效检测不良坐姿,并实时统计坐姿数据,为人们改进不良坐立习惯、分析学习工作情况提供了帮助。当然,文中只是对几种常见的坐姿进行了检测,选取的特征参数比较简单,测试集也相对有限,下一步工作将主要专注于更充分的坐姿数据库建立和更高阶的坐姿参数提取。

[1] Tapia E M, Intille S S, Haskell W, et al. Real-Time Recognition of Physical Activities and Their Intensities Using Wireless Accelerometers and a Heart Rate Monitor[A].IEEE International Symposium on Wearable Computers[C]. IEEE, 2007:37-40.

[2] Raptis M, Kirovski D, Hoppe H. Real-time classification of dance gestures from skeleton animation[A].ACM Siggraph/eurographics Symposium on Computer Animation[C]. ACM, 2011:147-156.

[3] Schwarz L A, Mkhitaryan A, Mateus D, et al. Human skeleton tracking from depth data using geodesic distances and optical flow [J]. Image amp; Vision Computing, 2012, 30(3):217-226.

[4] 刘开余, 夏 斌. 基于Kinect的实时人体姿势识别[J].电子设计工程, 2014, 22(19): 31-34.

[5] 韩思奇, 王 蕾. 图像分割的阈值法综述[J]. 系统工程与电子技术, 2002, 24(6): 91-94.

[6] 丁 路. 基于深度图像的人体轮廓识别技术[D]. 南京:东南大学,2015.

RealizationofEmbeddedHumanBodySittingDetectionSystemBasedonDepthImage

Zeng Xing,Luo Wusheng,Sun Bei,Lu Qin,Liu Taocheng

(College of Mechatronic Engineering and Automation, National University of Defense Technology,Changsha 410073, China)

For the purpose of the detection of bad postures and analysis of people’s learning and working states, a sitting detection system based on depth images is designed. The system uses the 3D sensor to obtain the depth image of the sitting human body, the rapid foreground extraction and interference removal method based on the depth threshold is designed, which can quickly and effectively extract the human body segmentation map in the sitting state. Based on the characteristics of the contours of the human body, the key points of the human body are located. Based on the angles of human body key points, depth information and contour features, the different sitting images are statistically analyzed, and a criterion for distinguishing the different sitting positions is obtained. 9 different sitting positions are identify, the average recognition rate can reach 90%. Finally, an Android platform-based sitting position detection system application is designed to realize functions including sitting position detection, posture reminder and attitude statistics and other functions. The APP is used to test the learning process, test results show that the system can effectively detect 9 kinds of sitting postures, make reminds to bad posture and do statistics at well.

sitting posture; depth image; Android

2017-02-28;

2017-04-12。

曾 星(1993-),男,四川遂宁人,硕士研究生,主要从事传感器与战场环境监测方向的研究。

罗武胜(1972-),男,湖南祁东人,教授,博士研究生导师,主要从事传感器与战场环境监测方向的研究。

1671-4598(2017)09-0008-05

10.16526/j.cnki.11-4762/tp.2017.09.003

TP391.4

A

猜你喜欢
坐姿关键点头部
基于表面肌电和动态体压的办公坐姿疲劳测试
肉兔育肥抓好七个关键点
自动驾驶走向L4 企业头部效应显现
建筑设计中的防火技术关键点
火箭的头部为什么是圆钝形?
坐姿好习惯
学生作业坐姿及台灯控制器
基于坐姿感应的智能视力保护台灯设计
机械能守恒定律应用的关键点
医联体要把握三个关键点