发明名称 一种非接触式手势操控用户界面的方法
摘要 本发明涉及一种基于Kinect的非接触式手势操控电脑、触摸屏和投影等用户界面的方法,该方法的主要步骤为:通过Kinect采集操作者双臂动作,使用手势识别算法识别出手势,利用识别出的手势实现人与电脑、触摸屏和投影等用户界面的交互。本发明涉及单击、右键单击、双击、前滚后滚、放大缩小和拖动共6种手势,基本覆盖了人与电脑、触摸屏和投影等进行交互的需求。本文提出了一种新的识别方法,不仅可以提高手势识别的精度,还能提高识别的快速性。结合6种手势的使用,可以使人机交互更加便利自如。
申请公布号 CN104808788A 申请公布日期 2015.07.29
申请号 CN201510119652.1 申请日期 2015.03.18
申请人 北京工业大学 发明人 于乃功;王锦;郭明;阮晓钢
分类号 G06F3/01(2006.01)I;G06K9/00(2006.01)I 主分类号 G06F3/01(2006.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 吴荫芳
主权项 一种非接触式手势操控用户界面的方法,其特征在于包含以下步骤:1)通过摄像头采集操作者双臂骨骼关节动作;2)对采集到的图像进行有效性判断,具体判断方法如下:首先判断采集到的图像是否是有效图像,具体为,摄像头采集操作者的骨骼关节点的三维坐标信息数据;当每帧图像中采集到的操作者的骨骼关节点大于14,并且这14个骨骼关节点中包含了操作者的中肩、左右肩、左右肘、左右腕和左右手关节共9个关节点的三维坐标数据时,则将其视作有效图像帧数据,否则,视为无效,并舍弃;然后分别判断有效图像中的左、右手臂是否为有效操作手臂,具体为:肩关节与对应腕关节y轴坐标之差的绝对值m小于d即为有效的手臂,否则为无效操作,其中9个骨骼关节点的坐标表示如下:中肩S<sub>c</sub>(x<sub>sc</sub>,y<sub>sc</sub>,z<sub>sc</sub>)=(0,0,0),左肩S<sub>l</sub>(x<sub>sl</sub>,y<sub>sl</sub>,z<sub>sl</sub>),右肩S<sub>r</sub>(x<sub>sr</sub>,y<sub>sr</sub>,z<sub>sr</sub>),左肘E<sub>l</sub>(x<sub>el</sub>,y<sub>el</sub>,z<sub>el</sub>),右肘E<sub>r</sub>(x<sub>er</sub>,y<sub>er</sub>,z<sub>er</sub>),左腕W<sub>l</sub>(x<sub>wl</sub>,y<sub>wl</sub>,z<sub>wl</sub>),右腕W<sub>r</sub>(x<sub>wr</sub>,y<sub>wr</sub>,z<sub>wr</sub>),左手H<sub>l</sub>(x<sub>hl</sub>,y<sub>hl</sub>,z<sub>hl</sub>),右手H<sub>r</sub>(x<sub>hr</sub>,y<sub>hr</sub>,z<sub>hr</sub>)。其中:m=|y<sub>si</sub>‑y<sub>wi</sub>|,<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>d</mi><mo>=</mo><mn>0.9</mn><mo>*</mo><mrow><mo>(</mo><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>si</mi></msub><mo>-</mo><msub><mi>x</mi><mi>ei</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>si</mi></msub><mo>-</mo><msub><mi>y</mi><mi>ei</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>z</mi><mi>si</mi></msub><mo>-</mo><msub><mi>z</mi><mi>ei</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>+</mo><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>ei</mi></msub><mo>-</mo><msub><mi>x</mi><mi>wi</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>ei</mi></msub><mo>-</mo><msub><mi>y</mi><mi>wi</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>z</mi><mi>ei</mi></msub><mo>-</mo><msub><mi>z</mi><mi>wi</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000684311860000011.GIF" wi="1736" he="100" /></maths>,i取r或者l;3)对采集到的存在有效操作手臂的图像进行手势识别,具体识别方法A如下:3.1)将图像中的关节点的三维坐标数据转换为人体坐标系下的三维数据,其中所述的人体坐标系是以中肩关节为原点坐标(0,0,0),人体所在平面为X‑Y平面,竖直向上方向为Y轴正方向,人体正对方向为Z轴负方向,X‑Y‑Z遵守右手螺旋定则;3.2)提取t时间段内中肩、左右肩、左右肘、左右腕和左右手关节共9个关节点的人体坐标系下的三维坐标数据,计算中肩、左肩、右肩、左肘、右肘、左腕、右腕、左手、右手这9个关节点中,肘关节到对应肩关节点的矢量U与肘关节到对应腕关节点的矢量V的夹角α,肘关节到对应腕关节点的矢量V与X轴正方向的夹角β,腕关节到对应手关节的矢量W与肘关节到对应腕关节点的矢量V之间的夹角ω,通过α、β、ω识别手势控制指令;<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>&alpha;</mi><mo>=</mo><mi>arccos</mi><mfrac><mrow><mrow><mo>(</mo><msub><mi>x</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>*</mo><mrow><mo>(</mo><msub><mi>x</mi><mi>sr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>+</mo><mrow><mo>(</mo><msub><mi>y</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>*</mo><mrow><mo>(</mo><msub><mi>y</mi><mi>sr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>+</mo><mrow><mo>(</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>*</mo><mrow><mo>(</mo><msub><mi>z</mi><mi>sr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow></mrow><mrow><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>*</mo><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>sr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>sr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>z</mi><mi>sr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mrow></mfrac></mrow>]]></math><img file="FDA0000684311860000021.GIF" wi="1737" he="154" /></maths><maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mi>&beta;</mi><mo>=</mo><mi>arccos</mi><mfrac><mrow><mo>(</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mfrac></mrow>]]></math><img file="FDA0000684311860000022.GIF" wi="1026" he="157" /></maths><maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mi>w</mi><mo>=</mo><mi>arccos</mi><mfrac><mrow><mrow><mo>(</mo><msub><mi>x</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>*</mo><mrow><mo>(</mo><msub><mi>x</mi><mi>hr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>wr</mi></msub><mo>)</mo></mrow><mo>+</mo><mrow><mo>(</mo><msub><mi>y</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>*</mo><mrow><mo>(</mo><msub><mi>y</mi><mi>hr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>wr</mi></msub><mo>)</mo></mrow><mo>+</mo><mrow><mo>(</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow><mo>*</mo><mrow><mo>(</mo><msub><mi>z</mi><mi>hr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>)</mo></mrow></mrow><mrow><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>er</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>*</mo><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>hr</mi></msub><mo>-</mo><msub><mi>x</mi><mi>wr</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>hr</mi></msub><mo>-</mo><msub><mi>y</mi><mi>wr</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>z</mi><mi>hr</mi></msub><mo>-</mo><msub><mi>z</mi><mi>wr</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mrow></mfrac></mrow>]]></math><img file="FDA0000684311860000023.GIF" wi="1737" he="148" /></maths>4)将识别出的手势控制指令与被控对象系统接口程序中的外部输入操作进行映射,实现用户界面的控制。
地址 100124 北京市朝阳区平乐园100号