基于手部动作的人机交互算法实现
当前智能人机交互系统逐渐成为科技研究的一个重要方向。在这一发展潮流下,手势识别成为了一种新兴的人机交互操作方式。本文对人机交互系统进行研究,提出了一套基于手部动作的人机交互算法。该算法通过摄像头捕捉图像,并对采集来的图像进行高斯滤波等前端处理,然后利用背景差分进行运动目标检测,接着利用基于Ycbcr空间的肤色检测技术找到运动目标中的手部区域,并对手部区域进行运动分析,最后根据识别出来的手部动作进行相应的操作。实验结果表明该算法可以较好的去除背景噪声的干扰,对操作者手势进行实时有效的识别,并对遥控小车发出指令,实现了基于手部动作的智能人机交互。该算法具有广阔的发展和应用前景,实现了更为智能方便的人机交互。
随着科技的发展,人机交互在各行各业都有着广泛的应用前景。而随着人机交互的发展,智能化成为了人机交互系统的主要发展方向。相较于传统的人机交互方式,比如键盘输入,鼠标输入,新型的人机交互方式可以为使用者带来更大的便利,比如图像输入,语音输入。简单地说,图像输入是基于数字图像处理技术的输入方式,经过摄像头采集和计算机处理对图像和视频进行处理,屏蔽噪音,提取有用信息,进而完成相应的操作指令。图像输入的主要方式是手势识别、人脸识别、动作识别。
动作识别算法是对一系列图像中包含的动作进行识别分析的算法,主要由前端噪声处理、目标检测、和目标行为分析组成。对运动检测的主要方法有帧间差分法,背景差分法。帧间差分法实时性好,背景不积累,算法简单,计算量小;背景差分法不受背景干扰,算法简单易实现。
本文对基于手部动作的人机交互算法进行研究,目的是通过识别操作者的手部动作对小车进行控制。本算法直接调用摄像头采集实时视频,对操作者手部动作进行噪声过滤,运动和肤色检测、动作分析并发送相应的指令。
本文提出的基于手部动作的人机交互算法框图如图1所示。在初始视频采集模块,通过摄像头采集视频,对采集来的视频流进行高斯滤波、形态学滤波等做前端处理,滤除噪声,以便对操作者手部动作进行提取和检测。在运动目标检测模块,通过背景差分得到运动目标。在肤色特征检测模块,通过肤色识别,轮廓提取等处理进一步滤除图像中的干扰信息,得到更为精准的手部区域。在手部运动分析模块,通过质心提取,运动特征点定位识别手部动作在图像中的位置,进一步确定操作者手部的运动轨迹和方向,从而翻译出操作者的真实意图,并在人机交互模块对遥控小车进行操控。
图1 基于手部动作的人机交互算法框图
初始视频采集
捕捉静态背景
由于在实际操作中背景会因为操作者身处的环境不同而受到或多或少的干扰,要想从复杂的背景中提取出清晰的影像,需要考虑采集时,背景是否受光线因素影响,操作者是否移动等相关因素。所以为了提取出相对稳定清晰的影像,本算法自视频开始采集后采用第26帧的图像作为背景图像,
滤除前25帧图像中的噪声和干扰。这样提取出来的的背景相对干净,噪声干扰少。
确定背景图重心
为了准确的定位重心坐标,需要使用矩计算物体形状的重心,面积,主轴和其它的形状特征等。由公式(1):
其中x,y,i,j是待处理区域的坐标(单帧图像中的像素点坐标)。
令Xc,Yc表示区域重心的坐标,则如公式(2)所示:
在二值图像的情况下,M00表示区域的面积。
因为操作者体型不同,所以为了更准确的定位重心,需要设定一个重心上移量。
高斯滤波
高斯滤波的作用在于消除高斯噪声,对信号做平滑处理。在图像处理中,高斯滤波是一种常用的减噪手段。其算法原理就是将中心像素点的值用其邻域内像素值的加权平均代替。
形态学滤波
形态学滤波的基本方法有:腐蚀、膨胀、开启、闭合。腐蚀可以细化图像中的目标,消除边界点;膨胀可以粗化图像中的目标,可以填补图像中的缝隙;开启可以使图像变得光滑,有效过滤噪声点,具体操作是先腐蚀,再膨胀;闭合可以消除图像中的狭窄的间断,填补轮廓的裂痕,具体操作是先膨胀再腐蚀。本算法采用了开启运算。
运动目标检测
背景差分法
背景差分法是一种常用的运动区域检测的方法,通过将当前帧与背景帧作对比差分,检测出运动区域。背景差分法检测运动目标速度快,检测准确,易于实现。
如不考虑噪音n(x,y,t)的影响,视频每一帧图像I(x,y,t)可以看作是由背景图像b(x,y,t)和运动目标m(x,y,t)组成:
由式(3)可得运动目标m(x,y,t):
而在实际中,由于噪音的影响,式(4)不能得到真正的运动目标,而是由运动目标区域和噪音组成的差分图像d(x,y,t),即:
得到的运动目标需要做进一步处理,阈值分割是最常用的方法:
式中T为一阈值,本文既采用这种阈值分割法。
肤色特征检测
肤色识别
在现实生活中受限于环境因素,不同时刻的光照、颜色各异的灯光、噪声的背景等很多因素都可以对肤色识别产生或大或小的干扰。为了尽可能小的减少环境因素的干扰,本算法采用YCbCr肤色空间。因为人眼对于亮度的变化较为敏感,且根据相关研究显示,不同人种的肤色的不同主要在于亮度分量,因此在肤色识别中一般剔除亮度分量, ,只关注Cb、Cr两个颜色分量。
YCbCr与RGB的转换公式如下:
图像二值化
图像的二值化处理就是将图像上每一个像素的灰度置为0或255,即将256个亮度等级的灰度图像通过适当的阈值过滤,大于阈值的置为255,小于阈值的置为0,从而获得仍然可以反映图像整体和局部特征的二值化图像。在本算法中,高于阈值的图像即为手部目标,低于阈值的图像即为背景。
理想方式下,为选取一个合适的阈值,记t为目标与背景的分割阈值,目标像素数占图像比例,平均灰度;背景像素占图像比例,平均灰度。图像的总平均灰度为:
从最小灰度值到最大灰度值遍历t,当t使得值
最大时,t即为分割的最佳阈值。
在本算法中,由于肤色检测比较特殊,并不能简单采用理想方式找到最佳阈值。经试验设定,当Y分量像素值在70~255,Cb分量像素值在80~128,Cr分量像素值在134~165之间视为肤色区域,即该区域像素点置为255,其他区域像素点置为0。
绘制轮廓集
为了更好地识别运动目标的形状,也为了更好地定位运动目标的坐标,需要将运动目标的轮廓勾勒出来。因为输入的图像为二值图像,可以较为容易的将整幅图像中的轮廓扫描出来,并将所有轮廓的边界点坐标存储于一个特殊的矩阵中。利用这些坐标,我们可以轻易地绘制出一个包含多个轮廓的轮廓集。
设定轮廓最小外界矩形的面积阈值
虽然肤色识别可以过滤掉大多数背景干扰,但在实际应用中,人体的其他部位以及背景环境中的类肤色干扰因素依然会影响系统对于手势的识别。因此本算法采用设定一个轮廓最小外接矩形的面积阈值,从而在整幅图像所有轮廓中找到手臂的轮廓,即轮廓的最小外接矩形。这样可以提高算法的准确性和实用性。
手部运动分析
信息提取
设重心坐标为(Gx,Gy),轮廓最小外界矩形的四个顶点坐标是(Ax,Ay)、(Bx,By)、(Cx,Cy)、(Dx,Dy)
设(AVERx,AVERy)为顶点坐标平均值
将四个坐标点横坐标排序,设横坐标最小的顶点为(MINx,MINy),横坐标最大的顶点为(MAXx,MAXy)。
若AVERx>Gx,则运动特征点为(MAXx,MAXy),反之特征点为(MINx,MINy)。
信息分析
摄像头开始采集后,每隔48帧系统会采集一幅图像,共采集4次。经过上述处理后得到一个特征点,记为特征点1、特征点2、特征点3、特征点4。然后根据特征点坐标变化的规律进行手部运动分析。若特征点4的横坐标大于特征点3,特征点2和特征点1横坐标,则视为向右移动;若特征点4的横坐标小于特征点3,特征点2和特征点1横坐标,则视为向左移动;若特征点4的纵坐标大于特征点3,特征点2和特征点1纵坐标,则视为向上移动;若特征点4的纵坐标小于特征点3,特征点2和特征点1纵坐标,则视为向下移动。
指令发送与接收
借助 Visual C++编译环境的MFC模式下的MSComm控件可以实现系统与串口的通信。MSComm是Microsoft公司提供的用于串行通信编程的控件。借助该控件,应用程序可以方便的借助串口收发数据。MSComm控件提供了多种通信命令的使用接口以及两种处理通信的方法:事件驱动方式和查询方式。本系统采用查询方式。借助无线收发模块可以实现指令的远距离传输,本系统采用的是BM100B模块,BM100B模块采用GFSK调制方式,可工作在315/433/490/868/91MHZISM频段,具有尺寸小,功率大,灵敏度高,传输距离远,通信数虑高,内部自动完成通信协议转换和数据收发控制等特点。用户可以利用该模块提供TTL、232或485串行数据接口自行配置摸块的串行速率,工作信道,发射功率,通讯数率等参数。
本文采用Visual C++ 编程软件和OpenCV对实时采集的视频进行了前端噪声处理,之后通过背景差分法得到运动目标,通过肤色检测找到具有肤色特征的目标,然后通过运动分析识别手部运动,最后与小车进行交互。图2为基于手部动作的人机交互算法实验结果示例,实验中规定当操作者手从上到下移动时,系统发出前进指令;当操作者手从下往上移动时,系统发出后退指令;当操作者手从左往右移动时,系统发出左转指令;当操作者手从右往左移动时,系统发出右转指令。如图2(a)和(b)所示,当操作者手从左往右移动时,小车也从左往右移动。如图2(c)和(d)所示,当操作者手从下往上移动时,小车也从下往上移动。
图2 基于手部动作的人机交互算法实验结果示例
本文提出了一套基于手部运动的人机交互算法,该算法可以对手部运动进行提取,进而根据提取到的特征点进行运动分析,最后根据分析的结果能够通过智能控制系统进行人机交互。该方法可以用于一些适用于残障人士的特殊场合,方便他们进行操作,具有识别准确,反应速度快的特点。
10.3969/j.issn.1001- 8972.2016.20.019