适用于电视交互的视觉手势识别算法设计

2022-10-08 11:30刁艳侠
电视技术 2022年9期
关键词:静态手势动态

刁艳侠,吴 浩

(康佳集团股份有限公司,广东 深圳 518000)

0 引 言

智能电视作为智能家居的重要载体,已经逐步开启全面智能化的发展进程。对于智能电视来说,传统的遥控器操作不够便捷,语音操控虽然在搜索媒资时非常便捷,但是受制于用户群体和使用场景等因素的影响,并不能完美覆盖智能电视的各种应用场景,手势操控因为灵活便捷又不受环境噪音等影响,成为人与智能电视交互的一种很好的补充方式。本文就从手势识别的基础技术原理出发,介绍在智能电视硬件性能受限的情况下如何做手势识别算法设计,以及手势识别的基本流程。

1 视觉手势识别的技术原理

手势的分类方法有很多种,最常见的是根据空间特性来将手势分为静态手势和动态手势。静态手势强调的是某个时间点的手形、与身体的相对位置以及方向,动态手势则强调手的动作过程。

最早的手势识别是通过设备“数据手套”完成的[1],通过利用传感器等设备直接来检测人手和各个关节的位置信息来识别手势。虽然有较高的稳定性和准确性,但可识别的手势较少,检测的限制也较多。另一种手势识别的方式——基于视觉的手势识别方式则是根据摄像头采集到的数据,通过计算机处理后对手势进行识别的。其优点在于交互操作更加便捷,而且随着电子设备上摄像头的推广,手势识别的硬件门槛更低。

基于视觉的手势识别系统由手势输入、图像预处理、手势检测及分割、手势分析及手势识别等组成,系统框架如图1所示。

图1 基于视觉的手势识别系统框架

1.1 图像预处理

用户手势通过摄像头获取图像输入后,需要进行预处理。预处理的目的是提升画面质量、去除噪声,以便更好地进行手势识别。常用的图像预处理方法有去噪化、锐化处理等。

1.2 手势检测与分割

手势检测是识别的前提。通过手势检测来分辨图像中是否存在手势和手势的空间位置,来识别视频流图像中的手势目标。若存在手势,就需要进行手势分割,将手势从背景中分割出来。常用的手势检测方法分为基于运动信息和基于表观特征的检测两种。基于运动信息的检测方式利用手势与背景的差异来实现手部动作的跟踪,如光流法[2]。基于表观特征的检测方式常用肤色、手型和轮廓等特征来分割手势,其中最常用的特征是肤色,如通过YUV颜色空间[3]或是人体肤色的聚类特性[4]来进行手势分割。此方法虽然排除了手的形状的干扰,但是更容易受到如光照等外界环境的干扰。实际的技术落地中,环境往往非常复杂,单一方法难以往往难以应付,所以实际使用时最常见的做法是采取将多种特征融合的方式进行检测分割,如结合肤色和运动检测技术设计分割算法[5],可以克服单一标准分割的局限性。此外,通过识别深度信息也是一个克服复杂环境的常用方法,例如,谈家谱等[6]、王松林[7]基于微软公司开发的Kinect设备通过深度信息改善了手势识别的效果。但是这种方法需要能识别深度信息的硬件支持,在实际落地过程中存在成本压力。

1.3 手势建模

手势建模是手势识别过程中最重要的步骤之一。只有模型足够高效精确,才能保证识别的准确率。对于静态的手势识别,需要基于表观特征来建立手势模型。常见的建模方式有基于运动参数、基于图像特征、基于可变性模板和基于灰度图来建模。对于动态手势而言,需要基于三维模型来建立手势模型。常见的建模方式有三维骨架模型、网络模型、纹理模型和几何模型。

1.4 手势分析

手势分析是根据手势模型来分析手势,获取手势的特征值。特征提取是在手势分割的基础上提取手势的关键特征。根据分割的结果得到手势边缘,进而得到手势形状,具体的特征有边缘、手指的位置和方向等。

1.5 手势识别

手势识别是基于手势分析的结果,进行手势轨迹空间分类的过程。手势分为静态和动态两种,其中静态对应的是模型参数中的一个点,动态手势对应的则是一个轨迹。静态手势的识别的常用算法是模板匹配和BP神经网络等。动态手势则适合用1968年提出的HMM模型[8]等。

2 视觉手势识别的算法设计

2.1 实现目标

通过设计计算机视觉算法实现识别OK手势、手枪手势、拇指向上、拇指向下、拇指向左、拇指向右,以及拳头左滑和拳头右滑8种手势,分别实现确认、返回、上下左右移动和加减音量的功能;并将算法移植到Hi3516DV300上,从而实现通过手势控制电视完成相应的功能。另外,算法移植到芯片上,单人单任务速度不大于30 ms。

2.2 实现思路

按实现功能的方式分类,实现设计目标的算法设计思路有以下三种。

(1)采用3D ConvNet对连续的图像序列建模进行手势判断,进而进行连续的动作识别。对检测到的手势图像序列进行手势动作识别,同样可以采用3D ConNet或者LSTM Net对连续的图像序列构建动作模型,对连续的手势图像序列做最终的手势动作判别。

(2)对视频图像序列先进行手部骨架关键点定位,然后对提取到的手部关键点进行关联计算,来对各种手势进行识别判断。

(3)采用目标检测的思想,通过设计2D ConvNet,直接对图像序列存在的手部检测与手势分类实现静态手势识别、连续多帧位置关系判断,实现动态手势识别。

从数据标注的周期、制作的难易程度以及算法最终需要移植到中低端算力有限的芯片上考虑,本文设计的算法主要采用目标检测的方式实现手势识别功能。

根据芯片的实际性能参数,在设计算法模型时设定了以下原则:在设计网络结构时,尽量采用芯片可以支持的算子;尽量采用轻量级的网络结构,因为过深的网络结构会导致芯片的处理速度变慢;谨慎使用分组卷积。

2.3 数据集介绍

训练数据集的手势类别总共8类,即OK手势、手枪手势、拇指向上手势、拇指向下手势、拇指向左手势、拇指向右手势、拳头手势以及负样本手势(除上述以外的手势)。数据场景主要是四个不同室内场景,包含不同距离(人离摄像头距离)、不同高度(摄像头距离地面高度)、不同光照以及不同人,数据格式包括视频数据和静态图像数据。

2.4 算法模型设计

2.4.1 YOLOv4-tiny检测模型设计

YOLOv4-tiny主干网络主要由CBL以及CSP网络结构组成。CBL具体是由卷积层、BN层和激活层(LeakyRelu)组成。CSP是一个类似残差结构,由若干个CBL块组成。

考虑到算法移植和最终板端的速度问题,设计模型时主要做了如下几个部分的改进。

(1)CBL模块中leakyRelu激活函数改成relu激活函数,板端实验验证leakyRelu激活函数耗时要比relu激活函数耗时多。

(2)原始基于最近邻插值算法上采样层改成转置卷积层,原因是由于HI3516上不支持最近邻插值算法的上采样层。

(3)考虑到原始网络输入416×416相对于1 920×1 080这样大的分辨率图像而言,手部所占原始图片相对比较小,网络模型检测手势这种小目标难度有点大,故网络输入采用的是512×512大小。而网络输入的增大也会带来计算量的增加,在板端就无法满足速度需求。

2.4.2 YOLOv4-tiny网络模型压缩方法

具体融合方案如下。

(1)卷积层,进行卷积处理:

式中:x代表输入数值,w代表权重,b代表偏差。

BN层,对数据做归一化处理,作用是加快模型训练时的收敛速度,使得模型训练过程更加稳定:

式中:γ,β代表可训练参数。

为了加快运算速度,先对公式进行融合,将Conv层的公式代入BN层的公式得到:

融合后的新层的权重与偏差是:

2.4.3 瞄点框anchor设置

YOLOv4-tiny检测网络采用两个检测层,每个检测层有3组瞄点框,总共有6组瞄点框。六组瞄点框是通过训练集利用聚类算法聚类而来。本算法通过聚类得到的瞄点框大小是[9,25 10,33 13,28 14,38 19,45 19,18]。

2.5 网络模型训练策略

本网络模型算法主要用到的训练策略包括数据预处理、数据增强、调整学习率下降策略以及修改loss损失函数。

(1)数据预处理。按照宽高纵横比例进行缩放,将原始1 920×1 080的图像缩放至512×512大小,这样保证缩放后的图像不会产生畸变。

(2)数据增强。为了提高模型的鲁棒性以及模型的泛化能力,训练过程采用了如下几种方法:对图像随机添加噪声以及模糊,对图像随机进行裁剪以及平移,对图像随机旋转。

(3)loss损失函数的调整。考虑到数据集手势数据样本不平衡的问题,在设计类别损失函数时,将原有的交叉熵损失替换为focal loss损失。

(4)学习率下降策略的调整。固定的学习率往往让模型训练性能达不到最优的效果,因此在设置学习时,采用等间隔调整学习率的策略,逐步减小学习率,提升训练模型性能。

2.6 手势跟踪算法概述

采用跟踪算法对手势赋予一个ID号,以判别所做手势的先后顺序,从而确定谁的手做出的手势先控制电视完成相应的动作。考虑到移植到板端的速度,手势跟踪算法采用传统的(sort)跟踪算法。

2.7 手势识别流程

上述手势识别分为静态手势识别与动态手势识别两种,其中OK手势、手枪手势及拇指向上/下/左/右为静态手势识别,拳头左滑、拳头右滑为动态手势识别。下面分别介绍两种手势识别的具体流程。

2.7.1 静态手势识别

静态手势主要是通过对一段手势视频序列进行手势类别识别,统计这段视频序列中分数最高的某种手势,判定为这段视频序列的最终手势输出。静态手势识别的具体流程如图2所示。

图2 静态手势识别流程图

2.7.2 动态手势识别

动态手势识别主要通过检测配合跟踪的思想,通过前后帧的位置关系判断上下左右方向,从而实现动态手势识别,其流程如图3所示。

图3 动态手势识别流程图

2.8 板端检测结果

本算法主要在HI3516DV300芯片上进行速度指标测试。预期结果是单人单任务速度不大于40 ms。实际检测结果如表1所示。

表1 Yolov4-tiny算法在HI3516DV300芯片的测试结果

从表1的测试结果可以看出,板端推理速度满足在40 ms内的目标。

3 结 语

本文介绍了一种视觉手势识别算法的设计方案,目的是通过6个静态手势和2个动态手势来实现确认、返回、上下左右移动和增减音量等基本的电视交互操作。从测试结果看,手势识别速度在目标芯片上达到了设计目标,为视觉手势操控在智能电视上的应用提供了一种可行方案。

猜你喜欢
静态手势动态
国内动态
国内动态
国内动态
最新进展!中老铁路开始静态验收
静态随机存储器在轨自检算法
动得多,还要坐得少——评WHO《身体活动与静态行为指南》
挑战!神秘手势
动态
猜猜他是谁
胜利的手势