主权项 |
一种非接触式手势操控用户界面的方法,其特征在于包含以下步骤: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>α</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>β</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)将识别出的手势控制指令与被控对象系统接口程序中的外部输入操作进行映射,实现用户界面的控制。 |