日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Kinect 动作识别组件概要设计

發(fā)布時(shí)間:2025/4/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kinect 动作识别组件概要设计 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是數(shù)年前在一個(gè)公司做的;Kinect手勢(shì)識(shí)別的一個(gè)DLL,供其他應(yīng)用開(kāi)發(fā)調(diào)用。

這是概要設(shè)計(jì)文檔??梢粤私釱inect技術(shù),以及作為文檔寫(xiě)作的參考。代碼恕不能提供。

?

Kinect 動(dòng) 作 識(shí) 別 組 件 概 要 設(shè) 計(jì)

目錄
一. 設(shè)計(jì)背景與設(shè)計(jì)目的?? ?1

1. 設(shè)計(jì)背景?? ?1

2. 設(shè)計(jì)目的?? ?1

3. 參考資料?? ?1

二. Kinect技術(shù)概述?? ?1

三.系統(tǒng)的性能與可靠性設(shè)計(jì)?? ?1

四.系統(tǒng)運(yùn)行環(huán)境?? ?2

五.需要識(shí)別的身體動(dòng)作和手勢(shì)匯總?? ?2

六. 動(dòng)作和手勢(shì)識(shí)別算法設(shè)計(jì)概述?? ?2

七.動(dòng)作和手勢(shì)識(shí)別算法具體設(shè)計(jì)?? ?3

<一>.身體動(dòng)作識(shí)別?? ?3

<二>. 手勢(shì)識(shí)別?? ?4

八. 類(lèi)設(shè)計(jì)?? ?6

九. 接口設(shè)計(jì)?? ?8

十. 異常情況處理?? ?8


一. 設(shè)計(jì)背景與設(shè)計(jì)目的


1. 設(shè)計(jì)背景
體感技術(shù)是通過(guò)“傳感器”或者“視覺(jué)設(shè)備”對(duì)“人的動(dòng)作”進(jìn)行捕捉,根據(jù)捕捉到的動(dòng)作來(lái) “控制應(yīng)用程序”的技術(shù)。
體感技術(shù)應(yīng)用廣泛,例如三維演示,游戲操控,機(jī)械控制,健康醫(yī)療,運(yùn)動(dòng)監(jiān)測(cè),全息影像等。

2. 設(shè)計(jì)目的
設(shè)計(jì)一個(gè)基于微軟體感技術(shù)(Kinect)的動(dòng)作識(shí)別工具包,包裝為動(dòng)態(tài)鏈接庫(kù)。該工具包既可以在公司內(nèi)部的項(xiàng)目中使用,也可以單獨(dú)作為一個(gè)產(chǎn)品在市場(chǎng)上銷(xiāo)售。
該工具包完成后,可以識(shí)別出各種身體動(dòng)作和手勢(shì),不同的動(dòng)作和手勢(shì)會(huì)產(chǎn)生相應(yīng)的事件,在應(yīng)用程序中檢測(cè)到相應(yīng)的事件后進(jìn)行不同的處理,從而實(shí)現(xiàn)用手勢(shì)和動(dòng)作來(lái)控制應(yīng)用程序。
3. 參考資料
Windows Kinect SDK文檔和示例;
Kinect應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-用最自然的方式與機(jī)器對(duì)話,機(jī)械工業(yè)出版社,余濤著。

二. Kinect技術(shù)概述


Kinect傳感器會(huì)產(chǎn)生三種數(shù)據(jù)流,彩色影像數(shù)據(jù),深度數(shù)據(jù),骨骼數(shù)據(jù)。本工具包獲取其骨骼數(shù)據(jù)流,然后根據(jù)獲取到的數(shù)據(jù)進(jìn)行計(jì)算、比較、判斷,來(lái)識(shí)別出身體的動(dòng)作和手勢(shì)。Kinect傳感器產(chǎn)生每秒30幀的骨骼數(shù)據(jù)流。每幀有全身20個(gè)關(guān)節(jié)點(diǎn)的坐標(biāo)位置,每個(gè)關(guān)節(jié)點(diǎn)有X、Y、Z三個(gè)坐標(biāo)。骨骼空間坐標(biāo)系以米為單位。

三.系統(tǒng)的性能與可靠性設(shè)計(jì)


進(jìn)行動(dòng)作和手勢(shì)的判斷需要進(jìn)行一定的計(jì)算和比較,每秒30幀數(shù)據(jù),在每幀中進(jìn)行計(jì)算和比較,計(jì)算和比較要盡量精簡(jiǎn),達(dá)到好的性能。
該工具包需要被別的應(yīng)用程序調(diào)用,所以要有良好的異常處理機(jī)制。產(chǎn)生異常情況,要給調(diào)用方相應(yīng)的提示,調(diào)用方可根據(jù)提示進(jìn)行相應(yīng)處理。

四.系統(tǒng)運(yùn)行環(huán)境


在硬件方面,需要在電腦上連接微軟Kinect傳感器。
軟件方面,該工具包用C#語(yǔ)言開(kāi)發(fā),所運(yùn)行系統(tǒng)為Windows XP 以上版本,需要.NET運(yùn)行時(shí)環(huán)境的支持,并需要Windows Kinect SDK。

五.需要識(shí)別的身體動(dòng)作和手勢(shì)匯總


身體動(dòng)作:身體左傾,身體右傾,身體前傾,身體后傾,左(右)手前伸,左(右)手舉起,左(右)手放下,左(右)手向左(右)伸,左(右)手向右(左)伸,左(右)腳往前,左(右)腳往后,左(右)腳抬起,左(右)腳往左(右),跳,走。
手勢(shì):推,往上揮,往下?lián)],往左揮,往右揮;
縮放手勢(shì),動(dòng)作為兩手抬起,手高于腕,兩手基本保持平行,兩手逐步向外打開(kāi)為放大,逐步向里合攏為縮小;
拖動(dòng)手勢(shì),動(dòng)作為手朝向屏幕,向各個(gè)方向移動(dòng);
偏轉(zhuǎn)和旋轉(zhuǎn)手勢(shì),動(dòng)作為左手放到左肩前,右手向各個(gè)方向移動(dòng)。

六. 動(dòng)作和手勢(shì)識(shí)別算法設(shè)計(jì)概述


對(duì)于單個(gè)動(dòng)作或手勢(shì)的識(shí)別,算法目前有以下幾種情況:
1 根據(jù)各個(gè)關(guān)節(jié)點(diǎn)的相對(duì)位置,或某個(gè)或某幾個(gè)關(guān)節(jié)點(diǎn)相對(duì)于某個(gè)參考點(diǎn)的相對(duì)位置,進(jìn)行比較來(lái)識(shí)別是那種動(dòng)作或手勢(shì),
2 根據(jù)一個(gè)關(guān)節(jié)相對(duì)于另一個(gè)關(guān)節(jié)移動(dòng)的距離,或一個(gè)關(guān)節(jié)點(diǎn)相對(duì)于某個(gè)參考點(diǎn)移動(dòng)的距離來(lái)識(shí)別;
3 計(jì)算由某三個(gè)關(guān)節(jié)點(diǎn)構(gòu)成的三角形的某個(gè)夾角來(lái)識(shí)別;
4 統(tǒng)計(jì)某個(gè)關(guān)節(jié)點(diǎn)在某個(gè)范圍內(nèi)的移動(dòng)次數(shù)來(lái)判斷;
5 需要定時(shí)器來(lái)作輔助進(jìn)行判斷;

首先如果用1和2的算法能完全識(shí)別出動(dòng)作和手勢(shì),就采用1和2,這樣算法簡(jiǎn)單、代碼簡(jiǎn)潔;
如果識(shí)別不出,再考慮3和4,
最后識(shí)別不出再考慮5的情況;

七.動(dòng)作和手勢(shì)識(shí)別算法具體設(shè)計(jì)


<一>.身體動(dòng)作識(shí)別
1 身體左(右)傾
? ? 以中心肩關(guān)節(jié)和中心髖關(guān)節(jié)的X值的差值來(lái)判斷,大于某個(gè)閾值識(shí)別為右傾,否則為左傾;
? ? 觸發(fā)事件后需要拋出的參數(shù):中心肩關(guān)節(jié),中心髖關(guān)節(jié),中心肩關(guān)節(jié)X值,中心髖關(guān)節(jié)X值。

2. 身體前(后)傾
? ? 以中心肩關(guān)節(jié)和中心髖關(guān)節(jié)的Z值的差值來(lái)判斷,大于某個(gè)閾值識(shí)別為后傾,反之為前傾;
? ? 觸發(fā)事件后需要拋出的參數(shù):中心肩關(guān)節(jié),中心髖關(guān)節(jié),中心肩關(guān)節(jié)Z值,中心髖關(guān)節(jié)Z值。

3 左(右)手前伸
以肩關(guān)節(jié)和手關(guān)節(jié)的Z值的差值來(lái)判斷,大于某個(gè)閾值識(shí)別為前伸;
觸發(fā)事件后需要拋出的參數(shù):左(右)關(guān)節(jié),左(右)肩關(guān)節(jié),左(右)關(guān)節(jié)Z值,左(右)肩關(guān)節(jié)Z值。

4 左(右)手舉起
? ? 以手關(guān)節(jié)和肩關(guān)節(jié)的Y值的差值來(lái)判斷,小于某個(gè)閾值識(shí)別為手舉起;
觸發(fā)事件后需要拋出的參數(shù):左(右)手關(guān)節(jié),左(右)肩關(guān)節(jié),左(右)手關(guān)節(jié)Y值,左(右)肩關(guān)節(jié)Y值。

5 左(右)手放下
? ? 以手關(guān)節(jié)和肩關(guān)節(jié)的Y值的差值來(lái)判斷,大于某個(gè)閾值識(shí)別為手放下;
觸發(fā)事件后需要拋出的參數(shù):左(右)手關(guān)節(jié),左(右)肩關(guān)節(jié),左(右)手關(guān)節(jié)Y值,左(右)肩關(guān)節(jié)Y值。

6 左手向右伸,右手向左伸
以手交錯(cuò)過(guò)身體到肩膀的距離來(lái)判斷,左手關(guān)節(jié)與右肩關(guān)節(jié)X值小于一定域值,識(shí)別為左手向右伸,反之為右手向左伸;
觸發(fā)事件后需要拋出的參數(shù):左(右)手關(guān)節(jié),右(左)肩關(guān)節(jié),左(右)手關(guān)節(jié)X值,右(左)肩關(guān)節(jié)X值。

7 左手向左伸,右手向右伸
以手到肩膀的距離來(lái)判斷,左肩關(guān)節(jié)與左手關(guān)節(jié)X值的差值大于一定域值,識(shí)別為左手向左伸,右手關(guān)節(jié)與右肩關(guān)節(jié)X值的差值大于一定域值,識(shí)別為右手向右伸;
觸發(fā)事件后需要拋出的參數(shù):左(右)手關(guān)節(jié),左(右)肩關(guān)節(jié),左(右)手關(guān)節(jié)X值,左(右)肩關(guān)節(jié)X值。

8. 左(右)腳往前
以左(右)腳關(guān)節(jié)(Foot Left, Foot Right)與脊關(guān)節(jié)(Spine)的Z值的差值來(lái)判斷,脊關(guān)節(jié)與左腳關(guān)節(jié)Z值的差值大于某個(gè)域值,識(shí)別為左腳向前伸,反之為右腳向前伸;
觸發(fā)事件后需要拋出的參數(shù):左(右)腳關(guān)節(jié),脊關(guān)節(jié),左(右)腳關(guān)節(jié)Z值,脊關(guān)節(jié)Z值。

9. 左(右)腳往左(右)
以左(右)腳關(guān)節(jié)與中心髖關(guān)節(jié)的X值的差異來(lái)識(shí)別,中心髖關(guān)節(jié)與左腳關(guān)節(jié)的X值的差值大于某個(gè)域值識(shí)別為左腳往左伸,右腳關(guān)節(jié)與中心髖關(guān)節(jié)的X值的差值大于某個(gè)域值識(shí)別為右腳向右伸;
觸發(fā)事件后需要拋出的參數(shù):左(右)腳關(guān)節(jié),中心髖關(guān)節(jié),左(右)腳關(guān)節(jié)X值,中心髖關(guān)節(jié)X值。

10. 左(右)腳往后
以左(右)腳關(guān)節(jié)(Foot Left, Foot Right)與脊關(guān)節(jié)(Spine)的Z值的差值來(lái)判斷,左(右)腳關(guān)節(jié)與脊關(guān)節(jié)的Z值的差值大于某個(gè)域值,識(shí)別為左(右)腳往后;
觸發(fā)事件后需要拋出的參數(shù):左(右)腳關(guān)節(jié),脊關(guān)節(jié),左(右)腳關(guān)節(jié)Z值,脊關(guān)節(jié)Z值。

11. 左(右)腳抬起?
以左和右腳關(guān)節(jié)Y值的差值來(lái)判斷,左腳Y值大于右腳Y值超過(guò)某個(gè)域值識(shí)別為左腳抬起,右腳Y值大于左腳Y值超過(guò)某個(gè)閾值識(shí)別為右腳抬起;
觸發(fā)事件后需要拋出的參數(shù):左腳關(guān)節(jié),右腳關(guān)節(jié),左腳關(guān)節(jié)Y值,右腳關(guān)節(jié)Y值。

12. 跳
以?xún)赡_關(guān)節(jié)同時(shí)離開(kāi)地板的距離來(lái)判斷,超過(guò)某個(gè)閾值識(shí)別為跳;
觸發(fā)事件后需要拋出的參數(shù):左腳關(guān)節(jié),右腳關(guān)節(jié),左腳關(guān)節(jié)Y值,右腳關(guān)節(jié)Y值,地板位置。

13. 走
方法一:統(tǒng)計(jì)一個(gè)腳關(guān)節(jié)Y值高于另一個(gè)腳關(guān)節(jié)Y值的次數(shù),達(dá)到一定的域值次數(shù)識(shí)別為走;
觸發(fā)事件后需要拋出的參數(shù):一個(gè)腳關(guān)節(jié)高于另一個(gè)腳關(guān)節(jié)的次數(shù),左腳關(guān)節(jié),右腳關(guān)節(jié)。
方法二:以脊關(guān)節(jié)移動(dòng)的距離來(lái)判斷,大于一定閾值識(shí)別為走,脊關(guān)節(jié)X值減小、增大判走動(dòng)方向?yàn)樽?、右走?dòng),脊關(guān)節(jié)Z值減小、增大判走動(dòng)方向?yàn)榍啊⒑笞邉?dòng);
觸發(fā)事件后需要拋出的參數(shù):脊關(guān)節(jié),脊關(guān)節(jié)X值,脊關(guān)節(jié)Z值,走動(dòng)方向。

<二>. 手勢(shì)識(shí)別
1. 推手勢(shì)
探測(cè)手勢(shì)在Z軸負(fù)方向的移動(dòng)距離,大于某個(gè)域值識(shí)別為檢測(cè)到推手勢(shì)。
觸發(fā)事件后需要拋出的參數(shù):手關(guān)節(jié),手關(guān)節(jié)Z值。

2. 往上揮
探測(cè)左(右)手在Y軸方向的移動(dòng)距離,大于某個(gè)域值識(shí)別為檢測(cè)到往上揮;
觸發(fā)事件后需要拋出的參數(shù):左(右)手關(guān)節(jié),左(右)手關(guān)節(jié)Y值。

3. 往下?lián)]
? ? 探測(cè)左(右)手在Y軸負(fù)方向的移動(dòng)距離,大于某個(gè)域值識(shí)別為檢測(cè)到往下?lián)];
觸發(fā)事件后需要拋出的參數(shù):左(右)手關(guān)節(jié),左(右)手關(guān)節(jié)Y值。

4. 往左揮
探測(cè)左手在X軸方向的移動(dòng)距離,大于某個(gè)域值識(shí)別為檢測(cè)到往左揮;
觸發(fā)事件后需要拋出的參數(shù):左手關(guān)節(jié),左手關(guān)節(jié)X值。

5. 往右揮
探測(cè)右手在X軸負(fù)方向的移動(dòng)距離,大于某個(gè)域值識(shí)別為檢測(cè)到往右揮;
觸發(fā)事件后需要拋出的參數(shù):右手關(guān)節(jié),右手關(guān)節(jié)X值。

6. 畫(huà)圈
以左(右)手的肘關(guān)節(jié)為中心,連續(xù)檢測(cè)五個(gè)點(diǎn):第一點(diǎn) - 手關(guān)節(jié)Y值大于肘關(guān)節(jié)Y值一定值且手關(guān)節(jié)X值與肘關(guān)節(jié)X值的差值小于一個(gè)很小的值,第二點(diǎn) -手關(guān)節(jié)Y值與肘關(guān)節(jié)Y值的差值小于一個(gè)很小的值且手關(guān)節(jié)X值大于肘關(guān)節(jié)X值一定值,第三點(diǎn) – 手關(guān)節(jié)Y值小于肘關(guān)節(jié)Y值一定值且手關(guān)節(jié)X值與肘關(guān)節(jié)X值的差值小于一個(gè)很小的值,第四點(diǎn) -手關(guān)節(jié)Y值與肘關(guān)節(jié)Y值的差值小于一個(gè)很小的值且手關(guān)節(jié)X值小于肘關(guān)節(jié)X值一定值,第五點(diǎn) – 即第一個(gè)點(diǎn);
連續(xù)檢測(cè)到此五個(gè)點(diǎn),則識(shí)別為左(右)手畫(huà)圈;
觸發(fā)事件后需要拋出的參數(shù):五個(gè)點(diǎn)時(shí)手和肘關(guān)節(jié)的X和Y坐標(biāo),共10個(gè)值。

7. 左(右)手揮手
以左(右)手的肘關(guān)節(jié)為中心,統(tǒng)計(jì)手關(guān)節(jié)在肘關(guān)節(jié)附件來(lái)回移動(dòng)的次數(shù),達(dá)到一定次數(shù)時(shí)識(shí)別為揮左(右)手;
觸發(fā)事件后需要拋出的參數(shù):左(右)手關(guān)節(jié),左(右)肘關(guān)節(jié),來(lái)回移動(dòng)次數(shù)。

8. 縮放手勢(shì)
左右手關(guān)節(jié)均高于左右腕關(guān)節(jié),左右手關(guān)節(jié)均低于左右肩關(guān)節(jié),識(shí)別為縮放手勢(shì);
觸發(fā)事件后需要拋出的參數(shù):左手關(guān)節(jié),右手關(guān)節(jié),左手關(guān)節(jié)X值,右手關(guān)節(jié)X值。

9. 拖動(dòng)手勢(shì)
檢測(cè)到右手移動(dòng),且右手關(guān)節(jié)和右腕關(guān)節(jié)的差值小于一定值,則判為拖動(dòng);
觸發(fā)事件后需要拋出的參數(shù):右手關(guān)節(jié),右腕關(guān)節(jié),右手關(guān)節(jié)X值。

10. 旋轉(zhuǎn)和偏轉(zhuǎn)手勢(shì)
計(jì)算左手關(guān)節(jié)和左肩關(guān)節(jié)的X、Y、Z坐標(biāo)的差值,如果均小于一定域值,則識(shí)別為旋轉(zhuǎn)和偏轉(zhuǎn);
觸發(fā)事件后需要拋出的參數(shù):左手關(guān)節(jié),左肩關(guān)節(jié),右手關(guān)節(jié),右手關(guān)節(jié)X值,右手關(guān)節(jié)Y值。

八. 類(lèi)設(shè)計(jì)


身體動(dòng)作識(shí)別和其拋出的事件封裝為一個(gè)類(lèi)ActionRecognize,手勢(shì)識(shí)別和其拋出的事件封裝為一個(gè)類(lèi)GestureRecognize,事件參數(shù)封裝為一個(gè)類(lèi)RecognizeEventArg,所用到的計(jì)算作為幫助類(lèi)封裝為一個(gè)類(lèi)KinectHelper。

?

?

九. 接口設(shè)計(jì)


此處主要是外部的調(diào)用接口。在調(diào)用程序中注冊(cè)本DLL的事件,然后檢測(cè)手動(dòng)作或手勢(shì)對(duì)應(yīng)的事件,等同于識(shí)別到相應(yīng)的手勢(shì),然后就可以根據(jù)自己的需要進(jìn)行自己的處理,還可以根據(jù)事件所傳遞的參數(shù)做一些更細(xì)致的處理。事件所傳遞的參數(shù),是一到數(shù)個(gè)關(guān)節(jié),和關(guān)節(jié)的具體的某個(gè)X或Y或Z坐標(biāo),以及其他一些必要的數(shù)值,還需要說(shuō)明關(guān)節(jié)的數(shù)量和類(lèi)型。所以在事件參數(shù)中需要傳遞:關(guān)節(jié)數(shù)量,關(guān)節(jié)類(lèi)型數(shù)組,關(guān)節(jié)數(shù)組,關(guān)節(jié)的具體X、Y、Z值,一些必要的數(shù)值。

十. 異常情況處理


? ? Kinect傳感器設(shè)備的連接或未連接等情況,以及Kinect傳感器的設(shè)備狀態(tài),由調(diào)用方自行處理。其他異常通過(guò)事件參數(shù)傳遞該調(diào)用方。
?

總結(jié)

以上是生活随笔為你收集整理的Kinect 动作识别组件概要设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。