摘 要
随着科学技术的飞速发展,人机交互方式也不断改变。从古老的命令行方式到图形界面交互方式,再到触摸屏交互方式。人机交互方式不断往自然、方便、直观、以用户为中心的方向去改变,而不再以设备为中心的传统交互方式如键盘、鼠标等设备。
手势自古以来在人类交流方面扮演着非常重要的角色。因此,手势交互逐渐进入人机交互队列当中。这些年随着计算机视觉技术与计算机硬件的快速发展,利用计算机视觉技术来实现手势交互并已应用到生活当中。计算机视觉技术通过摄像头采集各类手势并传给计算机进行处理,用户不需要穿戴任何设备,所以具有方便,灵活,成本低等优点。而且动态手势比静态手势交互更加人性化,但同时难度也将极大提高,因此,本文将对动态手势识别展开研究。
本文将介绍动态手势识别系统的工作原理,主要包括手部检测、运动轨迹图建立与移动方向识别。因此,本文的研究工作如下:
(1)手部检测。通过调用训练好的手部级联分类器进行搜索图像的各个区域,从而获取图像中是否含有目标,并读取目标区域的位置信息。
(2)运动轨迹图建立。在固定的时间内,将每一帧检测到手部的位置进行融合处理,建立运动轨迹图。
(3)移动方向识别。将建立好的运动轨迹图进行几何特征分析从而识别出手部的移动方向。
(4)控制音频播放器。通过Qt平台设计简易的音频播放器,将识别的结果转化为控制音频播放器指令,进而控制音频播放器的播放、暂停、增大/减小音量与切换上/下首歌。
关键词:人机交互;手势交互;计算机视觉
引言
随着科学技术的飞速发展,人机交互方式也不断改变。从古老的命令行方式到图形界面交互方式,再到触摸屏交互方式。人机交互方式不断往自然、方便、直观、以用户为中心的方向去改变,而不再以设备为中心的传统交互方式如键盘、鼠标等设备。
手势自古以来在人类交流方面扮演着非常重要的角色。因此,通过手势进行人机交互方式也受到极大的欢迎并已经使用到生活当中。2023年荣耀发布了Magic系列的一款移动电话产品Magic5。该产品具有了隔空手势的人机交互方式,无需接触手机,既可用手势隔空操控屏幕,上下挥手就能滑动屏幕,手掌抓握即可轻松截屏。这个交互方式方便我们操控手机。因此,手势交互应用有可能在未来成为主流交互方式。所以,越来越多的研究者也将目光投在了人机交互的手势识别方向。
手势识别技术主要分为接触式方案与非接触式方案,接触式方案采用数据手套,这个方法能够使用各种传感器获取手势的数据,能够达到较高的识别率,但设备穿戴复杂且成本较高,难于普及大众。而非接触式方案利用计算机视觉技术进行识别手势的移动动作,通过摄像头采集各类手势并传给计算机进行处理,用户不需要穿戴任何设备,所以具有方便,灵活,成本低等优点。而且动态手势比静态手势交互更加人性化,但同时技术难度也极大提高,因此,本文将对动态手势识别技术展开研究。
1 总体方案设计
基于计算机视觉的动态手势识别系统能够对于动态手势的移动进行识别,通过摄像头实时采集图片,将每一帧图片进行图像处理,并进行手部检测,一旦检测到目标,开始建立运动轨迹图,当手部移动时间达到八帧,则运动轨迹图建立完成并进行识别运动方向。为了解决手部往回动作出现“徘徊”问题,规定在识别到一个动作之后需要从中心移动,否则,不会进行手势识别操作。
1.1 总体研究内容
1.图像采集环节,通过相机进行实时采集实景,完成图像采集环节;
2.图像预处理环节,将采取到图片进行灰度化处理,并滤除图片在采集过程中携带的噪声,通过对比多种滤波效果,采用中值滤波方式对图像滤波,紧接着对图片进行增强处理,从而突出的手部的特征,方便后面进行检测;
3.手部检测环节,在图像预处理环节完成后,通过调用手部分类器进行遍历图片的各个区域,从而获取图像中手部区域的位置信息;
4.手势识别环节,通过手部检测环节检测出手部的位置将其添加到历史运动轨迹,更新运动轨迹图,根据运动轨迹图判断人手的运动方向进行判别识;
5.控制音频播放器环节,通过手势识别结果控制音频播放器状态。
1.2 总体研究路线
(1)图像处理开源库OpenCV:OpenCV 是用 C++语言编写的,同时提供了 Python、Ruby、Matlab 等语言接口,可在 Windows、Linux 以及 Mac OS等多系统平台下运行,是一个跨平台支持多语言的通用库。目前 OpenCV 可以调用超过 500 个支持多平台的中、高层应用程序接口函数,从最底层的数学运算到高级的图像处理算法模块。目前
OpenCV 库的应用较为广泛,涉及到多个行业领域。
(2)QT:Qt 是一个用于跨平台的图形界面程序开发的
C++工具包,提供给应用程序开发者建立图形用户界面所需的所有功能。Qt 完全面向对象且很容易扩展,它已经成为全世界范围内数千种成功的应用程序的基础。为世界上数千个最大的公司,包括
IBM、摩托罗拉和夏普等提供开发软件。
(3)C/C++:C/C++语言相对于目前其他的较高级语言或脚本语言,如Java、C#、python,优势在于程序的运行性能。C/C++语言是直接运行在机器上,并不需要虚拟机作为中介,这直接提高了C/C++语言的运行效率,而且QT软件与OpenCV开源库都支持C/C++编程语言,为此适用于本项目的开发。
拟解决的问题:通过相机实时采集图像;然后对图像进行预处理操作;在固定时间内,将每一帧检测到手部区域进行融合,完成运动轨迹图的建立;通过运动轨迹图进行几何特征分析从而识别出运动方向。其流程图1所示。
根据以上的研究内容绘制了动态手势识别系统框图,如图2所示。
图2 动态手势识别系统的设计框图
2 动态手势识别系统设计
2.1 图像预处理
图像预处理是手部检测中关键的一步,图像预处理效果好坏会影响到后面的手部检测的精度与速度,图像预处理包括图像的灰度化处理与滤波处理二部分。具体流程图如图3所示。
图3 图像预处理流程图
2.1.1灰度化处理
通过使用海康RGB-D感知相机MV-EB435i采集的图像是RGB彩色图像,它的每一个点的像素是由R、G、B三分量组成,其包含了大量的图像信息,如果直接对RGB彩色图像进行手部检测则带来很大的计算量,就无法做到实时动态手部识别。所以,本系统采用灰度化处理RGB彩色图像,将采集的RGB彩色图像都转化为灰度图像。将RGB彩色图像转换成GRAY(灰度)图像的方法有许多种,其中最常用的是加权平均法。其转换关系如公式1所示,也是一种线性转换。其转化效果如图4所示。
图4 手部某点的RGB/GRAY值
2.1.2中值滤波
在图像的采集、传输过程中,无法避免的会受到噪声影响,得到的图像画质会因噪声而在不同程度上出现畸变与污点。因此我们必须首先对图像进行滤波操作,过滤掉部分的噪声影响。其中常用的滤波方法有均值、中值和高斯滤波等等。综合相机的表现性能、滤波效率与稳定性等多因素,本系统决定采用中值滤波处理。
中值滤波过程是通过一个可移动的窗口遍历图像,将属于窗口内的所有像素值进行排序并取中间数作为当前窗口中值滤波的结果,尺寸为3*3的窗口工作原理如图5所示,其滤波效果如图6所示。
图5 中值滤波工作原理
图6 中值滤波效果
2.2 手部目标检测
手部检测方法有很多方法,许多研究者提出了许多的检测方法,比如通过基于肤色法,基于特征点法与及基于卷积神经网络方法。现如今,基于卷积神经网络检测方法逐渐成为手势检测的主要方法。因此,本文采用级联分类器目标检测的方法进行手部检测,并且采用裁剪跟踪方式减少检测区域,从而提高检测效率,因此,其检测速度基本能达到实时检测。
级联分类器(Cascade Classifier)是一种基于Haar特征的对象检测算法,最早由Paul Viola和Michael Jones在2001年的论文中提出。级联分类器主要用于人脸检测,但也可以用于识别其它物体。级联分类器具有高检测精度和快速检测速度的特点。使用OpenCV官方的训练工具生成手部检测级联分类器xml文件,其xml文件信息描述如图7所示。
图7 手部检测xml文件
2.2.2手部检测
首先通过OpenCV库函数中Load函数调用训练好的级联分类器,接着配置好检测的基本参数,通过detectMultiScale函数对已经预处理后的图片进行搜索目标,从而输出手部目标的在图片的位置信息。其检测效果如图8,9所示。
图8 简单场景检测效果图 图9 曝光检测效果图
其检测性能较佳,鲁棒性较强,能够适应在不同的场景与光照强度进行检测。但是每次都要进行对整幅图像进行检测,其效率太低。因此,为了提高效率,通过裁剪跟踪的方法来提高检测效率,即假设当前帧检测到手部后,记录当前帧手部的位置,并对下一帧图像进行裁剪,减少检测区域,如果裁剪的区域如果没有检测到,才对整帧图像进行检测。其过程步骤如图10所示。
建立运动轨迹图主要记录手部运动的状态。因此,为了识别手部的运动情况,必须建立好运动轨迹图,并且其轨迹图能够直观反映手部的运动情况。因此,本文基于运动历史图的理论基础上来建立运动轨迹图,其方法简单与直观,能够通过简单的几何方法就可以将手部的运动信息提取处理。
运动历史图(MHI)最初是由Bobick 和 Davis提出的。在此之前,Bobick 和 Davis 首先提出了二值的运动能量图(Motion Energy Image,MEI),通过描述物体如何移动和运动在空间中发生的位置,来进行基于运动的物体识别。运动能量图显示了运动的轮廓和能量的空间分布。在运动能量图的基础上产生了运动历史图(Motion History Image,MHI)。运动历史图是一种基于视觉的模板方法,通过计算时间段内同一位置的像素变化,将目标运动情况以图像亮度的形式表现出来。它是这样的一种图像:其每个像素的灰度值表示了在一组视频序列中该位置像素的最近的运动情况。最后运动的时刻越接近当前帧,该像素的灰度值越高。因此,MHI图像可以表征人体在一个动作过程中最近的动作情况,这使得MHI被广泛应用于动作识别领域。
设H为MHI中像素的灰度值,Hσ(x,y,t)可由公式2计算得出:
式中,(x,y)为像素点的位置;t为时间即当前帧的帧数;σ是人为给定的像素值,从帧数的角度决定了运动的时间范围,若σ小于动作持续的帧数,就有可能丢失部分运动信息;δ为衰退参数,对于图像序列中的一个像素点,若其运动形态没有发生改变或者运动形态转为静止,则MHI中该点的灰度值减少δ,在传统的MHI的计算过程中的取值一般为1,但在不同的应用场景中的值会影响MHI携带的关键信息量,因此需要研究者通过不断的实验选取适当当前场景的δ值;ψ(x,y,t)为更新函数,有多种定义方法:光流法,帧间差分,图像差分,最常用的是帧间差分法,计算公式如下:
其中,
式中,I(x,y,t)为图像序列第t帧中像素点(x,y)的灰度值,为实验确定的差异阈值ξ,不同的应用场景需要不同的值,Δ为两帧图像间的间隔。
2.3.2运动轨迹图
基于运动历史图理论基础上,将函数D(x,y,t)进行重新定义,将其定义为是否检测到手部区域,当手部区域面积不等于0,则D(x,y,t)的值为1,反之D(x,y,t)的值为0。因此,更新函数ψ(x,y,t)表达式修改如式5所示。
并且为了更好的直观反应轨迹,对Hσ(x,y,t)进行修改。由于σ为动作持续的帧数,通过测试当σ为6~9范围内其效果最佳,反应速度最适宜,σ值越小则轨迹量小,σ值越大虽然轨迹量多,但可能会反应较慢,需要很差时间的移动才能建好轨迹图。因此,本文σ取值为8,δ衰退参数取经典值1。综上所示,其修改后的Hσ(x,y,t)表达式如式6所示。
由于人眼无法辨别差值为1的灰度值。因此,对式6进行线性拉大。Hσ(x,y,t)在0到255区间进行拉大。其表达式如式7所示。
根据前面的理论公式的推导,通过代码实现运动轨迹图的建立,其不同的移动方向的轨迹图如图11、12、13、14、15、16所示。
由于级联分类器只能检测到人手的区域,但无法体现出人手的形状。因此,为了更加直观显示人手的移动的情况,对检测到的人手区域进行肤色提取,从而分割出手部,去除无关背景。
2.4 运动方向检测
运动方向检测主要是判断手部运动的方向,通过对运动轨迹图进行分析从而得到手部运动的方向。对于历史运动轨迹图像,常用的检测方法是图像梯度算法,因梯度算法计算较为复杂,需要巨大计算开销,有可能造成实时性较差。因此,通过对比不同的运动方向的轨迹图,可以发现这些轨迹图的几何特征有所不同,所以采用几何的方法进行分析手部的运动方向,从而减少计算量,反应灵敏。
2.4.1轮廓几何特征
轮廓的几何特征有许多特征,比如轮廓的周长、面积、圆形度、边界框几何信息、几何矩等特征。可以选择合适的几何特征进行组合,进而更好地区分不同的轮廓。为了更好的选择合适的几何特征来区分运动方向,并且这些几何特征尽可能具有平移、旋转和尺度不变性的特性,这些才能保证无论任何尺寸的手部在任意位置都不影响效果的好坏。因此,对不同移动方向的轨迹图提取轮廓并进行分析几何特征。
实验一对不同的移动的方向依次顺序取出每一帧的轮廓,观察轮廓的面积变化。
图17 不同移动方向轮廓的归一化面积变化
通过图17得出结论,只有前后运动其归一化面积会增大或减小,其他的运动归一化面积没太大的变化。因此,可以通过判断归一化面积的变化推断是否是前后运动还是其他运动。
实验二对固定八帧时间内将每一帧的手部区域融合成运动轨迹图,提取不同的移动的方向的运动轨迹图的轮廓,观察轮廓最小外接矩形的边长比。
图18不同移动方向轮廓的最小外接矩形的边长比
通过图18得出结论,左右运动、上下运动与前后运动的轮廓的最小外接矩形的边长比都占各自的区间,并且区间都相互独立。因此,可以通过设定轮廓的最小外接矩形的边长比的阈值来区分不同的运动方向。
2.4.2方向检测
通过前面的实验测试,决定采用轮廓的面积的变化与轮廓最小外接矩形的边长比来区分运动方向。为此,为每个运动方向都规定了对应的规则。运动方向的规则如表1所示。
表1 运动方向判断规则
当轨迹图的轮廓宽长比R在1.1到1.9区间,则判断轮廓的面积Area变化,当首帧轮廓的面积Area首大于2倍的末帧轮廓的面积Area末时,则判断当前操作为向前移动的动作。其移动过程如图19所示。
图19 向前移动过程
图20 向前移动的面积变化
当轨迹图的轮廓宽长比R在1.1到1.9区间,则判断轮廓的面积Area变化,当首帧轮廓的面积Area首小于末帧轮廓的面积Area末的一半时,则判断当前操作为向左移动的动作。其移动过程如图21所示。
图21 向后移动过程
图22 向后移动的面积变化
当轨迹图的轮廓宽长比R大于1.85时,则判断像素值V的变化,当轮廓左侧的像素值V左大于2倍右侧的像素值V右时,则判断当前操作为向左移动的动作。其移动过程如图23所示。
图23 向左移动过程
图26 向右移动的轨迹图
当轨迹图的轮廓宽长比R小于1.15时,则判断像素值V的变化,当轮廓的上侧的像素值V上小于下侧的像素值V下的一半时,则判断当前操作为向上移动动作。其移动过程如图27所示。
图27 向上移动过程
图28 向上移动的轨迹图
当轨迹图的轮廓宽长比R小于1.15时,则判断像素值V的变化,当轮廓的上侧的像素值V上小于下侧的像素值V下的一半时,则判断当前操作为向上移动动作。其移动过程如图27所示。
图29 向下移动过程
图30 向下移动的轨迹图
3 音频播放器设计
为了直观展示动态手势识别系统识别结果,使用Qt平台设计一个简易的音频播放器设计,具有基本的播放、暂停、切换上/下一首、增大/减小音量等功能。动态手势识别系统能够识别手部前进、后退、向上、向下、向左与向右移动动作。因此,将这六个动作都分别做好定义其功能,从而控制音频播放器。表2为不同方向的移动动作对应功能的参考表。
表2 对应功能表
手势移动方向
|
音频播放状态
|
向前
|
音量增大
|
向后
|
音量减少
|
向上
|
播放
|
向下
|
暂停
|
向左
|
切换上一首
|
向右
|
切换下一首
|
3.1 音频播放器界面
音频播放器只是为了更直观表现动态手势识别系统的识别性能。因此,音频播放器只需要具有基本的播放、暂停、切换上/下一首、增大/减小音等功能即可。因此不需要设计特别复杂。自然,其窗口设计也应当简易。窗口设计效果如图31所示。
图31 音频播放器界面
3.2
音频播放器功能
音频播放器能够播放与暂停音乐、切换歌与调声音高低。通过界面上的按钮就可以控制音频播放器的工作。并且附加了打开摄像头与关闭摄像头按键,打开摄像头就可以进入动态手部识别控制音频播放器的工作,关闭摄像头则动态手部识别系统失效。因此,我们可以通过不同的方式进行控制音频播放器的工作。其中,动态手势识别系统是识别手部移向来进行控制。其手部移向与音频播放器的状态一一对应,如图32、33、34、35、36、37所示。
4 动态手势控制音频播放器
本章将对动态手势识别系统进行测试,将识别结果进行控制音频播放器的工作。
4.1
播放与暂停
手部的前后移动可以控制音频播放器是播放状态还是暂停状态。前进则是播放状态,后退则是暂停状态。其测试效果如图38、39所示。
图38 手部向前播放
图39 手部向后暂停
4.1
切换上下首
手部的左右移动可以控制音频播放器切换上下首。左移则是切换上一首歌,右移则是切换下一首歌。其测试效果如图40、41所示。
图40 手部向右切换下一首
图41 手部向右切换上一首
4.3 调声高低
手部的上下移动可以调节声音的高低。上移则是提高声音,下移则是降低声音。其测试效果如图42、43所示。
图42 手部向上移动音量增加
图43 手部向下移动音量减小
5 总结
本文介绍动态手势识别系统的工作原理,主要包括手部检测、运动轨迹图建立与移动方向识别。为了能够更加直观表现出动态手势识别系统的性能,通过使用Qt平台设计简易的音频播放器,将动态手势识别结果进行控制音频播放器的工作。不同的移向都对应音频播放器的不同工作状态。动态识别系统能够准确并快速识别手部的移向,但是仍然存在不足之处,例如控制出现“徘徊”问题,即当重复相同的手势的话,比如识别向右移动的手势,第一次向右运动,当手收回来的时候,会识别向左运动,所以就会出现徘徊。对此,为了解决这个问题,做法则是当识别到一个手势之后,必须回到中心才可以进行下一次识别。这样可以减少出现徘徊的问题,但同时也多了局限性,操作过程会感到不适。因此,这需要后面不断去完善与优化手势识别系统。
参考文献
[1] 徐欢.手势互动拍照界面App设计与实现[D].浙江:杭州电子科技大学,2015
[2] 徐诗艺.基于计算机视觉的动态手势识别研究[D].四川:西南石油大学,2019
[3] 张云峰.车载场景下基于深度学习的手势识别研究[D].安徽:安徽大学,2020
[4] 孙君凤.基于运动历史图的人体行为识别算法研究[D].山东:山东大学,2018
[5] 解迎刚,王全.基于视觉的动态手势识别研究综述[J].计算机工程与应用,2021,57(22):68-77.
[6] 刁艳侠,吴浩.适用于电视交互的视觉手势识别算法设计[J].电视技术,2022,46(9):17-21.
[7] 赵雅,李建军.基于时空特征的动态手势识别方法研究[J].电子设计工程,2022,30(4):1-6.
[8] 解迎刚,王全.基于视觉的动态手势识别研究综述[J].计算机工程与应用,2021,57(22):68-77.
[9] 丛玉华,何啸,邢长达,等.基于计算机视觉手势识别的人机交互技术研究[J].兵器装备工程学报,2022,43(1):152-160.