一种利用移动设备检测人体动作并反馈的系统

摘  要:随着人工智能发展,过去的数年间,卷积神经网络,循环神经网络,自编码器,等领域发展迅速,但是由于移动设备的机能限制,很少存在移动设备上能够直接运行的网络模型,需要将网络轻量化才能在移动设备上使用。本文通过轻量化网络模型检测人体关键点,然后运用相关算法让人体动作和系统的指令相互匹配、反馈并形成一个完善的系统。

关键词:卷积神经网络;轻量级网络;人体检测;动作反馈

中图分类号:TP183 ;TP311         文献标识码:A文章编号:2096-4706(2021)14-0086-04

Abstract:
With the improvement of artificial intelligence, convolutional neural networks, cyclic neural networks, autoencoders, and other fields have developed rapidly in the past few years. However, due to the functional limitations of mobile devices, few models can run directly on mobile devices. The network model needs to be lightweight before it can be used on mobile devices. This paper uses lightweight network models to detect the key points of the human body, and then uses related algorithms to match human body movements and system commands, feedback and form a perfect system.

Keywords:
convolutional neural network; lightweight network; human body detection; action feedback

0  引  言

首先为了能够进行肢体检测,我们需要人体姿态的评估获取到对应的人体关键坐标,人体姿态评估算法主要是评估人体关键部位在二维图中的坐标,有时我们也会把这个坐标叫做位置。在2016年卡内基梅隆大学Yaser Sheikh组推出了CPM,同年的7月普林斯顿大学的Deng Jia组提出了Hourglass。两者都在当年取得优异表现。

而轻量化是我们第二步需要解决的问题,为了能让移动设备和可佩戴设备能够使用深度神經网络进行演算,google先后提出了三种主要网络结构,由于第一代网络结构中存在激活函数数值归0的问题,为了更好解决这些问题提出了mobileNet-V2,其提出的Linear Bottleneck缓解了激活函数问题,之后Goolge又推出了mobileNet-V3,利用h-wish、SE模块,其在精度和效率提升上取得了不小的提升。

我们需要利用mobileNet-V2和mobileNet-V3对Hourglass和CPM模型对其进行修改,将卷积层分别改用进行替换,配合系统后续功能。

第三步获取到人体关键部位关键点坐标,然后使用BHLD算法将这些关键点转化成为人体肢体特征,我们将这些肢体特征与人体运动和特殊状态下手臂长度,肢体角度等做对比。而有目的性的抽取特定应用场景下人体动作特性,我们将这些特性规范化提取成为特征预判条件,而这些预判条件能更有效地参与到与我们之前通过轻量化模型获取的人体关键点坐标转化肢体特征的对比,然后给予一套评分规则对肢体特征进行评分和系统对应的指令形成映射并反馈提示信息。

完成以上基本要求,我们需要最后能够在手机上执行的系统,同时为了考虑到一些手机性能问题,我们还需要能够通过网络来帮助这些机型进行异地的网络计算,同时也需要系统能够继续自我学习,优化模型,更新模型。而这个系统的实现我们将在后面具体描述。

1  BHLD算法的肢体检测与反馈

人体姿态的评估只是获取到人体的几个关键点,无法检测到人体当前正在做什么具体动作和表达什么意思,所以本文在这里解决:

(1)如何将人体动作最后映射到对应系统指令并取得反馈。

(2)如何检测判定人体何种动作状态。

(3)如何提示用户该如何满足特定动作。

本文提出一种简单的处理方式BHLD算法来结局以上问题,BHLD算法其包含以下四个主要步骤:

第一步:从人体关键点中提炼肢体特征。

L=F肢体转化(Point[n][2])

Point[n][2]表示人体的动作在二维视频中获取的关键点,n为人体关键点数量,同时每个关键点又包含其X坐标与Y坐标。Point整体包括头部,颈部,下腹部,左右肩,左右手肘,左右手关节,等部分相对的X,Y坐标。L表示一个n维肢体特征数组,每个肢体特征包含一个数组分别存放角度和距离,其中包含肢体当前左右肩部和肢体的角度,左右肘部角度,肢体左右小臂膀像素距离,肢体左右大臂膀像素距离等肢体特征,角度的单位为度,像素距离单位为像素。例如Y[0]表示头部的长度,而Y[1]表示头部的与身体的角度。F肢体转化()函数将人体特征点Point[n][2]按距离公式和角度计算公式,转化成为特定的肢体间的角度与肢体本身像素长度等肢体特征。

第二步:由肢体特征判定符合的动作结果。

Z=F动作判定(L1,L2,Point[n][2],Action[n])

L1,L2都是肢体特征,只是获取方式不同,L1是当前状态下获取的关键点后转化的肢体特征而是L2人体标准站立状态下获取肢体特征,Action[n]是记录根据实验过程中发现的人体动作所对应的特征模型数据列表,列表中存放这各种动作信息,这些动作信息又包含许多特征限制,这些限制包含检测类型,检测左、右边界和满足检测后的得分与相应权重。其中每一项都包含[动作编号,动作名字,限制条件列表],而限制条件列表中的每一项又包含[检测类型,检测左边界,检测右边界,标准分,权重]。

F动作判定()函数首先从Action[n]列表开始,提取第一个Action对象,并对其所包含的限制条件逐一检测。检测方式是:根据限制条件的检测类型进行检测,而这些检测类型包含但不仅仅只包含以下几点:

(1)将L1中的值与限制条件中检测左边界、检测右边界进行匹配;

(2)将L1的肢体像素距离值与L2中同位置肢体像素距离进行对比,然后获取两者的商并与限制条件中的“检测左边界”“检测右边界”进行匹配;

(3)将Point点中几个点的坐标值进行X与X互减,Y与Y互减,然后将X差值或Y差值与限制条件中“检测左边界”“检测右边界”进行匹配;

由这些匹配结果来判断人体动作是否符合“检测左边界”与“检测右边界”,从而获取限制条件中的标准分和权重得分,即权重×标准分;

累加所有条件的权重评分,得到累计分数,最高累计分数和这个得分对应的Action[n]对象动作编号作为结果一部分返回,同时返回每个得分限制条件的检测类型与其标准分和权重得分。

Z是经过F动作判定()函数处理后结果,其中包含最高得分的动作编号,最高得分,和限制条件计算结果列表,而列表中每一项又包括限制类型、动作标准分和特征权重×标准分的权重分,其数据字典:[动作编号,最高权重评分,限制条件计算结果列表]。限制评定结果是多记录列表,其中又每条记录又包含:[限制类型,标准分,权重分]。

第三步:将结果映射到指令,然后获取指令并执行。

CM=CA检测(Z,CL[n])

CL[n]是所有指令的映射列表,其中包含的每一条指令都含有各种匹配条件,这些条件分为必要条件,互斥条件,当所有必要条件都满足或者互斥条件满足其中一项,指令就可以被获取。对应每天指令的数据结构[动作编号,指令编号,必要条件列表,互斥条件列表],而其中每一个条件列表又包含了检测类型,这样就能通过检测类型来判断“动作结果”是否满足这些条件,从而判定指令是否执行。CM是经过CA检测()函数检测后得到的指令ID,获取到CM指令后,系统会有其对应的功能列表,其都包含一个具体功能ID与实际执行代码的映射。CA检测()函数是对CL[n]中所有指令下的每个条件进行穷尽检测的检测程序,会依次检测Z的限制条件结果列表,查找条件列表中的检测类型的对应Z中每条记录的限制类型能否一一配对,获取权重得分,判断是否满足后返回指令ID。当指令ID被返回后,系统就会根据指令ID进行执行。

第四步,将动作结果进行对比,获取匹配程度与说明,然后反馈给用户:

PL=C检测(Z,S[n])

PL根据动作编号、检测结果的检测类型和检测结果的权重评分与S[n]进行逐个对比,然后获取对比匹配的S[n]问题提示项,所以P是S[n]的子集,S[n]是个数组,存放了检测结果对应的提示文字。C检测()函数是根据Z返回数据进行对比,然后将检测结果匹配的问题提示返回给PL;最终用户根据PL返回的结果获取到对应的提示,而第三步的指令会被系统接受,然后对应操作系统内的任务,同时达到用户,系统都得到应该获取的反馈。

2  系统实现

本文设计的系统是一种利用移动设备检测人体动作通过本地指令反馈并同时保留远程网络对具体动作进行分类的整体解决方案,前后包括图片获取,人体姿态估计,BHLD算法的肢体检测与反馈等功能,涉及包含如图1所示的步骤。

各步骤具体工作为:

(1)用户处于指定位置,移动设备通过设备自带摄像头或外接USB摄像头获取用户的动作行为视频。

(2)总控系统分析动作视频,采集实时特定图片,利用轻量化改进后的CPM和Hourglass人体姿态估计算法获取到人体的基本关键点。

(3)总控系统将基本关键点数据发送到达肢体检测系统。

(4)肢体检测系统根据基本关键点和BHLD算法获取每个人体肢体的具体位置,长度,关节呈现的角度,和身躯的长度,然后判断整个人体处于特定的动作中;若人体姿势不满足标准状态,则提示用户如何纠正特定动作来满足标准状态的要求。

(5)肢体检测系统返回判断结果到总控系统,总控系统将人体姿态与计算指令进行匹配:若人体姿势满足标准状态,则判断该标准状态是否对应某项动作指令,若是,则执行该指令,若否,则忽略执行相应指令,直接将动作信息反馈给用户。

(6)用户根据反馈结果繼续改变动作,再次进入步骤(1),直到用户退出系统。

其中肢体检测系统的核心是BHLD算法:

首先是转化函数,输入人体关键特征点,将这些点对应到不同肢体,然后通过三角函数转化成为对应肢体的角度数据,相同的还有距离函数概念相同就不呈现了。转化函数具体代码为:

fun countAnger(x1:
Float, y1:
Float, x2:
Float,  y2:
Float):Double{

var  langle:
Number  = Math.atan2(((x2 - x1).toDouble()), ((y2 - y1).toDouble()))

return  langle.toDouble()*( 180 /Math.PI)

}

这个是肢体特征的部分属性,头部角度,肩部角度,上臂长度,这些属性都是通过上面的角度计算函数获取。长度属性不同的就是执行的是计算长度的公式。具体代码为:

class ActionFeature(){

//头部角度

var angleOfTop :Double = 0.0

//肩部角度

var lAngleOfShoulder :Double = 0.0

var rAngleOfShoulder:Double = 0.0

//上臂长度

var lLengthOfShoulder :Double = 0.0

var rLengthOfShoulder:Double = 0.0

//以下忽略

以下代码是检测具体的人体肢体特征关键代码,最外层的runConditionCheck是整体的动作检测方法,for(condition in conditionList)是穷尽了所有方法对应的限制条件,condition.checkLimit是让这些限制条件去判断是否和actionFeature相一致,而判断的时候又要根据conditionId来判断限制类型来调用不同的checkAction函数,最后获得结果分数和权重。之后的代码基本是计算权重,然后从hash表中获取Action的指令ID,这些相对简单就不在展现。具体代码为:

fun runConditionCheck(actionFeature:
ActionFeature?,baseActionFeature:
ActionFeature?){

for(condition in conditionList){

var result:
ActionDetectionResult? = condition.checkLimit(actionFeature, baseActionFeature)

total += result!!.weight * result!!.socre

}

}

fun checkLimit(actionFeature:ActionFeature?, baseActionFeature:ActionFeature?):
ActionDetectionResult? {

var result :
ActionDetectionResult? = null

when(conditionId){

1L -> result = actionFeature?.let { checkAction(it) }

......//略

}

return result

}

fun checkAction(actionFeature:ActionFeature):ActionDetectionResult{

if(actionFeature.angleOfTop>=leftConditionLimit ||......){

return ActionDetectionResult(conditionId, socre, weight)

}

}

在肢体检测系统内,系统同时还保留着对网络请求,发送网络信息,将人体姿态估计后的关键点实时传送到网络服务器,并同时对现有的网络结构进行学习任务。

从图2中我们可以看到移动设备可以通过网络请求将图片发送给远程网络服务器,然后远程网络服务器获取到图片数据然后放入运算中心获取到对应的人体关键点,之后返回给手机。

系统会定期从用户上传的图片中拿出由后台工作人员重新对其人体关键点进行标记,重新批量运算人体姿态评估模型,更新模型超参数以求达到更好的预测性能并会及时同步到用户手机上。同步到用户手机上的除了人体姿态评估模型还有可能是定期需要更新的肢体运算中的预判条件和指令映射数据。图3为红米手机实际检测效果。

同时我们对应几个移动设备进行了粗略的性能统计,如表2所示。

整体系统基本满足我们之前设计的预期,基本能够在移动设备上进行检测,同时我们也预留了接口,对应老旧手机我们也能支持。

3  結  论

首先由于是使用CPM和Hourglass网络结构,而非CPN网络结构相对精度和效率存在一定的提升空间,后续会继续改进系统,使用CPN网络结构轻量化改造版本来完善现有系统,由于CPM和Hourglass网络结构已经能够满足系统需求,对系统是否能移植移动设备重要程度已非技术难点,所以在这里本文暂且忽略优化所带来的性能提升。

其次,由于图片是二维结构,而人体是三维结构,相同关键点组可以表达两种及以上肢体特征,并非1对1映射,所以存在误差和误判。而这个问题虽然可以通过人体构造的特性限制和人体活动本身的条件限制来减少误判,但是这种方法并非最佳解决方案,而且随检测条件的增加必然会加重系统负担,本系统的另外不足之处在于使用穷尽法来判断各种人体动作,所以检测条件的增加必然会加剧此问题对性能和准确性的影响。

参考文献:

[1] 唐晖,王庆,陈洪,等.基于深度学习的体感交互方法 [J].计算机与现代化,2019(2):7-14.

[2] 周鑫.特征池化:一种用于CNN的特征选择方法 [D].西安:西安电子科技大学,2018.

[3] 夏瀚笙,沈峘,胡委.基于人体关键点的分心驾驶行为识别 [J].计算机技术与发展,2019,29(7):1-5.

[4] 李玲霞,王羽,吴金君,等.基于改进型多维卷积神经网络的微动手势识别方法 [J].计算机工程,2018,44(9):243-249.

[5] SU Z H,YE M,ZHANG G H,et al.Cascade Feature Aggregation for Human Pose Estimation [J/OL].arXiv:1902.07837 [cs.CV].(2019-02-21).https://arxiv.org/abs/1902.07837.

作者简介:范臻君(1982.11—),男,汉族,上海人,本科,研究方向:人工智能。

猜你喜欢卷积神经网络三维重定向图像主观和客观质量评价方法计算机应用(2019年5期)2019-08-01基于稀疏卷积神经网络的考生识别算法现代电子技术(2019年13期)2019-07-08基于卷积神经网络的道路交通速度预测电脑知识与技术(2019年9期)2019-05-24浅析卷积神经网络的图像特征提取技术科技视界(2019年7期)2019-05-13基于语谱图的老年人语音情感识别方法软件导刊(2018年9期)2018-12-10基于卷积神经网络的微表情识别中国新技术新产品(2018年16期)2018-10-31基于深度学习的肺结节检测神州·下旬刊(2018年7期)2018-07-28基于残差网络的图像超分辨率算法改进研究软件导刊(2018年4期)2018-05-15基于卷积神经网络车辆品牌和型号识别电子技术与软件工程(2018年6期)2018-02-23基于卷积神经网络的图像检索计算机时代(2018年1期)2018-01-26 相关热词搜索: 反馈 人体 检测