贲永明
基于运动方向跟踪的手势控制平台算法实现
贲永明
(本课题受“国家级大学生科学研究与创业行动计划”项目资助 )
贲永明 管孟凌 杨 丹 叶 青
北方工业大学
以计算机为代表的智能设备,在现代化生活中起到了不可替代的作用,随着人们对智能化的不断追求,能够让机器主动理解人类的语言与意图,日益成为人们研究的热点。本文提出的基于运动方向跟踪的手势控制平台便是其中的一个尝试。平台基于OPENCV函数库,由C语言编写而成。系统通过跟踪主体头部或手部的运动方向来完成对智能系统(如智能小车)的指挥。首先通过肤色检测提取视频指令中的手势信息,然后通过后端的图像处理,准确识别其中的控制信息,并通过串口控件发出指令。实验结果表明,该系统可以准确实时地识别人类的指挥意图,并作出准确的指挥动作。本文提出的系统具有很强的实用性,可以为人们的生活带来更加智能化的体验。
当今社会是一个智能化与信息化的社会,以计算机为代表的智能设备得以让人们享受便利舒适的生活。随着智能化水平的提升,人们尝试让机器能够主动识别人类的意图,理解人类的语言,从而更好地为人类服务。其中,肢体语言因其简单高效的特点,成为这项研究中的一个热点。
捕捉人体的肢体动作,离不开视频采集设备的协助,从而不可避免的涉及图像处理技术。图像处理是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。本文目的是从视频流中提取肢体动作,并准确理解动作所要表达的意图,所以需要借助肤色检测技术来做前端处理,滤除非肤色区域,然后再进行进一步的处理,准确翻译肢体动作所表达的意图。其中肤色检测的效果在很大程度上决定了系统的识别性能。
本文对基于运动方向跟踪的智能手势识别系统进行研究,详细讨论了其中的几个关键技术,如肤色检测、图像处理、基于Mscomm控件的串口通信等,最后对系统的性能进行了分析,指出了系统存在的不足与可以改进的地方。
系统以VC++ 6.0结合OPENCV作为开发平台,通过摄像头捕捉人体动作,经由肤色检测识别人体的手势动作,然后通过后端的图像处理与动作解释,准确理解人类手势的指挥信息,最后通过Mscomm串口控件将指令发给负责做出反馈的执行系统。
智能手势控制系统方案框图如图1所示。
图1 智能手势控制系统方案框图
原理概述
理解肢体语言的前提是机器能够识别人类的指挥动作,肤色检测技术便是其中一种高效的识别方式。肤色检测是根据人类肤色的独有特征区分肤色点与其他像素点的技术,根据区分依据不同,分为基于统计与基于物理的两种检测技术。其中基于统计的检测技术比较简单,可以单纯设计算法来实现。肤色统计模型的建立有三种方式:限定阈值、高斯模型、直方图模型。考虑到本系统对实时性的要求,选择了限定阈值的统计模型作为检测依据。
统计模型的合适与否,决定了检测算法的最后效果,所以需要一种手段来使得肤色点产生很好地类聚。颜色空间变换便是这样的一种技术,在肤色检测中常常用到YCrCb空间。我们平日所见的图像很多都是基于RGB空间的,在RGB空间里肤色在很大程度上受到亮度的影响,导致肤色点很难从非肤色点中分离出来。如果直接在RGB空间进行处理的话,肤色点是离散的点,中间嵌有很多非肤色,这为肤色检测带来了难题。如果把RGB转为YCrCb空间的话,可以忽略Y分量(亮度)的影响,因为该空间受亮度影响很小,肤色会产生很好的类聚。这样就把三维的空间转为二维的CrCb,肤色点会聚合形成一定的形状,具有很好的识别效果。
经过前人学者大量的皮肤统计信息可以知道,如果将皮肤信息映射到YCrCb空间,则在CrCb二维空间中这些皮肤像素点近似成一个椭圆分布。因此如果我们得到了一个CrCb空间下的椭圆,给定一个像素点,只要判断它的 (Cr, Cb) 坐标是否落在椭圆内(包括边界),就可以判断该点是否是肤色点。
检测流程
借助于OPENCV函数库自带的转换函数,我们可以很方便地将图像从RGB空间下转化到YCrCb空间下,然后进行椭圆拟合,就可以完成肤色检测的目的。详细操作如下。
(a)将原图转化到YCrCb空间下:
c v C v t C o l o r(i m g,i m g Y C r C b,CV_ BGR2YCrCb)。
(b)计算像素总数。
(c)遍历像素点,对每个像素点的CrCb分量进行椭圆坐标变换。
(d)根据亮度Y的区间,判断Value的值是否满足条件,即像素点是否落在椭圆区域内,若满足条件则把像素值拷贝到存放检测结果的彩图中。
if(y〈100)if(value〈700)memcpy(pMask,pimg,3);
else if(value〈850)memcpy(pMask,pimg,3);
肤色检测算法的效果如图2所示。
图2 肤色检测效果图
经过肤色检测后,得到排除非肤色区域的结果图。接下来需要进一步的处理。
目标判决
首先不管什么检测算法,受光照等各种因素的干扰,处理效果都会存在不尽人意的地方,除了会有残留的非肤色区域外,还会有视频背景里面非动作主体的干扰存在,所以需要通过滤除干扰来完成手脸目标的判决。
考虑到处理结果中,不管什么干扰,与正常的肤色区域相比,所占面积的比例都很小,所以我们使用基于面积的简单方式,完成干扰的排除。
详细流程如下。
(a)首先进行形态学滤波,去掉噪音。
截断取直型负反转是指一个冲断系后缘被一个新形成的陡倾张性断层所取直、截断,但不涉及冲断层两侧重复出现的地层。老30-桩海10井近东西向地震剖面显示,该区燕山末期发育了走向北东、倾向北西的一系列缓倾角逆断层,当逆断层逆冲受阻时,便切层逆冲形成若干个逆断层,构成叠瓦冲断组合。喜山早期,在逆冲断层应力集中的后缘,被正断层截切并反向下滑,形成负反转构造(图1),并形成花状构造。其显著特征为:该断裂向深部延伸,归并于变缓的断层面上,并处于纯拉张状态而无收缩,在断层上升盘则保留原逆冲形态,这种取直型负反转主要在桩西潜山北部与埕北凹陷结合部的老30-292井区发育。
cvErode(gray,gray,0,1);
cvDilate(gray,gray,0,1);
(b)找出图像里面的所有轮廓,然后找到每个轮廓的最小外接矩形。
cvFindContours(gray,stor,&cont);
(c)找出外接矩形的最大面积。
(d)以最大面积的一半作为阈值,外接矩形面积小于该阈值的区域认为是干扰区域。
(e)满足条件的区域就是有效的动作区域,找出这些区域的中心点,作为之后提取指挥信息的特征点。
滤除干扰前后的效果对比如图3所示。
效果显示,该算法简单易行,快速高效,满足系统要求。
图3 滤除干扰前后的效果对比
解释动作
经过目标判决得到的结果只包含有效的肢体动作,接下来的任务便是准确识别其中的指挥意图。每一种肢体语言都需要设定一种标准,我们设定头部的水平运动方向负责指挥小车左右运动,手部的竖直运动方向指挥小车前进与后退。
识别过程中,我们选用多次判断的方式防止动作的误判,只有连续动作的次数达到设定的阈值,才判定动作有效。现在以水平运动方向的判断为例,详细阐述我们所采用的算法流程。
(a)设定捕捉视频帧的时间间隔为100ms。
(b)每捕捉到一帧图片,经过前期的处理后,将处理所得特征点的横坐标与前一帧特征点横坐标进行比较。
(c)比较结果变小,则left变量增一;变大,则right变量增一。
(d)当计数变量的值达到10时,这样指挥动作持续的时间刚好达到1s,此时认为主体发出了指挥动作。这样设计的好处在于,可以根据需要修改系统的判断灵敏度,防止误动作的干扰。
(e)若left〉=10,认为主体做出左拐的指挥动作,由后续的串口模块发送左拐指令;若right〉=10,认为主体做出右拐的指挥动作,发送右拐指令。
串行通信
串行通信,即数据的串行化传输。具体来说,就是每次获得一个字节,然后依次传输它的8位比特数据。这样做的优势在于,只需要一根数据线就可以传输8位的字节数据(单向),相应的劣势在于传输所用的时间是并行传输的8倍。本文的系统中,只需要传输一个字节的指令数据,所以串行传输完全可以胜任。
Mscomm控件
Mscomm控件是Windows平台下实现串行通行的一种Active控件,借助它可以非常简单地实现串行通信功能,我们只需在它的事件处理函数中添加自己的代码即可。编程原理简单易懂,易于操作。
下面简单地介绍一下控件的安装使用。
(a)建立项目:打开VC++ 6.0,建立一个基于对话框的MFC应用程序。
(b)在项目中插入Mscomm控件。
(c)在ClassWizard中定义CMSComm类控制对象。
(d)在对话框中添加接收框、发送框、发送按钮等控件。
(e)为控件添加变量:为显示框和发送框分别添加添加CString变量m_strRXData,和m_strTXData。
(f)添加串口事件消息处理函数OnComm():函数实现的主要功能是进行格式的转化,并将结果显示在接收框中。
(g)打开串口并完成初始化。
最后安装结果如图4所示。
图4 Mscomm控件的安装效果图
在正常光照条件下,进行系统性能测试。进行测试的软件平台为Windows XP系统与安装有OPENCV函数库的VC++6.0编译环境,硬件平台为笔记本电脑自带摄像头、无线串口发送模块、安装有无线串口接收模块的智能小车。实验过程中的系统运行效果如图5所示;最终测试结果以系统客户端发送的指令数据展示(如图6、图7所示)。
图5 系统运行效果示意图
图6 客户端发送右拐指令示意图
图7 客户端发送前进指令示意图
效果示意图显示,系统正确的检测到了手部与脸部的指挥动作,并能准确的标定目标的特征点。
效果显示,平台能顺利地与智能小车进行串行通讯,并发出右拐指令指挥小车运动。
效果显示,平台能顺利地与智能小车进行串行通讯,并发出前进指令指挥小车运动。
实验过程中,系统各环节运行良好,首先肤色检测与图像处理模块能很好地去除干扰,并准确的标定特征点;之后的动作解释模块,能准确的解释动作意图,发出相应的指令,指挥小车按照指挥者的意图运动。此外,由于系统采用了阈值判定的算法,系统本身可以避免误动作导致的误判,增加了系统的实用性。实验结果表明,系统整体运行良好,符合准确性、实时性的设计指标。
本文对基于运动方向跟踪的手势控制平台进行了研究,并详细讨论了其中的几个关键技术,如肤色检测、图像处理、基于Mscomm控件的串行通信等。实验结果显示,本系统满足实时性与抗干扰性要求,能准确的识别人体手势的指挥意图,并可以通过修改判断门限修改系统的灵敏度,避免因误动作引起的误判。如前文所述,系统的性能很大程度上取决于肤色检测算法的检测效果。所以,通过改进肤色检测模块,如使用基于物理的肤色检测手段,可以进一步提升系统的性能,这是我们之后研究与改进的方向。随着技术的发展,相信在不远的将来,手势识别技术一定会为人们的生活带来更加智能化和便捷化的体验。
10.3969/j.issn.1001-8972.2015.01.038