当前位置: 主页 > 快速通道 > 智能机器人 >

基于手势识别的机器人控制系统

2015-11-16 10:22 [智能机器人] 来源于:互联网
导读:文章研究了一种基于人体手势识别的机器人控制系统,首先,利用图像识别技术,通过YCrCb皮肤颜色模型提取手掌并分析指尖和手心的相关信息;其次,利用帧差法对手掌运动趋势和简单

    随着科学技术的发展,人们一直在探寻着一种全新的人机交互方式来突破鼠标、键盘、遥控器的约束,手势识别技术由于其具有自然、方便的人际交流特性而被人们所广泛研究,早在1993年B.Thomas等人就提出了借助数据手套或在人手粘贴特殊颜色的辅助标记来进行手势动作的识别,由此开启了人们对手势识别领域的探索,通过十多年的发展,尤其是计算机视觉的快速发展,人们从粘贴特殊颜色的辅助标记逐步向裸手识别技术迈进。

    微软公司就在2010年推出了一款名为Kinect的设备,用户只需要完成一些预定的手势动作就可以实现控制电脑玩体感游戏的目的,目前,互联网巨头谷歌及汽车厂商福特均在研发支持手势控制功能的智能汽车,此类汽车通过车载摄像头识别特定手势,以此来替代汽车仪表盘上的各种旋钮和按钮,或许很快,司机师傅们只需要挥一挥手,就可以随意打开窗户或者空调,本文研究的就是这种手势识别控制技术。

    文章建立了一个动态手势识别的模型,通过手势分割、手势识别和系统交互来实现手势控制机器人系统的设计,利用YCrCb颜色空间提取手掌区域并识别出手心和手指指尖的坐标,对手势区域进行实时跟踪和分析,得出相应的手势信息,将分析出来的手势信息通过无线蓝牙串口发送给机器人,进而控制机器人的运动。

1 肤色提取及手势分割

    1.1 基于YCrCb的肤色提取

    YCrCb颜色空间具有将色度和亮度分离的特点,对肤色的聚类特性比较好,受亮度变化的影响小,可以很好的区分肤色区域,根据文献中的数据可以知道,人体皮肤颜色在YCrCb色度空间的分布范围大致为:77≤Cb≤127,133≤Cr≤173选取这个范围作为肤色分割的阈值。

    以下是RGB颜色空间与YCrCb颜色空间的转换关系:

公式 

    1.2 复杂背景下的手势分割

    考虑到实际图像采集过程中背景噪声可能会对手部提取产生干扰,系统设计时首先需要排除类似于皮肤颜色背景噪声的影响,实验选择了和皮肤颜色相近似的相框和衣服作为背景如图1-1,通过以上的皮肤肤色模型对图像进行分割得到图1-2所示的二值化图片。

    OpenCV提供了查找连通区域的函数,可以返回各个连通区域的标号和像素点的面积,由于手部区域在图像中占主导地位,取像素点面积最大的连通区域为候选区域,用矩形标记出该连通区域和中心点的坐标,对其他不符合条件的区域进行填充即可得到如图1-3所示的手势分割区域。

手势分割对比图 

图1 手势分割对比图

    设计时还需考虑如果手不在图像捕捉范围时,不能误将和肤色类似的背景区域理解为手势区域,为了防止这样情况的发生,规定当最大连通区域小于5000像素点时,不予标记,系统选择了许多较为苛刻的环境进行测试,实验效果良好,可以正确分割出手势区域。

2 手势信息分析及识别

    2.1 指尖提取和手指个数识别

    为了确定指尖的位置,还需引入凸包这一概念,提取出的手掌区域的二值化图片在计算机中是以二维平面的点集构成的,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点,OpenCV提供了convexHull函数来寻找凸多边形的各个顶点,图2就是对手势图片的凸包顶点进行标记后的结果。

凸包顶点标记 

图2 凸包顶点标记

    从图2中可以发现,有些指尖被重复标记而且一些无关区域也被标记出来,这就给精确识别指尖个数带来了麻烦,需要去除这些不符合要求的点,规定当凸包顶点间距离小于500像素点时,只标记其中一个;低于手心坐标的区域不予标记,其中手心坐标提取公式如下:

公式 

    公式中,Pm(x,y)为手势区域中第m个像素点的坐标值,N为手势区域中像素点的总个数,得到的C(x,y)为手心的坐标,通过以上步骤就可以比较准确的识别出手心和指尖的位置,统计蓝色圆圈的数目就可以得到手指个数,如图3。

指尖、手心标记 

图3 指尖、手心标记

2.2 动态手势识别流程

    上文识别出了手部区域,手心、指尖位置和手指个数,接下来通过帧差法对运动的手势信息进行识别处理,程序设置Hand和Count两个变量分别标记是否捕捉到手和手进入的帧数,程序流程图如图4所示。

手势识别程序流程图 

图4 手势识别程序流程图

    情况一(Count=0,Hand=0):当前图像和上一帧图像中都没有手出现,表示这段时间内无手进出摄像头捕捉区域,不做任何处理。

    情况二(Count=0,Hand=1):当前图像无手出现,上一帧有手出现,表示手刚刚离开摄像头捕捉区域,保存该图像信息。

    情况三(Count=1,Hand=1):当前图像有手出现,且为第一帧图像,表示手刚刚进入图像捕捉区域,保存该图像信息。

    情况四(Count=K,Hand=1):表示手一直在图像捕捉区域中。

    2.3 动态手势识别

    2.3.1 上下左右的识别

    结合情况二和情况三,通过判断第一帧和最后一帧手势中心坐标的变化情况就可以识别出上、下、左、右这四种手势运动方向,其识别过程可由如下公式表示:

公式 

    C1(X,y)和Ccount-1(x,y)分别表示第一帧和最后一帧手势中心的坐标,θ为两点间的夹角,通过判断θ值就可以知道手势运动的大体方向。

    选取第一帧和最后一帧来代替手从进入捕捉区域到离开时系列图像帧,即具有代表性也简化了程序设计的复杂度,通过计算这两帧图像手心坐标的夹角的正切值,最多可识别出八种运动方向,考虑到系统的精确度和实际设计的需求,只选取了上、下、左、右这四种判别方向,识别效果较为理想。

    2.3.2 张手握拳的识别

    对于情况四,通过帧间差分的方法识别张手和握拳这两种动态手势信息,张手可定义为连续M帧手指个数为5且接下来的连续M帧手指个数保存不变,握拳可定义为连续N帧手指个数为5且接下来N帧内减少T个像素点。M、N和T的值都需要根据系统的具体情况进行设置,我们设置的阈值为M=N=20,T=1000。在此期间任何一帧不符合条件时M、N和T的值立即清零,重新计数。

    通过以上步骤就可以识别6种手势信息,进而可产生6种不同的控制信号。

3 手势控制机器人系统设计

    图5为手势控制机器人系统的原理图.实验者对摄像头做出动态手势,系统通过上文的手势识别流程识别出相应的手势动作,当符合条件时给无线蓝牙串口写一个数据发送给机器人,机器人接收该串口数据后执行相应的动作指令。

手势控制机器人系统的原理图 

图5 手势控制机器人系统的原理图

    在实际设计过程中,机器人若要调整运动方向,必须先停止当前的运动再执行下一次运动,指令如果发错要有纠错的能力,发送指令之间要有一定的时间间隔,以防止控制信息重复多次发送而导致机器人无法正确处理相应信息。

    规定当发送前、后、左、右这四种指令时,下一次指令只能发送加速或停止,否则系统自动屏蔽不予发送,Hand和Count值自动清零,重新捕获图像,每个指令发送的时间间隔为三秒钟,三秒以内系统不对捕捉图像进行处理,如此以来,就可保证即使操作者错误发送一些指令信号,系统在识别的过程中也可以予以屏蔽,避免影响机器人正常工作。

表1 手势动作对应串口数据

手势动作对应串口数据 

4 实验结果分析

    实验者按照较快、正常、较慢这三种速度对每种动作进行了20次测试,实验结果和识别率如表2所示,可以发现手势运动速度的快慢对实验结果并没有太大的影响,除握拳这一手势动作以外,其他动作的平均识别率都能达到90%以上,如果操作者动作更加规范,其识别准确度更高,通过计算其时间复杂度,系统对不同手势动作的平均响应时间小于50ms,具有较高的实时性,可以满足对机器人进行实时控制的要求。

表2 动态手势识别结果

动态手势识别结果 

5 总结与展望

    基于计算机视觉的手势识别系统对环境较为敏感,手势识别易受到光照亮度、周围环境颜色和人体肤色的影响,从实验结果来看只要在正常光照条件下,周围没有大面积整块的与肤色接近的物体时系统是不会受到太大影响的,当环境背景较为复杂,特别是当手势区域和近似于肤色颜色区域重合时,系统会将手势部分和噪声区域整块的视为一个连通区域而影响手势的识别,如何消除这一点的影响,取得更好的鲁棒性将是我们下一步重点解决的问题。


(编辑:admin)

推荐文章