一种基于几何特性的手势识别方法

未命名 07-14 阅读:162 评论:0

一种基于几何特性的手势识别方法
1.技术领域
2.本研究得到海南省自然科学基金(no: 621rc607)资助,涉及图像处理和模式识别技术领域,尤其涉及一种基于几何特性的手势识别方法。


背景技术:

3.由于手势具有直观性和自然性等特点,因此手势已成为人机交互的重要方式。随着人工智能发展,手势识别技术得到广泛关注。手势识别技术已被应用于汽车控制、智能家居和辅助驾驶和手语认知等领域,其对驾驶员开车和聋哑人交流等具有重要意义。基于视觉的手势识别需先通过摄像头采集手势图像,再对手势进行识别。这对计算机而言是一个艰巨的任务。因为人手姿势千变万化,且其易受光线、肤色、背景等因素影响,所以准确、实时和稳定地识别出手势成为待解决的关键问题。
4.基于几何特征的识别方法主要利用手势中的手指数目、角度、相对位置等特征进行手势的分类与判别。但是由于个体差异等原因,传统基于几何特征识别手势的方法存在识别手势少和计算复杂等问题。针对问题,本专利提出一种手指数目和手指方向角计算方法,以此辨别人手姿势,具有运算简单、计算量少、识别率高、识别手势多和鲁棒性好优点。


技术实现要素:

5.本发明的目标在于提供一种基于几何特性的手势识别方法,解决手势识别过程常遇到的人手差异、手势种数、计算量大和鲁棒性问题。
6.为实现上述目的,本发明提供一种基于几何特性的手势识别方法,主要包括以下步骤:

步骤step1:利用彩色摄像头拍摄彩色人手图像;

步骤step2:基于肤色将人手从所述彩色人手图像中搜索出来,新建二值人手图像,用白色表示人手,用黑色表示背景;

步骤step3:基于数学形态算法将手指腐蚀掉从所述二值人手图像将手掌分离出来,新建二值手掌图像;

步骤step4:基于轮廓提取方法从所述二值手掌图像搜索出手掌轮廓;

步骤step5:基于零阶矩和一阶矩计算方法算出所述手掌轮廓质心,遍历所述手掌轮廓搜出手掌轮廓最底端点;

步骤step6:基于三角函数算出人手检测圆弧曲线;

步骤step7:基于人手检测圆弧曲线检测所述二值人手图像像素颜色,根据颜色统计手指数目;

步骤step8:基于向量夹角计算方法,计算手指向量和水平向量夹角,所述夹角为手指方向角;

步骤step9:根据手指数目和手指方向角组合值识别手势。
7.所述一种基于几何特性的手势识别方法,所述步骤step6将弧度[-π/6,π+π/6]均分为n份弧度ri,算出所述手掌轮廓质心(centerx,centery)与所述手掌轮廓最底端点(buttomx,buttomy)之间的欧氏距离d;以所述手掌轮廓质心为圆心,以dist= d*k(k=1.55-1.7)为圆半径,以所述ri为圆弧度,基于三角函数算出人手检测圆弧曲线,所述人手检测圆弧曲线由n个人手检测点detectpointi组成,detectpointi=(xi,yi),计算公式如下所示:ri=i*(π+π/3)/n ,其中1《=i《=n,n=90
ꢀꢀꢀꢀꢀꢀꢀꢀ
(1)yi=centery
ꢀ‑ꢀ

(dist * sin(ri) )

ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)xi=centerx + ⌊
( dist * cos(ri) )

ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)。
[0008]
所述一种基于几何特性的手势识别方法,所述步骤step7手指数目检测步骤如下:

用fingers表示所述手指数目,置初值fingers=0,continuity表示白色像素点连续出现次数,置初值continuity=0,置初值i=0;

如果i》=n则跳转到

,否则读出所述detectpointi的坐标(xi,yi),检测所述二值人手图像像素(xi,yi)是否为黑色,若为黑色则置所述白色像素点连续出现次数continuity=0,并跳至

,否则所述白色像素点连续出现次数continuity++;

若所述白色像素点连续出现次数continuity!=3则直接跳转到

,否则检测到新手指,存储手指坐标点fingerspos
finger
,fingerspos
finger
=(xi,yi),所述手指数目finger++,跳转至



i++,跳至

继续检测;

输出fingers,fingers为最终检测到的手指数目。
[0009]
所述一种基于几何特性的手势识别方法,所述步骤step8手指方向角计算步骤如下:

设levelv是指向左方的水平向量,levelv=(-centerx,0),fingersposi(xi,yi)是所述手指坐标点,fingers为所述最终检测到的手指数目,angle为手指方向角,angle初值=0,i初始=0;
⑵ꢀ
如果i》=fingers则跳至

,否则以所述手掌轮廓质心(centerx,centery)为始点,以fingersposi(xi,yi)为终点,根据向量公式算出手指向量fingervi;

根据两向量夹角计算公式计算所述手指向量fingervi和所述水平向量levelv之间的夹角a,计算夹角和angle=angle+a,i++,跳转至



计算angle=angle/fingers;

输出angle,所述angle为最终检测到的手指方向角。
[0010]
所述一种基于几何特性的手势识别方法,所述步骤step9将[0,π]划分为若个区段,比较所述最终检测到的手指方向角值和所述区段值,得到手指方向值:左、左上、上、右上、右指向;(所述手指数目,手指方向值)为最终识别到的手势值。
[0011]
通过以上方案,本发明的有益效果在于:可以精确地识别手指数目和手指方向,识别的手势数量超过16种;具有深度识别,可以识别左右倾、前后倾和手指略弯曲的手势;能降低复杂度,拥有较好的鲁棒性。
附图说明
[0012]
图1为本发明手势识别方法流程图。
[0013]
图2为本发明手势识别几何特性示意图。
具体实施方式
[0014]
下面结合本发明附图,向本领域技术人员完整描述本发明技术方案,使本发明的技术内容更加易于理解,其目的在于让开发者能够根据本发明方案开发新产品。凡根据本发明精神实质所作的变动,都属于本发明的保护范围。
[0015]
实施示例。
[0016]
步骤step1利用彩色摄像头拍摄彩色人手图像。雷柏c270l是usb 2.0接口的彩色摄像头,分辨率为1920*1080,最大帧率30帧,兼容安卓和windows系统,支持即插即用。本实施示例基于opencv实现,opencv是开源的跨平台计算机视觉库,提供python等语言接口,带有计算机视觉常见算法功能。计算机通过调用openccv中的方法videocapture可采集到彩色摄像头图像,并将所述彩色摄像头图像转换为分辨率为640*480的彩色人手图像。
[0017]
步骤step2通过调用opencv中的方法cvtcolor将所述彩色人手图像的色彩空间从rgb空间转换为hsv空间。通过下限阈值[100, 50, 0]和上限阈值[125, 255, 255],通过调用opencv中的方法inrange将hsv彩色人手图像中的肤色搜索出来,并新建二值人手图像,用白色表示肤色(人手),用黑色表示非肤色(背景)。
[0018]
步骤step3基于数学形态算法切割掉手指分离出手掌。以元素值全为1的5阶方阵为结构元素,通过调用opencv中的方法dilate和erode对所述二值人手图像进行膨胀和腐蚀操作,先膨胀2次,再腐蚀25次,最后膨胀25次,最后得到切割掉手指的手掌图像。
[0019]
步骤step4基于轮廓提取方法获取手掌轮廓。先通过调用opencv中的方法findcontours找出所述手掌图像的轮廓。最后通过调用opencv中的方法contourarea算出轮廓面积,面积最大的轮廓为手掌轮廓。
[0020]
步骤step5基于零阶矩和一阶矩计算方法算出手掌轮廓质心(centerx,centery)。通过调用opencv中的方法moments可计算出所述手掌轮廓的矩m,通过centerx = int(m['m10'] / m['m00'])和centery = int(m['m01'] / m['m00'])可算出所述手掌轮廓质心。步骤step5通过遍历所述手掌轮廓算出手掌轮廓最底端点(buttomx,buttomy),其中,buttomx=centerx,buttomy为所述手掌轮廓点y方向最大值。
[0021]
步骤step6基于三角函数算出n个人手检测点detectpointi(xi,yi),其中i=0至n-1,n=90。借助软件numpy可快速计算出所述n个人手检测点detectpointi(xi,yi)。numpy是python语言的一个扩充程序库,支持大量的维度数组与矩阵运算,为数组运算提供大量数学函数库。通过调用numpy中的方法linspace将弧度[-π/6,π+π/6]均分成n个弧度ri,r=numpy.linspace (numpy.pi + numpy.pi/6, 0
‑ꢀ
numpy.pi/6, n)。借助math软件库可快速实现三角函数计算,它是python提供的内置数学类函数库,支持整数和浮点数运算。xi和yi的计算公式如下所示:x
i = centerx + math.floor(dist * numpy.cos(ri))
ꢀꢀꢀꢀꢀ
(4)y
i = centery
ꢀ‑ꢀ
math.floor(dist * numpy.sin(ri))
ꢀꢀꢀꢀꢀꢀ
(5)。
[0022]
步骤step7依序遍历所述人手检测点detectpointi(xi,yi),检测所述二值人手图
像像素(xi,yi)颜色,根据颜色统计手指数目和记录手指坐标,具体过程如下:

用fingers表示所述手指数目,置初值fingers=0;用continuity表示所述二值人手图像白色像素连续出现次数,置初值continuity=0;fingerspos表示手指坐标集合,置fingerspos初值为空;i表示遍历次序,置初值i=0;n为所述人手检测点长度,n=90;

检测所述二值人手图像像素(xxi , yyi)是否为黑色,若为黑色则置所述白色像素点连续出现次数continuity=0,并跳至

,否则所述白色像素点连续出现次数continuity++,并跳至



若所述白色像素点连续出现次数continuity==3则确认新手指,所述手指数目finger++,将所述新手指的坐标fingersposi(xxi,yyi)加入所述手指坐标集合fingerspos,跳转至

,否则直接跳转到



i++,如果i《n则跳转到

继续下个检测点,否则跳至



输出fingers,fingers为最终检测到的手指数目。
[0023]
步骤step8基于向量夹角计算方法,计算手指向量和水平向量之间的夹角,所述夹角为手指方向角。所述夹角计算步骤:

设(centerx, centery)为所述手掌轮廓质心,水平向量levelv=(-centerx,0),angle为手指方向角,置初值angle=0,fingers为所述最终检测到的手指数目,fingersposi 为第i个手指坐标点,置初始i=0;
⑵ꢀ
如果i》=fingers则跳至

,否则计算手指向量fingervi,所述手指向量fingervi=(fingersposi.xi-centerx,fingersposi.yi
‑ꢀ
centery)

根据两向量夹角计算公式计算所述手指向量fingervi和所述水平向量levelv之间的夹角a,计算夹角和angle=angle+a,i++,跳转至



计算angle=angle/fingers;

输出angle,所述angle为最终算出的手指方向角。
[0024]
步骤step9根据手指数目fingers和手指方向角angle识别手势。若0《angle《π/3,手指向左指;若π/3=《angle《2π/3,手指向上指;若2π/3=《angle《=π,手指向右指。(手指数目fingers,左指|上指|右指)为最终识别出来的手势值。

技术特征:
1.一种基于几何特性的手势识别方法,主要包括以下步骤:

步骤step1:利用彩色摄像头拍摄彩色人手图像;

步骤step2:基于肤色将人手从所述彩色人手图像中搜索出来,新建二值人手图像,用白色表示人手,用黑色表示背景;

步骤step3:基于数学形态算法将手指腐蚀掉从所述二值人手图像将手掌分离出来,新建二值手掌图像;

步骤step4:基于轮廓提取方法从所述二值手掌图像搜索出手掌轮廓;

步骤step5:基于零阶矩和一阶矩计算方法算出所述手掌轮廓质心,遍历所述手掌轮廓搜出手掌轮廓最底端点;

步骤step6:基于三角函数算出人手检测圆弧曲线;

步骤step7:基于人手检测圆弧曲线检测所述二值人手图像像素颜色,根据颜色统计手指数目;

步骤step8:基于向量夹角计算方法,计算手指向量和水平向量夹角,所述夹角为手指方向角;

步骤step9:根据手指数目和手指方向角组合值识别手势。2.根据权利要求1所述的一种基于几何特性的手势识别方法,其特征在于,所述步骤

将弧度[-π/6,π+π/6]均分为n份弧度ri,算出所述手掌轮廓质心(centerx,centery)与所述手掌轮廓最底端点(buttomx,buttomy)之间的欧氏距离d;以所述手掌轮廓质心为圆心,以dist= d*k(k=1.55-1.7)为圆半径,以所述ri为圆弧度,基于三角函数算出人手检测圆弧曲线,所述人手检测圆弧曲线由n个人手检测点detectpointi组成,detectpointi=(xi,yi),计算公式如下所示:ri=i*(π+π/3)/n ,其中1<=i<=n,n=90
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)yi=centery
ꢀ‑ꢀ

(dist * sin(ri) )

ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)xi=centerx + ⌊
( dist * cos(ri) )

ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)。3.根据权利要求1所述的一种基于几何特性的手势识别方法,其特征在于,所述步骤

手指数目检测步骤如下:

用fingers表示所述手指数目,置初值fingers=0,continuity表示白色像素点连续出现次数,置初值continuity=0,置初值i=0;

如果i>=n则跳转到

,否则读出所述detectpointi的坐标(xi,yi),检测所述二值人手图像像素(xi,yi)是否为黑色,若为黑色则置所述白色像素点连续出现次数continuity=0,并跳至

,否则所述白色像素点连续出现次数continuity++;

若所述白色像素点连续出现次数continuity!=3则直接跳转到

,否则检测到新手指,存储手指坐标点fingerspos
finger
,fingerspos
finger
=(xi,yi),所述手指数目finger++,跳转至



i++,跳至

继续检测;

输出fingers,fingers为最终检测到的手指数目。4.根据权利要求1所述的一种基于几何特性的手势识别方法,其特征在于,所述步骤

手指方向角计算步骤如下:

设levelv是指向左方的水平向量,levelv=(-centerx,0),fingersposi(xi,yi)是所
述手指坐标点,fingers为所述最终检测到的手指数目,angle为手指方向角,angle初值=0,i初始=0;
⑵ꢀ
如果i>=fingers则跳至

,否则以所述手掌轮廓质心(centerx,centery)为始点,以fingersposi(xi,yi)为终点,根据向量公式算出手指向量fingervi;

根据两向量夹角计算公式计算所述手指向量fingervi和所述水平向量levelv之间的夹角a,计算夹角和angle=angle+a,i++,跳转至



计算angle=angle/fingers;

输出angle,所述angle为最终检测到的手指方向角。5.根据权利要求1所述的一种基于几何特性的手势识别方法,其特征在于,所述步骤

将[0,π]划分为若个区段,比较所述最终检测到的手指方向角值和所述区段值,得到手指方向值:左、左上、上、右上、右指向;(所述手指数目,手指方向值)为最终识别到的手势值。

技术总结
一种基于几何特性的手势识别方法是一种根据手指数目和手指方向角识别手势的方法,包括步骤:利用摄像头采集人手图像;通过肤色搜索和二值化人手;基于数学形态腐蚀掉手指从人手分离出手掌;基于轮廓搜索方法得到手掌轮廓;基于矩算出手掌轮廓质心和底心;基于三角函数算出人手检测曲线;基于人手检测曲线检测手指数目;基于向量方法算出手指方向角;通过手指数目和手指方向角组合值识别手势。本发明可以精确、实时、稳定地识别手势,能识别左右倾、前后倾和手指略弯曲的手势,识别手势数量不下十六种。不下十六种。


技术研发人员:邢益良
受保护的技术使用者:海南软件职业技术学院
技术研发日:2021.12.29
技术公布日:2023/7/13
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐