基于OpenCV的数字静态手势的匹配识别研究
2022-10-17于蕾
于 蕾
(1.合肥职业技术学院 信息工程与传媒学院,安徽 合肥 230011;2.中国科学技术大学,安徽 合肥 230011)
现如今,人们对于人机交互技术的需求日益提高,手势识别便是人机交互的重要的手段之一。人机交互的目标是使人机器即计算机的性能与人-人交互相似。手势在我们的日常生活中起着重要作用,它们可以帮助人们传达信息并表达自己的感受[1]。从技术上讲,手势是时空模式,可以是静态的,动态的或两者兼而有之的。手势识别技术可以应用于各个学科和我们的生活领域中了,如智能家居方向就可以使用这种高效的控制方式实现对设备的操控[2]。手势识别的研究可以分为动态手势和静态手势。其中,静态手势是利用模版匹配法进行手势识别,主要是分析不同特征(HOG特征[3]、Gabor特征[4]、几何特征[5]、谱图小波特征[6]以及多特征联合[7])信息的识别效果。而动态手势则在静态手势的基础上基于状态转移的图模型方法,检测和跟踪手势目标[8]。例如基于深度卷积网络的深度学习方法可以通过SSD模型和微调网结构实现目标识别和匹配[9]。本文基于OpenCV(Open Source Computer Vision Library)的进行数字静态手势的匹配识别研究。首先,对手势图像预处理:对摄像头提取到的帧图片进行二值化后,再滤波去噪、开运算以达到去除背景的效果;然后进行手势图像提取:预处理后的图像在HSV颜色模型下分离通道进行肤色分离处理,归一化后再次中值滤波去噪后对手势进行轮廓提取并过滤,绘制出手势轮廓。最后进行手势图像分类识别:采用Hu不变矩进行模板匹配从而达到手势识别的目的。
1 相关理论和实现过程
1.1 HSV颜色模型
HSV(HUE色调,Saturation饱和度,Value明度)是根据颜色直观特性有A.R.Smith在1978年创建的一种颜色空间[10]。H的取值范围为0°~360°,红色为0°,按逆时针开始计算;S的取值越大,颜色越饱和;V的取值范围为0%~100%,由黑到白。一般情况下,RGB模型面向的是工业工程,而HSV模型面向的是用户。在本文中,HSV颜色模型至关重要,通过该模型直接进行肤色分割,因为黄种人的肤色在HSV颜色模型中各项参数是由取值范围的。肤色范围:H(0-30),S(30-170),V(0-200)。
1.2 图像的获取
本文所要实现的是实时的手势识别,所以对于初始的图像是由视频中的帧图像提供的。首先打开摄像头,利用的是VideoCapture来访问计算机的摄像头,如若访问失败,便会输出摄像头打开失败的信息,并停止程序。环境需要光线充足,用户必须穿着长袖衣物以遮挡手腕部分。当摄像头成功打开,继续执行程序,将摄像头获取的图片帧储存到frame中,如若后续过程中摄像头没有接收到图片,便输出没有获取图片并跳出获取图片帧的循环。
1.3 手势轮廓提取
1.3.1 H通道分离
为了后续的肤色分割处理,我们首先将图片转换为HSV空间,再将其中的H通道图片分离出来单独处理。
使用到了OpenCV函数库中的cvtColor函数。cvtColor函数前两个参数便是输入与输出图片,第三个参数CV_RGB2HSV表示将输入图片从RGB空间转换为HSV空间。Split函数的作用是通道分离,将图像分离为H、S、V三个通道并存入channels[0]、channels[1]、channels[2]中。RGB转换HSV公式如下:
h=0°,(max=min);
(1)
(2)
(3)
(4)
(5)
v=max/255;
(6)
1.3.2 肤色分割
通过上一步对图片H通道图像的提取,可以针对原图H的值将用户的皮肤提取出来。使用inRange函数,第一个参数即输入,后两个元素便是筛选的阈值区间,最后一个参数就是输出的图片,其中输出的图片是一幅二值化后的图像。
result=minVal≤frameH≤maxVal;
(7)
即如果frameH某一个像素的灰度值在阈值范围minVal与maxVal之内,便在result图像中其灰度值表现为255,否则表示为0。
1.3.3 滤波降噪
通过线性滤波器以减少噪声,使用中值滤波器来模糊图像,此方法相较于使用线性滤波器,处理的图像细节更清晰,图像的边缘信息丢失少,但代价是需要更多的处理时间。
1.3.4 形态学处理
本文调用morphologyEX函数对降噪后的图片进行开运算处理(对图像先膨胀处理再进行腐蚀。在删除图像中细小对象时很好用,同样还可以放大低亮度区域),从而进一步去除大噪声,突出手势对象以便后续的手势提取。经过多次实验验证,采用了MORPH_RECT的构建方式,即矩形的结构元素,大小选择的是7×7。
1.3.5 手势轮廓提取
手势轮廓提取前将上述步骤处理后的图片所具有的信息进行整理,图片提取出来,放入一个大小相同的图片窗口中,并将其中的点存入被定为二位浮点型向量的mContours中,以便后续的轮廓查找。采用Canny图像边缘检测,这是由John.F.Canny开发的,因而以其名称命名。这个方法错误率低,仅在存在的边缘上检测;局部化良好,对于检测到的像素边缘将其处理至最小;反应简单,每个边缘只会有一个检测结果。检测步骤大致分为三步:1)用滤波器去除噪声;2)用离散微分的方法寻找图像倾斜度的强度;3)采用非极大值抑制,从而删除非边缘像素,给对象留下一条细线画出对象的轮廓。在Canny检测中,is_using_canny为1时调用Canny轮廓检测,为0时则不调用;阈值调节范围定在0-120以内[11]。轮廓提取效果图如图1所示。
图1 轮廓提取结果
1.4 手势的匹配识别
1.4.1 手势模板制作
本文主要通过程序识别手势从1到10的数字表示,将进行手势的轮廓提取再将处理后的图片作为识别模板,结果如图2所示。
图2 数字手势模板图
本文中手势模板由于模板匹配时采用的是Hu不变矩的方法,匹配时会自动调节大小和方向,所以模板中的手势没有大小和方向的要求。
1.4.2 Hu不变矩
Hu不变矩实际上是指图像的Hu矩具有平移、旋转和缩放不变的性质。将每个图像看作一个ρ(x,y)的密度分布函数,其分布区间放在[0,255]中。阈值对应的(p+q)阶中心矩定义如下[12]:
(8)
平移的不变性:设新的位置坐标为(x1,y1),其中:x1=x+α,y1=y+β。α、β是常数,可见中心矩是不变的。
φ1=η20+η02
(9)
(10)
φ3=(η30-3η12)2+(3η21-η03)2
(11)
φ4=(η30+η12)2+(η21+η03)2
(12)
φ5=(η30-3η12)(η30+η12)[(η30+η12)2-3(η21+η03)2]+(3η21-η03)(η21+η03)[(η30+η12)2-(η21+η03)2]
(13)
φ6=(η20-η02)[(η30+η12)2-3(η21+η03)2]+4η11(η30+η12)(η21+η03)
(14)
φ7=(3η21-η03)(η30+η12)[(η30+η12)2-3(η21+η03)2]+(3η21-η03)(η21+η03)[3(η30+η12)2-(η21+η03)2]
(15)
1.4.3 匹配识别
2 结果分析
2.1 数据集来源
实验数据来源于5位志愿者在不同背景下的手势拍照图像集,共包含10种手势,每种手势有10张图,合计100张手势图。不同手势图像存在脖子、干扰手臂、灯光、景深以及复杂背景的干扰,部分实验图像如图3所示。将收集到100张图像随机分成训练集和测试集两个部分,训练集和测试集的比例为7:3。
图3 部分示例手势图数据集
2.2 识别结果分析
为了验证基于OpenCV的静态手势识别技术的识别效果,分别选取30组1-10的手势数据,通过已设定手势模板进行测试。输出结果中hu的值越小,表示匹配度越高,本文将hu小于0.15的视为匹配成功并输出。图4为手势数字识别结果,以箱线图和正态分布曲线形式表示。其中,箱线图表示数据的分布区间和均值大小;而正态分布曲线则表示数据结果的局部分布丰度。从图1可以看出,各个数字识别的结果的正态分布比较均匀,曲线的弧度基本一致。除了数字2和10的hu不变矩特征值的结果分布跨度均在0.12左右,其余数字的hu不变矩特征值的结果分布跨度均在0.1左右。根据各数字的hu不变矩特征值均值结果按大到小的排列顺序为:7>5>8>2>6>3>1>10>4>9。
图4 手势数字识别结果
从图5可以看出,数字1的识别共进行了30次,成功次数30,识别成功率100%。数字2的识别共进行30次,成功次数26,失败次数4,识别成功率86.67%。数字3的识别共进行30次,成功次数20,失败次数10,识别成功率66.67%。数字4的识别共进行30次,成功次数30,识别成功率100%。数字5的识别共进行30次,成功次数26,失败次数4,识别成功率86.67%。数字6的识别共进行30次,成功次数28,失败次数2,识别成功率93.33%。数字7的识别共进行30次,成功次数30,识别成功率100%。数字8的识别共进行30次,成功次数26,失败次数4,识别成功率86.67%。数字9的识别共进行30次,成功次数30,识别成功率100%。数字10的识别共进行30次,成功次数30,识别成功率100%。本设计共实验300次,成功次数276,失败次数24,识别成功率92%。
图5 各个手势的识别准确率
3 结语
本文主要实现了手势图片的处理提取工作和处理后图片的匹配识别工作。在图像处理工作中主要通过HSV颜色模型的肤色分割,中值滤波器的降噪操作,形态学处理中的开运算,最后再由OpenCV库中的轮廓查找与绘制函数绘制出初始图片中的手势轮廓;在后续的手势匹配识别工作中主要利用的是图像的Hu矩不变性,只要提前按照前序的图像处理操作制作好手势的模板,再将获取处理后的图像与模板的图像做Hu矩的对比,当返回的比较值较低时,便可认为匹配成功。记录好匹配成功模板的编号,将其返回到程序之中,由程序将匹配成功的信息反馈给用户,从而达成手势识别的效果。然而,该技术仍然存在局限性。如若在采集的图像中存在除手势外的人体皮肤,在肤色分割的时候并不能很好的仅将手势图像提取出来,这个处理方法还有提升的空间,或者建议将手势的模板图形数字化,以寻求手势的数字特征,从而很好的将手势识别做得更精准迅速。