掌桥专利:专业的专利平台
掌桥专利
首页

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

文献发布时间:2024-01-17 01:15:20



技术领域

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

背景技术

由于手势具有直观性和自然性等特点,因此手势已成为人机交互的重要方式。随着人工智能发展,手势识别技术得到广泛关注。手势识别技术已被应用于汽车控制、智能家居和辅助驾驶和手语认知等领域,其对驾驶员开车和聋哑人交流等具有重要意义。基于视觉的手势识别需先通过摄像头采集手势图像,再对手势进行识别。这对计算机而言是一个艰巨的任务。因为人手姿势千变万化,且其易受光线、肤色、背景等因素影响,所以准确、实时和稳定地识别出手势成为待解决的关键问题。

基于几何特征的识别方法主要利用手势中的手指数目、角度、相对位置等特征进行手势的分类与判别。但是由于个体差异等原因,传统基于几何特征识别手势的方法存在识别手势少和计算复杂等问题。针对问题,本专利提出一种手指数目和手指方向角计算方法,以此辨别人手姿势,具有运算简单、计算量少、识别率高、识别手势多和鲁棒性好优点。

发明内容

本发明的目标在于提供一种基于几何特性的手势识别方法,解决手势识别过程常遇到的人手差异、手势种数、计算量大和鲁棒性问题。

为实现上述目的,本发明提供一种基于几何特性的手势识别方法,主要包括以下步骤:

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

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

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

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

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

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

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

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

⑨步骤Step9:根据手指数目和手指方向角组合值识别手势。

所述一种基于几何特性的手势识别方法,所述步骤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)。

所述一种基于几何特性的手势识别方法,所述步骤Step7手指数目检测步骤如下:

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

⑵如果i>=N则跳转到⑸,否则读出所述DetectPointi的坐标(Xi,Yi),检测所述二值人手图像像素(Xi,Yi)是否为黑色,若为黑色则置所述白色像素点连续出现次数continuity=0,并跳至⑷,否则所述白色像素点连续出现次数continuity++;

⑶若所述白色像素点连续出现次数continuity!=3则直接跳转到⑷,否则检测到新手指,存储手指坐标点fingersPOS

⑷i++,跳至⑵继续检测;

⑸输出fingers,fingers为最终检测到的手指数目。

所述一种基于几何特性的手势识别方法,所述步骤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为最终检测到的手指方向角。

所述一种基于几何特性的手势识别方法,所述步骤Step9将[0,π]划分为若个区段,比较所述最终检测到的手指方向角值和所述区段值,得到手指方向值:左、左上、上、右上、右指向;(所述手指数目,手指方向值)为最终识别到的手势值。

通过以上方案,本发明的有益效果在于:可以精确地识别手指数目和手指方向,识别的手势数量超过16种;具有深度识别,可以识别左右倾、前后倾和手指略弯曲的手势;能降低复杂度,拥有较好的鲁棒性。

附图说明

图1为本发明手势识别方法流程图。

图2为本发明手势识别几何特性示意图。

具体实施方式

下面结合本发明附图,向本领域技术人员完整描述本发明技术方案,使本发明的技术内容更加易于理解,其目的在于让开发者能够根据本发明方案开发新产品。凡根据本发明精神实质所作的变动,都属于本发明的保护范围。

实施示例。

步骤Step1利用彩色摄像头拍摄彩色人手图像。雷柏C270L是USB 2.0接口的彩色摄像头,分辨率为1920*1080,最大帧率30帧,兼容安卓和Windows系统,支持即插即用。本实施示例基于OpenCV实现,OpenCV是开源的跨平台计算机视觉库,提供Python等语言接口,带有计算机视觉常见算法功能。计算机通过调用OpencCV中的方法VideoCapture可采集到彩色摄像头图像,并将所述彩色摄像头图像转换为分辨率为640*480的彩色人手图像。

步骤Step2通过调用OpenCV中的方法cvtColor将所述彩色人手图像的色彩空间从RGB空间转换为HSV空间。通过下限阈值[100, 50, 0]和上限阈值[125, 255, 255],通过调用OpenCV中的方法inRange将HSV彩色人手图像中的肤色搜索出来,并新建二值人手图像,用白色表示肤色(人手),用黑色表示非肤色(背景)。

步骤Step3基于数学形态算法切割掉手指分离出手掌。以元素值全为1的5阶方阵为结构元素,通过调用OpenCV中的方法dilate和erode对所述二值人手图像进行膨胀和腐蚀操作,先膨胀2次,再腐蚀25次,最后膨胀25次,最后得到切割掉手指的手掌图像。

步骤Step4基于轮廓提取方法获取手掌轮廓。先通过调用OpenCV中的方法findContours找出所述手掌图像的轮廓。最后通过调用OpenCV中的方法contourArea算出轮廓面积,面积最大的轮廓为手掌轮廓。

步骤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方向最大值。

步骤Step6基于三角函数算出N个人手检测点DetectPoint

X

Y

步骤Step7依序遍历所述人手检测点DetectPointi(X

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

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

⑶若所述白色像素点连续出现次数continuity==3则确认新手指,所述手指数目finger++,将所述新手指的坐标fingersPOS

⑷i++,如果i

⑸输出fingers,fingers为最终检测到的手指数目。

步骤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为最终算出的手指方向角。

步骤Step9根据手指数目fingers和手指方向角angle识别手势。若0

相关技术
  • 一种基于腕部肌腱压力相关特性的手势识别方法及系统
  • 一种基于腕部肌腱压力相关特性的手势识别方法及系统
技术分类

06120116087296