时间:2024-07-28
王森宝 杨晋骁 王子昂 李世尧 秦娟 石艳梅
(天津理工大学集成电路科学与工程学院,天津 300384)
手势可以表达丰富的含义,广泛应用于人们日常生活中,随着机器学习的不断发展,巧妙利用多媒体机器学习模型应用框架并对其识别算法进行改进是现在手势识别的一个大趋势。手势识别在现代社会中具有广泛应用,对于AR特效,可以进行短视频、直播等娱乐交互场景,基于指尖点检测和指骨关键点检测,可实现手部特效、空间作画等多种创意玩法,丰富交互体验;在手势进行自定义识别的过程中,根据手部骨节坐标信息,可灵活定义业务场景中需要用到的手势,例如面向智能家电、可穿戴等硬件设备的操控类手势,面向内容审核场景的特殊手势等。
在传统方法中,手势识别算法通常依赖硬件设备或者基于视觉方法进行识别[1]。Jayashree Pansare 等人创新性地采用网络摄像机进行实时手势识别[2],潘志庚等人提出了基于Kinect 和肤色检测算法结合的手势识别系统[3],谭台哲等人采用深度信息与肤色信息结合的方法[4],减少了硬件设备的影响,并且具有更高的鲁棒性。此外,James Rwigema等人提出的一种差分进化方法来优化参数[5],但以上基于传统模型的识别方法或多或少都有着受环境影响大、精度不够高、识别速度慢等弊端。
针对以上问题,本文基于鲁棒预测控制的方法,使用手部关键点检测迭代改进算法,可以尽可能减少复杂环境的影响并实现具有较高精度的快速检测。该方法采集包括指尖、各节指骨连接处等22个特征点的信息,其中包括精准定位手部的21个主要骨节点描述指尖、各节指骨的坐标信息,以及1个特征点标记图像采集获取人手画面的背景点。通过在标准数据集与自制数据集上进行测试,该算法提高了有效性和精准度。
在整个识别过程中需要对摄像头所捕捉到的区域进行信息的提取,只有提取到正确的信息才能进一步判断,并获得输出结果。信息的提取需要确定候选区域。对于候选区域的产生本文采用的方法是选择性搜索[6]。
在图像处理的过程中,当获取到的手势信息转换成可用计算机处理的数字图像时,其手势图像在生成、传输或变换过程中会受到各种因素的干扰和影响,其画质将会因噪声而在不同程度上出现畸变[7],因此需要先对图像进行预处理。预处理是对图像做一些诸如降维、降噪的操作,主要是为后续处理提供一个大小合适的、尽可能去除无用信息的图像。本文对噪声的处理是使用鲁棒预测控制,进行鲁棒预测控制会大幅提高其精准度[8],降低噪声对获取图像的影响,就可以增加部分关键点难以检测出来的手势图像,扩充识别手势库。
手势识别是整体设计中关键的一环,手势识别的方法有很多种,不同的识别方法所建立的模型不尽相同。相对于常见且较为耗时的神经网络法[9]以及传统的模板匹配法[10],本文基于手掌二维定位向量法设计手腕定位方法[11],由于正常人的五指指根以及各个关节处到手掌中心之间的距离基本相等,因而可以手腕为原点,定位手腕为原点坐标,通过各个关节与手腕的角度数学运算,对伸直手指个数进行识别;通过角度运算结果进一步确定是哪根手指伸直或弯曲,由此判定相应的手势信息。此种方法最大的优点是适用性强,可准确识别出多种手势。
手势图像识别首先采集图像,其次确定候选框,进而应用关键点进行算法识别。
由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等),所以适当情况下需要进行区域生长(或合并),可以有效提取图像中信息。使用摄像头进行图像采集,常用的方法有滑动窗口[12]与选择性搜索。其中滑动窗口法是通过对输入图像采用不同大小的窗口进行滑动,并采用非极大值抑制的方法进行筛选的全局性搜索算法。但是在本实验之中,进行手势识别具有较高的实时性,滑窗法有局限性,所以在此不适用。而选择性搜索可为物体检测算法提供候选区域,其速度快,召回率高。产生初始的分割区域,然后使用相似度计算方法合并一些小的区域。通过不断地迭代,候选区域列表中的区域越来越大,进而完成候选区域的选择。本文采用选择性搜索。其算法的具体流程如图1所示。
图1 图像获取流程
进行相似度的衡量时,算法主要考虑四种相似性度量,取值都在[0,1],值越大就说明越相似。它们分别是颜色相似性scolour(ri,rj)、纹理相似性stexture(ri,rj)、尺寸相似性ssize(ri,rj)和重叠相似性sfill(ri,rj),合并只能在近邻的两个区域间进行,远离的两个区域不能合并(其中ri,rj分别是候选区域中各点的横坐标与纵坐标)。
最终相似度的度量总标准是上述四个度量的组合:
不断进行区域合并,直至候选区域选择完毕,获取候选区域中的图像。
根据鲁棒性的定义可知,控制系统由于工作状况变动、外部干扰以及建模误差,会产生一定的不确定性,精准性模型很难被获取到。而基于手势关键点的手势识别对依据关键点而判断出来的弯曲或伸直状态是尤为重要的。原算法是将采集的图像送入手部关键点检测器,以得到许多粗略的关键点检测结果,关键点的3D 位置被重新投影到2D 图片,将其和关键点结合可以训练网络。由于原方法中噪声的影响降低了手势图像的检测精确度,故本文采取鲁棒预测控制,对训练网络进行降噪处理。关于有界噪声问题[13],外部噪声的线性不确定系统可表示为:
其中xk是系统状态,xk∈Rn;uk是系统输入uk∈Rm;ωk是外部噪声,ωk∈Rr(其中Rn,Rm,Rr是取值空间)在这里外部噪声大多来源于周围环境噪声,值虽然未知但是这里假定有界。
在整个迭代优化过程中,对其进行优化控制处理[14],本文的优化控制使用Min-max方法[15],考虑了由不确定性引起的“最坏”的情况,如果系统能在这种“最坏”的情况下稳定运行,则对于未来发生的任何一种不确定性,系统仍然可以稳定运行。其计算依据:
其中xk+N是终端状态,xk+N∈XN为终端约束条件,JN(xk+N)为终端代价函数,N为预测时域,Q,R分别为相关权重。
可以通过枚举法得到W的顶点,枚举法列出所有顶点所要满足的约束以保证“最坏”情况下约束满足,但是约束数量会急剧增加,所以在经典控制论中使用闭环回路往往可以实现更好的控制效果[16]。
本文的手势识别的模型预测采用反馈校正的方法实现闭环回路[17]。反馈的关键是利用可测量的系统状态信息,对原预测系统进行校正。
基于手部关键点的手势分类识别由三个关键步骤组成,分别是:获取二维角度、判断手指是否弯曲、图像识别结果输出。本文以手势分类识别为主线将其设计的主要思想进行详细分析,其手势分类识别的流程如图2所示。
图2 手势分类识别流程图
1962年,Hu首次提出图像识别的几何矩理论,并证明了所提出的7个矩对图像的平移、旋转和比例变化均保持不变,再根据Hu氏理论,通过各种不同级别的几何矩的数学组合,得到7个特征量。
在识别中主要采用模板匹配法,将输入图像与模板(点、曲线或形状)匹配,并根据匹配相似性进行分类。坐标距离、点集距离等,轮廓边缘匹配、弹性图匹配等都可以用于匹配度计算。模板匹配法的优点是在小样本的情况下速度非常快,对于光照、背景变化的适应性较好,应用范围广,但分类精度不高,可以识别手势的类型有限,适用于小样本、形状变化小等情形。
定义了输入手势图像与10 个模板手势图像中任一手势之间的距离DM。
其中,Gi为输入手势的7 个矩特征分量,为模板手势的Hu矩特征分量,ωi为各特征分量的权值,为了调节特征向量中各矩分量数量级的不一致,在实际实验中取ωi的值为104、1010、1015、1016。DM即为输入手势与模板手势的特征距距离,DM越小表示越接近识别结果,即找到与输入手势特征距离最小的模板手势,那么这个手势即为识别结果。
将手部分为21个关键点,如图3所示。定义21个关键点进行二维向量的角度计算,并且计算得到大拇指、食指、中指、无名指、小拇指五个手指的角度。
图3 手部21个关键点
其中二维角度计算的具体算法步骤如下:首先设置两个向量v1,v2并对两个向量的x,y轴赋予初始值;然后对两个向量运算后的结果取反余弦弧度值和角度值。再对特定的手指进行相应的维度计算,最后将得到的结果替换第一步中设置的两个向量的初始值,进行相应的角度求解,从而得到5个手指的相应角度值。
在识别过程中每一个手指都最多有两个状态,也就是弯和直。通过对不同手指是否弯曲进行具体判决,并将五个手指不同的组合方式表达出不同意思。因此,所有可能的情况共计:25=32 种。
经过查阅相关手语资料[18],发现其中有16种组合是绝大多数群体所通用的手势,经过识别之后在大众生活中有较高的辨识度,可以进行相对广泛的应用,表1 列出16 种手势的中文含义、手指对应弯直状态。其手势如图4所示。
表1 识别手势汇总表
图4 手势识别图像
判断是否弯曲,要定义相对应的阈值,超过某个阈值就会判定为改变状态。
余下16种手指弯直组合,是当前社会中使用不太广泛、群众接受度不高的手势;但是仍然具有识别价值,在人工智能快速发展的背景下,丰富交互体验显得尤为重要;在手势进行自定义识别的过程中,可灵活定义业务场景中需要用到的手势,并且也可以通过机器认定的某些特性手势进行一些便捷操作和进程控制。
使用者在镜头前摆出相关的手势后,算法进行检测,直到失去对手的跟踪为止,初始状态识别像素点上的基本信息,之后对原始图像点的信息进行综合处理[19]。
计算机读取输入的图像信息,在每个输入图像上运行即进行目标检测,完成画面捕捉,将捕捉的BGR格式图像转换为RGB 格式图像。从RGB 格式图像中提取使用者的手势,与手势库中手势进行对比,将识别结果返回到窗口,完成图像识别。
在其中要设置手部检测的最小置信度值,大于这个数值被认为是成功的检测,默认为0.5;同时还有目标跟踪模型的最小置信度值,大于这个数值将被视为已成功跟踪的手部,这里也默认为0.5。这里采用视频流的方法来进行图像结果的输出。
本次实验使用的计算机系统是windows10 运行环境使用PyCharm社区版。
通过对10 名实验者每个手势进行30 次识别测试,获得部分手势识别结果数据,将数据进行统计与分析计算,获得所定义手势的平均识别率。手势识别结果如表2所示。
表2 手势识别结果
文献[21]基于人体肤色的方法进行的实时手势识别,在复杂背景下容易跟丢,导致识别不理想。本文所提方法,在实际的环境中手势识别成功率平均值在94.5%以上,基于手部关键点的二维向量角度精准,识别结果可信度高。该方法也存在手势动作不标准造成识别结果错误的缺点。
本文是通过条件判断组合来实现手势的定义。在计算手势角度值时,由于实际的手差异性和角度范围,导致最终角度计算的误差,所以无法对手部的细微变化进行检测。在实验检测过程中可能会出现由于角度计算精确度不够而导致识别错误,将会使得多种相近的手势输出同样的结果,从而影响手势库的手势数量,降低了代码的实用性。
本文首先对手势识别的基本原理进行介绍,之后介绍了手势识别的基本流程,同时对识别代码中所涉及的具体手势进行详细的介绍。最后通过实验者进行识别测试实验,根据实验数据分析出最终识别效果,以及目前该方法识别失败的可能原因与局限性。
手势识别作为机器与人类交互的自然方式,应用广泛。下一步工作将开展基于深度学习的手势识别,进一步提高手势识别的成功率,做硬件移植应用,并在保证成功率的前提下减少高计算成本和运行时间,减少手势识别的局限性。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!