针对动态手势识别实时性不足和识别效率低的问题,本文提出一种基于OpenCV的动态手势检测和数字识别方法。该方法采用肤色特征提取手势轮廓,以预测和重定位的形式采用HMM来对手势进行跟踪,手势的识别采用先对指尖轮廓进行定位的方式。经过实验,本文方法能够稳定地跟踪手掌区域,识别准确度高,并能够在保证识别率的基础上实现对手指数目的准确识别跟踪。 In view of the problem of lack of real-time recognition and low efficiency of dynamic gesture recognition, a dynamic gesture tracking and digital recognition algorithm based on OpenCV is proposed. The method uses the skin color feature to extract the gesture profile, and HMM is used to track gestures in the form of predictions and relocations. The identification of gestures is done by first positioning the fingertip profile. After the experiment, the framework can track the palm area stably, and the recognition accuracy is high, and there is no error and can achieve the accuracy of the target tracking based on the recognition rate.
马州生
河南省经贸职业学院,河南 郑州
收稿日期:2017年9月22日;录用日期:2017年10月7日;发布日期:2017年10月13日
针对动态手势识别实时性不足和识别效率低的问题,本文提出一种基于OpenCV的动态手势检测和数字识别方法。该方法采用肤色特征提取手势轮廓,以预测和重定位的形式采用HMM来对手势进行跟踪,手势的识别采用先对指尖轮廓进行定位的方式。经过实验,本文方法能够稳定地跟踪手掌区域,识别准确度高,并能够在保证识别率的基础上实现对手指数目的准确识别跟踪。
关键词 :肤色特征,手势跟踪,OpenCV,手势识别,HMM
Copyright © 2017 by author and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
基于生物特征的身份认证方法和系统的研究一向都是图像识别技术 [
针对手掌的提取主要是为了将手掌从庞大的背景中提取出来,因为背景复杂,采用灰度图像二值化的方法无法取得好的效果。采用颜色手套的解决方案能取得较好效果,但会有其他问题。而在本框架中,采取肤色分割提取手掌轮廓的方式,通过测试,在大多情况下可以取得理想效果。
对于手势的跟踪,经典手势跟踪算法 [
静态手势识别算法一种是采取手指指尖定位,以手指指尖数目为静态特征,此方法识别率高且失误率低;还有一种是通过SVM [
本文框架对于动态手势识别,无需太过复杂的识别效果,只要实现对手掌质心的跟踪,相邻帧图中的有用手掌轮廓质心位置做差可得到相邻帧图像的动态特征向量。
为了实现对定位手势轮廓的高效准确的跟踪,本文采取预测和重定位的形式,采用基于卡拉曼滤波的粒子滤波算法来对手势进行跟踪。
本文提出的基于OpenCV的动态手势跟踪识别框架如图1,首先根据肤色特征对手势轮廓进行准确完整的提取和分离并对采集的图片进行形态学处理获得手势区域,然后再使用粒子滤波算法对定位到的手势轮廓进行高效准确的跟踪和识别。本文后续会从OpenCV计算机视觉库介绍,肤色分割模型的构建,图像的预处理,静态手势特征提取方法的构建,对定位的手势轮廓进行高效准确的跟踪,手势识别及实验结果分析等方面论述原理及效果。
在提取图像中肤色前,为了实验效果能更明显,必须先对图像进行必要的处理,去除噪声干扰,让颜色相近的区域更连贯。并且需要清晰的图像边缘,以达到提高识别率和保证算法稳定性的效果。
本文采用高斯滤波来对图像进行预处理,作用是对信号做平滑处理,数字图像后期的使用,其噪声干扰成为最大的问题,因为误差会累计,Gauss滤波器可以用来获取高信噪比的图像(真实信号)。图像预处理过程如图2所示。
图1. 基于OpenCV的动态手势跟踪识别框架
图2. 图像预处理
为了得到良好的图像边缘,经过Gauss-Laplace变换,需要对图像做Gauss平滑滤波,去除干扰噪声。
利用肤色来检测手部是手部检测最直接的方法。皮肤颜色稳定,不轻易受到缩放、平移和旋转的影响,且对图像的尺寸、拍摄方向和角度的依赖性较小。
颜色空间主要有两种,分别是YCbCr颜色空间和HSV颜色空间,根据Enamin D. Zarit等人对肤色在这些彩色空间分布的研究,以及在检测中性能的分析,本文通过对手部皮肤颜色进行特征分析(选取黄种人的肤色),选用HSV颜色空间进行手部区域检测。其转换公式为:
H = { H 1 / 360 if B ≤ G ( 360 − H 1 ) / 360 else (1)
其中,
H 1 = cos − 1 { 0.5 [ ( R − G ) + ( R − B ) ] ( R − G ) 2 + ( R − B ) ( G − B ) } (2)
S = max ( R , G , B ) − min ( R , G , B ) max ( R , G , B ) (3)
V = max ( R , G , B ) 225 (4)
通过对大量肤色和非肤色在H和S空间分布的分析,建立的肤色信息分割 [
F = { 0 if H d < H < H u ‖ S > S u 1 otherwise (5)
其中F为分割后得到的图像通过训练样本获得的在H和S空间肤色分布的参数,再通过(5)式分割彩色图像获取灰度二值图像。
常见的静态手势特征有质心、周长、手指分布等,手的轮廓可以用不间断的点来表示,在手掌轮廓不易提取时,或者为了提高计算效率,也可以通过计算手掌轮廓特征作为手势特征。
本文主要通过计算手指的个数,来识别手势特征并进行跟踪 [
M 00 = ∑ x ∑ y I ( x , y ) (6)
M 10 = ∑ x ∑ y x I ( x , y ) (7)
M 01 = ∑ x ∑ y y I ( x , y ) (8)
x c = M 10 M 00 , y c = M 01 M 00 (9)
手势轮廓特征提取 [
本系统中测试人员将手置于交互空间,手掌心正对摄像头 [
动态手势具有时间和空间上的变化,在不需要实现识别过于复杂手势的前提下,只需获得当前手势轮廓的质心,通过对比相邻帧间轮廓的质心位置变化便可以获得动态特征向量。把得到的动态特征向量 [
隐马尔可夫模型是从马尔可夫(Markov)链的基础上发展来的,马尔可夫链是随机过程,HMM是双重随机过程,马尔可夫链中观察值与状态一一对应,HMM中状态转移与观察值不对应,不能直接观察状态转移,所以才称为隐马尔可夫模型 [
1) 状态集合 S = { S 1 , S 2 , ⋯ , S N } ,其中N为状态数,表示t时刻的状态。状态之间的转移是根据转移概率矩阵A决定的。
2) 观察符号的集合 O = { V 1 , V 2 , ⋯ , V M } ,其中M是集合中的符号数量。每个状态输出O是根据观察概率矩阵B决定的。
3) 状态转移概率分布矩阵 A = { a i j } ,其中 a i j = P ( q t + 1 = S j | q t = S i ) ,表示从 S i 转移到 S j 的概率。
4) 观察概率矩阵 B = { b i ( j ) } , b i ( j ) = P ( O t = V j | q t = S t ) ,表示状态 S t 观察到 V j 的概率。
5) 初始状态概率分布 c = { c i } , c i = p ( q 1 = s i ) , c i 表示初始状态为 S t 的概率。
HMM从一个初始状态开始,每个状态根据观察概率矩阵,输出一个观察符号,然后根据状态转移矩阵,转移到一个新的状态。一个具有N个状态数的隐马尔科夫模型在一共有 N T 种不同的长度为T状态转移序列,具有很大的状态空间。隐马尔科夫模型具有很强的学习能力,对序列的长短变化适应性比较好,适用于对动态时间序列数据的识别且识别稳定性有显著提高。识别过程如图5所示。
本文实验是在VS2013集成开发环境下,基于OpenCV视觉库用C++开发,测试视频来源为普通数字视频摄像头拍摄,使用的计算机为普通桌面Pc机,采用Intel Pentium双核2.7GHz CPU,2G RAM,微软Windows10 32位操作系统,摄像头采用普通数字视频摄像头,为验证本框架的稳定性和高效性,我们采用6种手势,如图4分别代表6种不同的手指状态。
实验分别进行静态识别和动态识别。在静态识别中,选取8名实验人员,分别用右手采集6段图像,长度为500帧,每段图像只使用一个手形,共需要3000帧图像数据,之后逐帧将采集的图像输入,来检验本文方法的正确性。在动态识别中,让系统在实验室通常环境下即时测试,实验对象在摄像头前做出既定手形,可以实现对既定的6种手势状态实时稳定的跟踪识别,能够使本文系统有更好的识别效果 [
通过实验可以看出在识别准确性上,本框架与基于TLD和DTW的动态手势跟踪识别算法相比识别精度相近,都达到了95.8%以上,具有较高的识别率。测试结果如表1所示。并且与Zhou等人的实验相
图3. 手指定位局部极值法
图4. 检测提取6种手势表示的数字
图5. 手势识别整体流程
图6. 实时手指指尖标记图
手势数字状态 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
识别率/% | 96.2 | 98.3 | 95 | 97.5 | 96 | 98 | 100 |
表1. 手势识别测试结果
比,本文框架的处理速度分别是其两种方法的5倍和45倍,实验人员按上述手形进行即时实验,每帧图像处理时间约为82.71 ms,速率范围11~14帧/s,体现了很好的实时性且系统稳定性良好,设备获取便捷,测试对环境的要求低,场景布置简单,适用于工作间、实验室等场景的人机交互。
本文主要针对手势跟踪识别实时性和识别效率的问题,提出了一种基于OpenCV的动态手势跟踪识别框架。实验结果表明,本文方法根据肤色特征分割能有效的实现手势轮廓的检测,且通过手指指尖定位与HMM相结合在保证了高识别率的基础上,系统的实时性与稳定性显著提高。文中在动态识别阶段,为增强对既定手势的快速跟踪识别 [
河南省自然科学基金(2015A071008)资助项目。
马州生. 基于OpenCV动态手势检测识别方法的研究Study of Hand Gesture Detection and Identification Algorithm Based on OpenVC[J]. 图像与信号处理, 2017, 06(04): 196-203. http://dx.doi.org/10.12677/JISP.2017.64022