一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于傅里叶描述子的手势识别方法

2022-10-26 17:56:01 来源:中国专利 TAG:


1.本研究涉及计算机视觉和人工智能技术领域,尤其涉及一种基于傅里叶描述子的手势识别方法。


背景技术:

2.自汽车被发明以来,其人车交互方式一直在不断地发生变化。语音交互是当前常见的智能人车交互方式,但对聋哑人、小孩和老人等语言障碍人士而言,其用户体验并不够友好。随着手势识别技术不断地发展,手势识别也成为汽车新的人车交互方式。通过手势识别技术,驾驶员和乘客可以使用不同手势同车载设备交互享用形形色色的功能,例如,手势挂接电话、播放音乐、开关车窗,以及调节空调温度、座椅位置等功能。由于人手姿势千变万化,且其易受光线、肤色、背景等因素影响,因此准确、实时和稳定地识别出手势成为待解决的关键问题。
3.一种基于傅里叶描述子的手势识别方法主要利用傅里叶描述子描述手势轮廓形状,并用人工神经网络对手势轮廓形状分类。由于傅里叶描述子具有旋转不变性等特性,因此相同形状但旋转角度不同的手势轮廓被归为相同手势。这样的方法只关注手势轮廓形状而省略掉手势轮廓旋转方向。就车载设备控制而言,手势轮廓旋转方向对用户体验具有重要意义,例如,手握拳头伸出食指的手势,食指偏左和偏右可以很直观地表示调高和调低空调温度或调高和高低音量。针对此类问题,本专利提出一种能区别手势轮廓旋转方向的计算方法,以此辨别人手姿势,具有识别率高、性能优越和鲁棒性好优点。


技术实现要素:

4.本发明的目标在于提供一种基于傅里叶描述子的手势识别方法,解决手势识别过程常遇到的手势分类、实时性、鲁棒性问题。
5.为实现上述目的,本发明提供一种基于傅里叶描述子的手势识别方法,主要包括以下步骤:

读出不同手势动作数据集图像并提取手势轮廓;

按坐标转换关系,重新计算手势轮廓点坐标,建立新手势轮廓;

计算新手势轮廓的傅里叶描述子;

以所述傅里叶描述子为手势动作特征,经人工神经网络训练获取手势识别神经网络模型,基于所述手势识别神经网络模型识别待识别的手势动作。
6.所述一种基于傅里叶描述子的手势识别方法,所述步骤

手势轮廓提取步骤如下:

将rgb颜色空间图像转换成hsv颜色空间图像;

利用肤色在hsv颜色空间的分布特点提取肤色,获取肤色图像;

将肤色图像二值化,获取二值化图像;

通过边界跟踪方法搜索二值化图像中的人手边界,所述人手边界即为手势轮
廓。
7.所述一种基于傅里叶描述子的手势识别方法,所述步骤

新手势轮廓建立步骤如下:

设( contourx(i),contoury(i) )为手势轮廓第i个轮廓点的横纵坐标值,0《=i《l,l为手势轮廓点数量;

新旧坐标转换公式,newcontourx(i)= contourx(i),newcontoury(i)= contourx(i) contoury(i);

( newcontourx(i),newcontoury(i) )为新手势轮廓第i个轮廓点的横纵坐标值;

全部( newcontourx,newcontoury )轮廓点组成新手势轮廓。
8.所述一种基于傅里叶描述子的手势识别方法,所述步骤

新手势轮廓傅里叶描述子计算步骤如下:
⑴ꢀ⑵ꢀ
式中s(i)为新手势轮廓第i个轮廓点的复数形式;



式中a被称为傅里叶描述子,是利用傅里叶变换对s变换后的值;



是第w个傅里叶描述子的模,f(w)是第w个经过归一化处理的傅里叶描述子,w值为1至n,n取统一值,取值范围为[8,l),归一化处理后的傅里叶描述子为新手势轮廓的傅里叶描述子。
[0009]
所述一种基于傅里叶描述子的手势识别方法,所述步骤

将新手势轮廓的第1至第n个f(w)作为bp人工神经网络输入,利用bp人工神经网络训练所述不同手势动作数据集图像,得到一组经过训练后的人工神经网络权值和偏置权,包含所述人工神经网络权植和偏置权的bp人工神经网络为手势识别神经网络模型,所述手势识别神经网络模型用于识别手势动作。
[0010]
通过以上方案,本发明的有益效果在于:可以区分形状相同但旋转角度不同的手势,能识别更多手势动作;具有识别性能和鲁棒性优势。
附图说明
[0011]
图1为本发明手势训练流程图。
[0012]
图2为本发明手势识别流程图。
[0013]
图3为本发明预定义手势示意图。
[0014]
图4为本发明形状相同但旋转角度不同的手势轮廓示意图。
具体实施方式
[0015]
下面结合本发明附图,向本领域技术人员完整描述本发明技术方案,使本发明的技术内容更加易于理解,其目的在于让开发者能够根据本发明方案开发新产品。凡根据本发明精神实质所作的变动,都属于本发明的保护范围。
[0016]
实施示例-手势训练。
[0017]
手势训练过程如图1所示。
[0018]
步骤step1读取人手图像数据集。本实施示例基于opencv实现,opencv是开源的跨平台计算机视觉库,可以在 windows、linux、android等系统运行,支持java和python等开发语言。所述人手图像数据集预定义23个手势,每个手势1张图像,图像是640*480和rgb颜色的png文件,所述人手图像数据集预定义23个手势如图3所示。通过调用openccv中的方法imread读出人手图像数据集文件。
[0019]
步骤step2 提取肤色。通过调用opencv中的方法cvtcolor将人手图像的颜色空间从rgb空间转换为hsv空间。设置下限阈值[100, 20, 20]和上限阈值[135, 255, 255],通过调用opencv中的方法inrange将hsv人手图像中的肤色搜索出来,并新建二值人手图像,用白色表示肤色(人手),用黑色表示非肤色(背景)。
[0020]
步骤step3 提取手势轮廓。通过调用opencv中的方法findcontours找出所述二值人手图像的轮廓,所述轮廓为手势轮廓。
[0021]
步骤step4遍历所述手势轮廓,读出第i个轮廓点的横纵坐标( x(i),y(i) ),将所述横纵坐标转换成新横纵坐标,newcontourx(i)=x(i), newcontoury(i)=x(i) y(i),0《=i《l,l为组成所述手势轮廓的轮廓点数量, ( newcontourx(i), newcontoury(i) )为新轮廓点横纵坐标,由全部新轮廓点组成的轮廓称为新手势轮廓。
[0022]
步骤step5计算所述新手势轮廓的傅里叶描述子。先用复数s(i)描述所述新轮廓点横纵坐标,,其中,0《=i《l;再使用opencv中的方法fft对s进行傅里叶变换;接着通过opencv中的方法fftshift将傅里叶变换后的低频数据移到中心位置,从中心位置左右两侧各截取n/2个低高频数据,n取16;最后通过opencv中的方法ifftshift将所述低高频数据移回原位置,移回原位置的所述低高频数据即是傅里叶描述子a(k),0《=k《=n。
[0023]
步骤step6规一化所述新手势轮廓的傅里叶描述子。紧接着基于复数模公式算出傅里叶描述子的模,对所述模进行规一化处理,,所述f(w)为所述新手势轮廓的归一化傅里叶描述子。
[0024]
步骤step7应用bp人工神经网络训练所述人手图像数据集。所述bp人工神经网络分输入层、隐藏层和输出层,输入层由n个神经元组成,隐藏层由2*n个神经元组,输出层由23个神经元组成,输入层神经元接受所述f(w),输出层神经元对应所述预定义23个手势,权重和偏置初值取随机数,激活函数使用sigmod函数,输出层使用softmax函数决策,经过迭代10万次训练,所述bp人工神经网络适应所述人手图像数据集后得到一组能识别所述预定义23个手势的权重和偏置值,包含所述权重和偏置值的bp人工神经网络为所述手势识别神经网络模型。
[0025]
步骤step8将所述权重和偏置值转为json数据,将所述json数据存储到文本文件。
[0026]
实施示例-手势识别。
[0027]
手势识别过程如图2所示。
[0028]
步骤step1从所述文本文件读出所述权重和偏置值,使用所述权重和偏置值初始化所述手势识别神经网络模型的权重和偏置值。
[0029]
步骤step2采集摄像头图像。通过调用openccv中的方法videocapture和read读出摄像头图像。
[0030]
步骤step3 提取肤色。通过调用opencv中的方法cvtcolor将人手图像的颜色空间从rgb空间转换为hsv空间。设置下限阈值[100, 20, 20]和上限阈值[135, 255, 255],通过调用opencv中的方法inrange将hsv人手图像中的肤色搜索出来,并新建二值人手图像,用白色表示肤色(人手),用黑色表示非肤色(背景)。
[0031]
步骤step4 提取手势轮廓。通过调用opencv中的方法findcontours找出所述二值人手图像的手势轮廓。
[0032]
步骤step5遍历所述手势轮廓,读出第i个轮廓点的横纵坐标( x(i),y(i) ),将所述横纵坐标转换成新横纵坐标,newcontourx(i)=x(i), newcontoury(i)=x(i) y(i),0《=i《l,l为组成所述手势轮廓的轮廓点数量, ( newcontourx(i), newcontoury(i) )为新轮廓点横纵坐标,由全部新轮廓点组成的轮廓称为新手势轮廓。
[0033]
步骤step6计算所述新手势轮廓的傅里叶描述子。先用复数s(i)描述所述新轮廓点横纵坐标,,其中,0《=i《l;再使用opencv中的方法fft对s进行傅里叶变换;接着通过opencv中的方法fftshift将傅里叶变换后的低频数据移到中心位置,从中心位置左右两侧各截取n/2个低高频数据,n取16;最后通过opencv中的方法ifftshift将所述低高频数据移回原位置,移回原位置的所述低高频数据即是傅里叶描述子a(k),0《=k《=n。
[0034]
步骤step7规一化所述新手势轮廓的傅里叶描述子。紧接着基于复数模公式算出傅里叶描述子的模,对所述模进行规一化处理,,所述f(w)为所述新手势轮廓的归一化傅里叶描述子。
[0035]
步骤step8识别手势。以所述f(w)为所述手势识别神经网络模型的输入,通过所述手势识别神经网络模型识别手势动作。
[0036]
判断是否结束,未结束则跳转到步骤step2,否则结束。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献