夜色88v精品国产_免费美国毛片久久_草草视频在线观看_91香蕉下载 片源丰富、内容全面_亚洲精品多人p群无码_亚洲第一页欧美在线播放_日本黄色三级网址大全_国产日韩国产在线_看高清AV色片(中文字幕)_最近中文字幕完整版免费高清

177 2750 6554

觸摸IC 觸摸方案 單片機(jī)方案

product/產(chǎn)品中心

為品牌創(chuàng)造核心價值

您當(dāng)前位置>: 首頁 > 新聞 > 行業(yè)動態(tài)

(肢勢觸摸IC)設(shè)想的根本概念以及肢勢辨認(rèn)的發(fā)展進(jìn)程

發(fā)表時間:2015年08月30日

文章來源:深圳市英菲智科技有限公司

瀏覽次數(shù):120

(肢勢觸摸IC)設(shè)想的根本概念以及肢勢辨認(rèn)的發(fā)展進(jìn)程

  像點(diǎn)擊(clicks)是GUI平臺的中心,輕點(diǎn)(taps)是觸碰平臺的中心那樣子,用手做姿勢(gestures)是Kinect應(yīng)用手續(xù)的中心。和圖形用戶界面中的數(shù)碼交互不一樣,用手做姿勢是事實生存中存在的動作。假如沒有電腦我們就不必鼠標(biāo),不過沒了Kinect,用手做姿勢依舊存在。從另一方面講,用手做姿勢是起居中間人與人之間互相交流的一小批。用手做姿勢能夠加強(qiáng)演說的使心服力,能夠用來著重提出和傳交情意。像舉手揮動(waving)還是點(diǎn)撥(pointing)這些個用手做姿勢都是某種無聲的演說。


Kinect應(yīng)用手續(xù)的預(yù)設(shè)和研發(fā)者的擔(dān)任的工作就是將這些個事實生存中存在的用手做姿勢照射到計算機(jī)交互中去以奉達(dá)人的想法。試驗從鼠標(biāo)或觸碰式的GUI預(yù)設(shè)移植基于用手做姿勢的天然交互界面要做眾多辦公。吸收以往30積年來對于這一并念的研討,以及從一點(diǎn)Kinect for Xbox的體感游戲中取得一點(diǎn)預(yù)設(shè)理念,計算機(jī)工程師和交互預(yù)設(shè)師一塊兒為Kinect開創(chuàng)了一系列新的用手做姿勢庫。


本文將會紹介用戶體驗認(rèn)識的一點(diǎn)知識,并商議怎么樣將用手做姿勢應(yīng)用到Kinect應(yīng)用手續(xù)中。我們將展覽Kinect怎么樣作為天然交互界面(Natural User INTERFACE)的人機(jī)交互板型的一小批。我們將商議一點(diǎn)具體的運(yùn)用Kinect來施行用手做姿勢辨別及交互的例子。更關(guān)緊的是,將會議覽一點(diǎn)已經(jīng)作為Kinect用手做姿勢辨別庫中的用手做姿勢。


1. 啥子是用手做姿勢


在很多不一樣的學(xué)科中,用手做姿勢(gesture)有著其獨(dú)有特別的涵義,有可能這些個涵義之間有某些異同。在藝術(shù)領(lǐng)域,用手做姿勢被用來奉達(dá)跳舞中最富表達(dá)力的局部,尤其是在亞洲跳舞藝術(shù)中,用手做姿勢被作為某些宗教符號還是象征。在交互預(yù)設(shè)領(lǐng)域,在基于觸碰的天然交互界面中用手做姿勢和操控有非常大差別。


以上這些個解釋明白用手做姿勢在不一樣的學(xué)科領(lǐng)域都有自個兒獨(dú)有特別的涵義。在學(xué)術(shù)領(lǐng)域都打算對用手做姿勢定義一個抽象的概念。在用戶體驗認(rèn)識預(yù)設(shè)領(lǐng)域運(yùn)用最廣泛的關(guān)于用手做姿勢的定義真的Eric Hulteen 和Gord Kurtenbach 1990年刊發(fā)的一篇名為人機(jī)交互中的用手做姿勢(Gestures in Human-Computer Communication),定義如下所述:”用手做姿勢是身板子的運(yùn)動,他里面含有一點(diǎn)信息。舉手揮動分別是一種用手做姿勢。敲打鍵盤不是用手做姿勢,由于用手指頭的運(yùn)動去敲打按鈕沒有被仔細(xì)查看,也不關(guān)緊,他只表現(xiàn)的鍵盤被按下這動不動作。(A gesture is a motion of the body that contains information. Waving goodbye is a gesture. Pressing a key on a KEYBOARD is not a gesture because the motion of a finger on its way to hitting a key is neither observed nor significant. All that matters is which key was pressed)”


這個定義既詮釋了啥子是用手做姿勢也詮釋了啥子不是用手做姿勢。像這么的下一個正式的定義一般有兩個方面的艱難,既要防止太具體也要防止太抽象。假如一個定義太具體-如,定義某項技術(shù)-有可能會隨著UI技術(shù)的變動會變得茫茫。作為一種學(xué)術(shù)定義而不是以常見的用處為基礎(chǔ)的定義,它也務(wù)必足夠普通,況且合乎還是說廣大的研討機(jī)構(gòu)先前已刊發(fā)在HCI的研討成果及藝術(shù)中符號學(xué)。另一方面,定義過于寬泛,也會有有無要緊急重要的風(fēng)險:假如一切都是一種姿勢,那末就啥子都不是了。


Eric Hulteen 和Gord Kurtenbach關(guān)于用手做姿勢的定義的核心在于用手做姿勢能夠用來交流,用手做姿勢的意義在于講評而不是執(zhí)行。


有趣兒的是將語講和行徑引入到人機(jī)交互接口中來,這是一種徹底的變法。我們與計算機(jī)交互語音變?yōu)闊o聲的語言(mute):我們經(jīng)過點(diǎn)撥和用手做姿勢而不是語言與計算設(shè)施施行溝通。當(dāng)和計算機(jī)施行交互時,我們點(diǎn)擊鍵盤按鈕或觸碰熒幕。我們仿佛好象更喜歡這種方式的靜音通信縱然現(xiàn)時的技術(shù)能夠支持更簡單的語音指令。我們不擁有操作(manipulation)的力氣,和虛擬的對象而不是真實的物體施行交互,故而沒有長久性。運(yùn)動變成完全的用手做姿勢。


基于Eric Hulteen 和Gord Kurtenbach的定義,我們都清楚啥子是 UI 操作 ——短時間之內(nèi)不是一種用手做姿勢 ——了解啥子是用手做姿勢以及用手做姿勢表達(dá)"重大"行徑還是符號還是有非常大的艱難。移動交互的涵義是啥子?用手做姿勢施行溝通和語言施行溝通的最表面化不一樣是啥子?我們做用手做姿勢的象征意義往往很抽象簡單。


在人機(jī)交互領(lǐng)域,用手做姿勢一般被作為奉達(dá)一點(diǎn)簡單的指令而不是交流某些事情的真實情況、描寫問題還是陳說想法。運(yùn)用用手做姿勢操作電腦一般是指示式的,這一般不是許多人運(yùn)用用手做姿勢的目標(biāo)。例如,舉手揮動(wave)這動不動作,在事實世界中一般是打招呼的一種形式,不過這種打招呼的形式在人機(jī)交互中卻不太常用。一般首次寫手續(xù)通例會顯露“hello”,但我們對和電腦打招呼并不有興致。


不過,在一個不得空的飯館,舉手揮動這一用手做姿勢有可能就有不一樣的涵義了。當(dāng)向跑堂兒的招收時,有可能是要引開始跑堂兒的注意,需求它們供給服務(wù)。在計算機(jī)中,要引動計算機(jī)注意有時也有其特別意義,譬如,計算機(jī)休眠時,普通都會敲打鍵盤還是移動鼠標(biāo)來喚醒,以提示計算機(jī)“注意”。當(dāng)運(yùn)用Kinect時,可以運(yùn)用更加直觀的形式,就行少量派報告陳述阿湯哥那樣子,抬起雙手,還是簡單的朝計算機(jī)揮舉手揮動,計算機(jī)便會從休眠狀況喚醒。


在人機(jī)交互領(lǐng)域,用手做姿勢一般有一點(diǎn)涵義,表達(dá)有意讓某些事物發(fā)生。用手做姿勢是一種指令。當(dāng)經(jīng)過鼠標(biāo)還是觸控板去點(diǎn)擊UI界面上的按鍵時,我們期望按鍵會被觸動引發(fā)其身后的事情。一般,按鍵上會有一個標(biāo)簽來指使按鍵的功能如:著手、消除、敞開、關(guān)閉。我們的用手做姿勢操作就是想要成功實現(xiàn)這些個事情。


上頭的定義中的第1點(diǎn)兒可以得出,用手做姿勢的另一個獨(dú)特的地方是比較隨心(arbitrary)。用手做姿勢有框定的領(lǐng)域,那末在該領(lǐng)域以外沒有不論什么意義。令人驚奇的是除開指向(pointing)和聳肩膀(shurg),人類科學(xué)家沒有發(fā)覺不論什么物品我們可以稱之為一種通用的用手做姿勢。不過,在計算機(jī)的UI中,指向(pointing)一般被覺得是直接操作由于它涉及跟蹤,同時聳肩膀的涵義太微妙而非常不好辨認(rèn)。因為這個,我們想要運(yùn)用的不論什么Kinect用手做姿勢務(wù)必基于應(yīng)用手續(xù)的用戶 和應(yīng)用手續(xù)的預(yù)設(shè)和研發(fā)者之間就某種用手做姿勢代表的涵義得到完全一樣。


由于用手做姿勢是恣意的(arbitrary)所以它們也是基于約定的(conventional)。應(yīng)用手續(xù)的預(yù)設(shè)者務(wù)必奉告用戶正在運(yùn)用的用手做姿勢的意義,還是是這些個用手做姿勢是約定俗稱大家都曉得的。這個之外,這些個約定不是基于語言文化,而是對已確認(rèn)的技術(shù)規(guī)則。我們曉得怎么樣運(yùn)用鼠標(biāo) (行徑學(xué)習(xí)) 并不是由于這是我們已經(jīng)從我們的文化導(dǎo)入的物品,而是由于這是基于特別指定的圖形用戶界面的跨文化約定。一樣地,我們曉得怎么樣點(diǎn)擊或滑動智強(qiáng)手機(jī),不是由于這些個都是文化的約定,而是由于這些個都是跨文化天然用戶界面項約定。有趣兒的是,我們在一定程度上曉得怎么樣點(diǎn)擊平板電腦,由于我們曾經(jīng)學(xué)習(xí)了怎么樣運(yùn)用鼠標(biāo)裸機(jī)。技術(shù)約定之間可以互相轉(zhuǎn)化,這是由于語講和用手做姿勢可以經(jīng)過不一樣的語講和文化之間來改換。


不過,用手做姿勢的這種恣意性和基于約定的特別的性質(zhì)也帶來了曲解性(misunderstanding),這是在預(yù)設(shè)不論什么用戶界面,特別是像Kinect這么的沒有不論什么預(yù)先設(shè)定好的操作約定的用戶界面時需求關(guān)心注視的風(fēng)險。就像在有點(diǎn)國度,頷首表達(dá)否決搖頭表達(dá)有可能。用手做姿勢,還是不論什么身板子的運(yùn)動,都可能萌生曲解。


總之,在人機(jī)交互領(lǐng)域,用手做姿勢是:




  • 表現(xiàn)一種簡單的指示



  • 天然生成有隨心性



  • 基于某種協(xié)定



  • 有可能被曲解


注意:實際的直接操作(manipulation)不是用手做姿勢。


2. 天然交互界面(NUI)


商議用手做姿勢而不商議天然用戶界面顯然殘缺。天然用戶界面是一系列技術(shù)的合計,他涵蓋:語音辨別,多點(diǎn)觸控以及大致相似Kinect的動感交互界面,他和Windows和Macs操作系統(tǒng)中鼠標(biāo)和鍵盤交互這種很常見圖形交互界面不一樣。就像圖像交互界面和之前的起名稱行交互界面不一樣那樣子。


天然交互界面天然在哪里呢?早期天然交互界面的發(fā)起者覺得交互界面的預(yù)設(shè)應(yīng)當(dāng)對用戶十分直觀,運(yùn)用用戶先天便會的行徑來施行交互操作。他的目的是不必操作由圖標(biāo)和點(diǎn)菜單構(gòu)成的基于GUI 的應(yīng)用手續(xù)界面,由于這種界面一般具備陡峻的學(xué)習(xí)曲線。相反,理想化的狀況是,用戶應(yīng)當(dāng)能夠走到應(yīng)用手續(xù)面前,就能夠啟用它。在以往的幾年里隨著觸碰功能的智強(qiáng)手機(jī)和平板電腦的流行,漸漸代替了鍵盤鼠標(biāo),當(dāng)我們看見孩子們起步到不論什么觸碰屏設(shè)施前面,用手去觸碰它,期望它的響應(yīng),在這一點(diǎn)兒上看這一理念已經(jīng)成功實現(xiàn)。


固然天然用戶界面的天然性仿佛好象是直接操作的最佳寫照,當(dāng)運(yùn)用手指頭來施行觸碰交互時,先天天然和后天學(xué)習(xí)行徑之間的對立被突破。一點(diǎn)用手做姿勢,如輕觸熒幕,在某種意義上就是先天便會的動作。其它的動作譬如說雙擊,取得點(diǎn)擊而后拖拉等,沒有先天便會。并且隨著不一樣的設(shè)施制作商著手支持不一樣觸碰用手做姿勢,為了要得相同的用手做姿勢在不一樣的觸碰平臺上有相同的意義和行徑,為某些用手做姿勢定義一點(diǎn)約定顯得更加關(guān)緊。


天然用戶界面(NUI)的天然性更多的是一種相對天然的概念。對于NUI的更現(xiàn)代的了解受Bill Buxton所影響。他覺得NUI界面的預(yù)設(shè)充分利用了用戶預(yù)先便會的技能,用戶和UI施行交互覺得很天然,要得它們甚至于忘了是從哪兒學(xué)到這些個和UI施行交互所需的技能的。換言之,首次操作時,我們沒想到的起來我們以前學(xué)過這些個知識。例如,輕點(diǎn)(tap)這個用手做姿勢早平板電腦和手機(jī)中運(yùn)用的很次數(shù)多,這個技能是從我們之前在傳統(tǒng)的人機(jī)交互界面上運(yùn)用鼠標(biāo)來指向并點(diǎn)擊某一個界面上的元素學(xué)來的。點(diǎn)擊(click)和輕點(diǎn)(tap)的最主要差別在于,點(diǎn)擊需求鼠標(biāo),對于觸碰屏,不必另外的設(shè)施,只消用手指頭輕輕觸碰一下子熒幕就可以了。


這引出了天然用戶界面的另一個獨(dú)特的地方。用戶和計算機(jī)之間的交互看起來不必不論什么中介,這種互動的中介是不可以見的。例如,在語音辨別界面中,人機(jī)交互是經(jīng)過具備復(fù)雜電子過淋去噪的邁克風(fēng)成功實現(xiàn)的,其內(nèi)里有解析發(fā)音語義單元的各種算法,將這些個語義傳交給其他軟件來施行將特別指定的短語詮釋為指示,并將該指示照射到某種軟件功能操作。不過,內(nèi)里的這一切,對用戶是不可以見的。當(dāng)用戶對計算機(jī)散發(fā)這么的指示,"嘿,注意我",她會覺得計算機(jī)緣像大致相似大部分?jǐn)?shù)人的本能那樣子的響應(yīng)這個指示。


天然用戶界面的 倚賴于先驗知識和不必中介的交互這兩個特點(diǎn)標(biāo)志是每一種NUI界面的并肩特點(diǎn)標(biāo)志,其它方面如觸碰,語音和動態(tài)交互界面則因設(shè)施的不一樣而各異。到現(xiàn)在為止,大部分?jǐn)?shù)關(guān)于NUI的預(yù)設(shè)都是基于多點(diǎn)觸控體驗認(rèn)識的。這就是為何面前對于用手做姿勢的標(biāo)準(zhǔn)定義是那樣子定義的。它是將多點(diǎn)觸碰的場景施行改正并將用手做姿勢和操作區(qū)別開來。


關(guān)于用手做姿勢(gesture)和操作(manipulation)的爭辯也存在于語音交互界面中,指示等同于用手做姿勢,語音等同于直接操作,在動態(tài)交互界面中,將手還是身板子追蹤展覽在可視化界面上手和身板子的運(yùn)動等同于直接操作。自由方式的運(yùn)動像舉手揮動這動不動作就歸屬用手做姿勢。


不過Kinect還有第三種交互界面,他和觸碰和語音交互不一樣。那就上一篇文章中所講的姿態(tài)(pose),姿態(tài)是身板子的某一小批和其它局部之間的一種靜態(tài)關(guān)系,他不是運(yùn)動的。Kinect中的姿態(tài)和起居中的姿態(tài)是同樣的,例如,左臂伸出45度表達(dá)將現(xiàn)時的窗戶變?yōu)榛顒拥慕换ゴ绑w,右臂伸出45度還是135度表達(dá)鉛直滾興工具欄。


額外,交互形式可以從一品類型的交互界面改換到額外一種交互界面。以按鍵為例,按鍵實際上就是一個符號,這是一個先驗的圖形用戶界面。從最基本的功能來講,按鍵就是一個經(jīng)過鼠標(biāo)點(diǎn)擊在一個可視化元素的書契還是圖像上被觸動引發(fā)一點(diǎn)指示的工具。在以往15年,按鍵被作為人機(jī)交互界面的一個集成局部,被改換到多點(diǎn)觸碰界面,以及Kinect用戶界面中來。


天然用戶界面預(yù)設(shè)師所尋求的似的是天然,按鍵正好供給了這一點(diǎn)兒。不過按鍵在每一種用戶界面中的改換都面對著一點(diǎn)挑戰(zhàn)。


圖形用戶界面中按鍵的一個一般的特點(diǎn)標(biāo)志是他供給了一個懸浮狀況來指使用戶光標(biāo)已經(jīng)懸停在的按鍵上方的準(zhǔn)確位置。這種懸浮狀況將點(diǎn)(click)這個動作失散開來。懸浮狀況可以為按鍵供給一點(diǎn)另外的信息。當(dāng)將按鍵移植到觸碰屏交互界面時,按鍵不可以供給懸浮狀況。觸碰屏界面只能響應(yīng)觸碰。因為這個,和電腦上的圖像用戶界表情形,按鍵只能供給“擊”(click)操作,而沒有“點(diǎn)”(point)的有經(jīng)驗。


當(dāng)將按鍵移植到基于Kinect的用戶界面上時,按鍵的行徑就變得更加特別了?;贙inect的圖形界面中,按鍵的行徑和觸碰界面中的剛好相反,他只供給了懸?。╤over)的“點(diǎn)”(point)的有經(jīng)驗,沒有“擊”(click)的有經(jīng)驗。按鍵這種更令用戶體驗認(rèn)識預(yù)設(shè)者覺得懊喪的弱項,在以往的幾年里,強(qiáng)迫做預(yù)設(shè)者不斷的對Kinect界面上的按鍵施行改進(jìn),以供給更多靈巧高明的形式來點(diǎn)擊視物感覺元素。這些個改進(jìn)涵蓋:懸停在按鍵上時期、將巴掌向外推(拙笨地臨摹點(diǎn)擊一個按鍵的行徑)等。


固然觸碰界面也有用手做姿勢,但Kinect 界面有點(diǎn)相互作用不是用手做姿勢,然而軟件的研發(fā)和預(yù)設(shè)者傾向于以 Kinect 用手做姿勢操作作為交互界面。這仿佛好象是由于運(yùn)用用手做姿勢作為物理操作是 Kinect 應(yīng)用手續(xù)的最大的獨(dú)特的地方。與此相反的是,觸碰界面的冒尖獨(dú)特的地方是直接操作。固然有可能不正確,許多人一般將天然交互界面區(qū)分清楚為三類:語音交互界面,觸碰交互界面和用手做姿勢交互界面。


不過,在關(guān)于Kinect的有關(guān)紹介文檔中,你會發(fā)覺有時姿態(tài)(pose)和操作(manipulation)都被描寫為用手做姿勢。這些個都沒有錯。要記取的是,當(dāng)我們商議Kinect中的一點(diǎn)專門用語,如舉手揮動(wave),滑動(swipe),我們會作為完全的用手做姿勢,而姿態(tài)和操控只有在暗喻意義上才稱之為用手做姿勢。


以上的商議都很關(guān)緊,由于我們會進(jìn)一步預(yù)設(shè)Kinect相互作用的語意,我們將最后移除從其它圖形界面上吸收過來的關(guān)于按鍵的語意,而后試驗樹立基于Kinect的先驗的語意。舉手揮動(wave)這是Kinect中完全的用手做姿勢,是最早的這種試驗。喬治亞技術(shù)研討所的研討擔(dān)任職務(wù)的人正在利用 Kinect 來詮釋美國手勢語言。相反,其它研討擔(dān)任職務(wù)的人,正在利用 Kinect 詮釋身板子語言——另一種預(yù)先形成的用手做姿勢和姿態(tài)的溝通。諸這么類的研討可以視為對于NUI的第二層研討。這些個漸漸靠近了起初NUI人機(jī)交互的原始的幻想,不僅是看不見,并且NUI能夠自適合以了解我們的行徑,而不是強(qiáng)迫做我們理解我們和電腦的人機(jī)交互。


3. 用手做姿勢從哪兒來


在用手做姿勢交互界面中,完全的用手做姿勢,姿態(tài)和追蹤以及它們之間的組合構(gòu)成了交互的基本專門用語。對于Kinect來說,到現(xiàn)在為止可以運(yùn)用的有8個通用的用手做姿勢:舉手揮動(wave),懸浮按鍵(hover BUTTON),磁吸按鍵(magnet button),推按鍵(push button),磁吸幻燈片(magnetic slide),通用暫停(universal pause),鉛直骨碌條(vertical scrolling)和滑動(swipping)。那里面的一點(diǎn)專門用語是微軟自個兒引入的,有一點(diǎn)是游戲攝理商預(yù)設(shè)的,還有一點(diǎn)是Kinect for PC研發(fā)擔(dān)任職務(wù)的人為了研發(fā)應(yīng)用而引入的。


很少事情狀況下會為人際交互界面專門用語施行定制。一般要將這8種用手做姿勢區(qū)別開來,并在一點(diǎn)應(yīng)用中通用也不常見。相仿的事情狀況在web專門用語和手機(jī)用手做姿勢中預(yù)設(shè)新的界面時也會碰到,那里面只有局部的預(yù)設(shè)能夠成為標(biāo)準(zhǔn)。在網(wǎng)頁預(yù)設(shè)領(lǐng)域,走防水煤油燈和光標(biāo)動畫流行一時,并在一片不耐煩聲中迅疾消逝。在握機(jī)預(yù)設(shè)領(lǐng)域因為水果企業(yè)在觸碰屏領(lǐng)域的早期地位這種專門用語獲得了美好的規(guī)范。水果引入了一點(diǎn)觸碰用手做姿勢專門用語,如輕點(diǎn)(tap),點(diǎn)住不放(tap and hold),滑動swipe及pinch。


 



 


交互專門用語形成規(guī)范有幾個絆腳石。第1個就是為了取得好處而防止標(biāo)準(zhǔn)化。在90時代后期的瀏覽器大戰(zhàn)中,盡管各大廠商在口頭上說標(biāo)準(zhǔn)化協(xié)議很關(guān)緊,不過在瀏覽器研發(fā)上依然不已的研發(fā)自個兒的HTML版本,以吸引研發(fā)者運(yùn)用它們的技術(shù)。設(shè)施制作商可以利用市場霸占率的優(yōu)勢來鎖定消費(fèi)者,經(jīng)過在它們的手機(jī)上成功實現(xiàn)自個兒定義語意的觸屏,來推行自個兒的用手做姿勢操作。這些個都是不天然的行徑,由于不一樣廠商對于同一用手做姿勢的語意都不一樣,況且它們看起來不天然,運(yùn)用不一樣廠商的產(chǎn)品需求再學(xué)習(xí)。


另一種形成規(guī)范化的絆腳石是上下文用手做姿勢的專利。例如,水果企業(yè)不可以對“滑動”(swipe)操作提出請求專利,不過它可以對“滑動解鎖手機(jī)”這個用手做姿勢提出請求專利,這要得其它企業(yè)需求運(yùn)用這一技術(shù)還是預(yù)設(shè)理念時要不給水果企業(yè)付出專利費(fèi),要不將水果告上法庭以防止專利費(fèi),或則索性不運(yùn)用這一上下文用手做姿勢。假如不運(yùn)用這一上下文用手做姿勢,那末產(chǎn)品就毀傷了之前我們學(xué)習(xí)到運(yùn)用很天然的形式滑動解鎖手機(jī),音樂播放器,平板電腦等這一約定了。


最終一個絆腳石是,預(yù)設(shè)一個用手做姿勢很艱難。用手做姿勢專門用語會晤對一點(diǎn)App Store中手機(jī)應(yīng)用手續(xù)和YouTube中視頻文件應(yīng)用所碰到的一點(diǎn)問題:許多人要不會要不不會。用手做姿勢需求深刻思考怎么樣定義的簡單要得許多人能夠去用,這就是長尾理論遺留的問題。


那末啥子樣的用手做姿勢專門用語才是好的呢。假如一個用手做姿勢便于運(yùn)用,那末他就被覺得是預(yù)設(shè)令人滿意的。在交互預(yù)設(shè)中,易用性有兩個方面:可用(affordance)和反饋(feedback)。反饋就是說用戶曉得現(xiàn)時正在施行的操作。在網(wǎng)頁中,點(diǎn)擊按鍵會看見按鍵有一點(diǎn)兒偏移,這就表達(dá)交互成功。鼠標(biāo)按鈕按下時的聲響在某種意義上也是一種反饋,他表達(dá)鼠標(biāo)在辦公。對于Winodw Phone Metro風(fēng)格的界面上的磁貼,研發(fā)這覺得這些個按鍵應(yīng)當(dāng)足夠大,以容下大平面或物體表面的大小的觸碰地區(qū)范圍,不過它們也覺得過大的觸碰地區(qū)范圍會要得用戶觸碰到地區(qū)范圍外面也會被觸動引發(fā)注冊的事情。額外,狀況信息還是明確承認(rèn)會話框會在應(yīng)用手續(xù)飲彈出以提醒用戶發(fā)生了一點(diǎn)事物。在 Xbox 的儀表板中,運(yùn)用Kinect傳感器萌生的光標(biāo)懸停在的熱點(diǎn)上著手動畫播放。


假如說反饋發(fā)生在操作施行中還是在這以后,那末可用性(affordance)就發(fā)生在操作之前了??捎眯跃褪且环N提醒還是指導(dǎo),奉告用戶某一個可視化元素是可以交互的,指使用戶該元素的用法。在GUI交互界面中,按鍵是能夠最好的完成這些個理念的元素。按鍵經(jīng)過書契還是圖標(biāo)提醒來執(zhí)行一點(diǎn)函數(shù)操作。GUI界面上的按鍵經(jīng)過懸浮狀況可以提醒用戶其用場。最好的可用性-有可能有些繞圈-就是約定俗成。用戶曉得某一個可視化元素的用場,由于之前在其它應(yīng)用中運(yùn)用過大致相似的可視化控件,還是是在其它設(shè)施中執(zhí)行過大致相似的操作。不過,這一點(diǎn)兒對于基于Kinect的用手做姿勢交互界面來說有些艱難,由于一切都是新的。


一般的作法就是運(yùn)用假座其它類型交互界面中的約定。在觸碰交互界面中,一個輕點(diǎn)(tap)用手做姿勢和一般的鼠標(biāo)點(diǎn)擊是等同的。響應(yīng)輕點(diǎn)事情的兩個可視化元素,圖標(biāo)和按鍵,也被預(yù)設(shè)的和傳統(tǒng)的GUI界面上的圖標(biāo)和按鍵同樣,來達(dá)到提醒用戶該元素的效用這一目標(biāo)。Kinect也運(yùn)用按鍵和圖標(biāo)來要得用戶能夠更加容易運(yùn)用。由于Kinect基本上是基于”點(diǎn)”(pointing)而原生不支持“擊”(clicking)。在此之前,軟件界面預(yù)設(shè)者和研發(fā)者的消耗的錢了眾多精神力來對用手做姿勢交互界面施行定制以成功實現(xiàn)“擊”這動不動作。


和觸碰交互界面不同,用手做姿勢交互界面可以從社會形態(tài)中間人的普通用手做姿勢中假座一點(diǎn)用手做姿勢操作。這就要得舉手揮動(wave)變成Kinect應(yīng)用手續(xù)的經(jīng)典用手做姿勢。由于這一姿態(tài)和事實生存中的姿態(tài)有象征性結(jié)合要得不費(fèi)吹灰之力了解和運(yùn)用。軌跡追蹤,固然在技術(shù)上不是用手做姿勢,不過他是另一個在事實生存中和點(diǎn)撥有結(jié)合的專門用語。當(dāng)在電視機(jī)還是顯露器前揮舞手時,好的Kinect應(yīng)用手續(xù)應(yīng)當(dāng)能夠追蹤拿到手的運(yùn)動,并顯露一個光標(biāo)隨開始一開始運(yùn)出動。當(dāng)我們在事實生存三拇指點(diǎn)物體時,Kinect中的手部追蹤顯露的手形圖標(biāo)的反饋要得手續(xù)更加易用。


到現(xiàn)在為止,事實生存中的易用性用手做姿勢在Kinect交互界面中用的比較少,大多的易用性都是從傳統(tǒng)的GUI界面上的可用性移植過來的。隨著時間的變更,這一點(diǎn)兒會獲得改善。在觸碰屏設(shè)施上新的用手做姿勢經(jīng)過在傳統(tǒng)的已經(jīng)樹立的約定中添加手指頭來形成。兩指輕點(diǎn)和一指輕點(diǎn)有點(diǎn)不一樣,運(yùn)用兩個手指頭還是多個手指頭施行滑動有其獨(dú)有特別的涵義。最后,觸碰用手做姿勢所有由手指頭完成。另一方面,真正的用手做姿勢用戶界面,有一個接近于無限的語意庫,要得我們可以基于事實生存中有關(guān)聯(lián)的用手做姿勢施行改進(jìn)。


本文接下來從理論到成功實現(xiàn),商議怎么樣成功實現(xiàn)用手做姿勢辨別,并展覽了Kinect中八中基本用手做姿勢中的舉手揮動(wave)用手做姿勢的辨別。


4. 成功實現(xiàn)用手做姿勢辨別


Microsoft Kinect SDK并沒有里面含有用手做姿勢辨別引擎。因為這個需求研發(fā)者來定義和用手做姿勢辨別。從SDK的Beta版放出以來,一點(diǎn)第三方研發(fā)者開創(chuàng)的用手做姿勢引擎已初見端倪。不過,微軟沒有將它們作為標(biāo)準(zhǔn)的引擎??磥磉@有可能還要等微軟將用手做姿勢辨別引擎添加到SDK中來,還是指明可代替的解決方案。本節(jié)對用手做姿勢辨別技術(shù)施行了簡單紹介,期望能夠幫忙研發(fā)者在標(biāo)準(zhǔn)的用手做姿勢辨別引擎出來之前,可以自個兒動手研發(fā)用手做姿勢辨別引擎。


用手做姿勢辨別相對來說可以簡單也可以很復(fù)雜,這決定于與要辨別的用手做姿勢。有三種基本的辦法可以用來辨別用手做姿勢:基于算法,基于神經(jīng)器官網(wǎng)絡(luò)和基于用手做姿勢樣本庫。每一種辦法都有其優(yōu)欠缺。研發(fā)者具體認(rèn)為合適而使用那種辦法決定于與待辨別的用手做姿勢、項目需要,研發(fā)時間以及研發(fā)水準(zhǔn)?;谒惴ǖ挠檬肿鲎藙荼鎰e相對簡單容易成功實現(xiàn),基于神經(jīng)器官網(wǎng)絡(luò)和用手做姿勢樣本庫則有點(diǎn)復(fù)雜。


4.1 基于算法的用手做姿勢辨別


算法是解決軟件研發(fā)中幾乎全部問題的最基本辦法。運(yùn)用算法的基本流程就是定義處置規(guī)則和條件,這些個處置規(guī)則和條件務(wù)必合乎處置最后結(jié)果的要求。在用手做姿勢辨別中,這種算法的最后結(jié)果要求是一個二值型對象,某一用手做姿勢要不合乎預(yù)先規(guī)定的用手做姿勢要不不合。運(yùn)用算法來辨別用手做姿勢是最基本的辦法,由于對于有一點(diǎn)兒編程有經(jīng)驗的研發(fā)這來說,用手做姿勢辨別的代碼便于了解,編著,保護(hù)和調(diào)整。


不過,最簡單直接的辦法也有其欠缺。算法的簡單性限止了其能辨別到的用手做姿勢的門類。對于舉手揮動(wave)辨別較好的算法不可以夠辨別扔(throw)和擺(swing)動作。前者動作相對簡單和歸置,后者則更加微小且多變。有可能能夠?qū)懸粋€辨別來回?fù)u動(swing)的算法,不過代碼有可能比較不好懂和薄弱。


算法還有一個外在的擴(kuò)展性問題。固然一點(diǎn)代碼可以重用,不過每一種用手做姿勢務(wù)必運(yùn)用定制的算法來施行辨別。隨著新的用手做姿勢辨別算法參加類庫,類庫的體積會迅疾增加。這就對手續(xù)的性能萌生影響,由于需求運(yùn)用眾多算法來對某一個用手做姿勢施行辨別以判斷該用手做姿勢的類型。


最終,每一個用手做姿勢辨別算法需求不一樣的參變量,例如時間間隔和閾值。特別是在根據(jù)流程辨別特別指定的用手做姿勢的時刻這一點(diǎn)兒顯得特別表面化。研發(fā)者需求不斷測試和實驗以為每一種算法確認(rèn)合宜的參變量值。這本身是一個有挑戰(zhàn)也很沒情趣的辦公。不過每一種用手做姿勢的辨別有著自個兒特別的問題。


4.2 基于神經(jīng)器官網(wǎng)絡(luò)的用手做姿勢辨別


當(dāng)用戶在做用手做姿勢時,用手做姿勢的方式并不老是足夠清楚到能夠判斷用戶的意向。例如跳躍用手做姿勢,跳躍用手做姿勢就是用戶短暫的跳起來,腳離去地面。這個定義不可以夠供給足夠的信息來辨別這動不動作。


咋一看,這個動作仿佛好象足夠簡單,要得可以運(yùn)用算法來施行辨別。首先,思索問題到有眾多種不一樣方式的跳躍:基本跳躍(basic jumping)、 跨欄(hurdling)、 跳遠(yuǎn)(long jumping)、 跳躍(hopping),等等。不過這處有一個大的問題就是,因為遭受Kinect視場地區(qū)范圍的限止,沒可能老是能夠探量觀測到地板的位置,這要得腳部何時離去地板很難確認(rèn)。假想一下子,用戶在膝蓋到下蹲點(diǎn)處彎下,而后跳起來。用手做姿勢辨別引擎應(yīng)當(dāng)覺得這是一個用手做姿勢仍然多個用手做姿勢:下蹲或 下蹲跳起還是是跳起?假如用戶在蹲下的時間和跳躍的時間相形過長,那末這一用手做姿勢有可能應(yīng)被辨別為下蹲而不是跳躍。


看見這些個,最著手對跳躍的定義便會變得依稀。這一姿態(tài)很難定義明白,要得不可以夠經(jīng)過定義一點(diǎn)算法來施行辨別,同時這些個算法因為需求定義過多的規(guī)則和條件而變得難于管理和不定。運(yùn)用對或錯的二值策略來辨別用戶用手做姿勢的算法太簡單和不夠壯健,不可以夠美好的辨別出大致相似跳躍,下蹲等動作。


神經(jīng)器官網(wǎng)絡(luò)的團(tuán)體和判斷是基于計數(shù)和幾率的,因為這個要得像辨別用手做姿勢這些個過程變得容易扼制?;谏蹲泳W(wǎng)絡(luò)的用手做姿勢辨別引擎對于下蹲而后跳躍動作,80百分之百的幾率判斷為跳躍,10百分之百會分辨斷定為下蹲。


除開能夠辨別復(fù)雜和精密細(xì)致的用手做姿勢,神經(jīng)器官網(wǎng)絡(luò)辦法還能解決基于算法用手做姿勢辨別存在的擴(kuò)展性問題。神經(jīng)器官網(wǎng)絡(luò)里面含有眾多神經(jīng)器官元,每一個神經(jīng)器官元是一個好的算法,能夠用來判斷用手做姿勢的微小局部的運(yùn)動。在神經(jīng)器官網(wǎng)絡(luò)中,很多用手做姿勢可以共享神經(jīng)器官元。不過每一中用手做姿勢辨別有著獨(dú)有特別的神經(jīng)器官元的組合。并且,神經(jīng)器官元具備高效的數(shù)值結(jié)構(gòu)來處置信息。這要得在辨別用手做姿勢時具備頎長的速率。


運(yùn)用基于神經(jīng)器官網(wǎng)絡(luò)施行用手做姿勢辨別的欠缺是辦法本身復(fù)雜。固然神經(jīng)器官網(wǎng)絡(luò)以及在計算機(jī)科學(xué)中對其的應(yīng)用已經(jīng)有了好幾十年,樹立一個好的神經(jīng)器官網(wǎng)絡(luò)對于大部分?jǐn)?shù)程序開發(fā)人員來說仍然有一點(diǎn)艱難的。大部分?jǐn)?shù)研發(fā)者有可能對數(shù)值結(jié)構(gòu)中的圖和樹比較知道得清楚,而對神經(jīng)器官網(wǎng)絡(luò)中尺度和依稀思維規(guī)律的成功實現(xiàn)有可能一點(diǎn)兒都不成解。這種匱缺樹立神經(jīng)器官網(wǎng)絡(luò)的經(jīng)驗是一個很大的艱難,縱然能夠成功的構(gòu)建一個神經(jīng)器官網(wǎng)絡(luò),手續(xù)的調(diào)整相當(dāng)艱難。


和基于算法的辦法相形,神經(jīng)器官網(wǎng)絡(luò)倚賴數(shù)量多的參變量來能獲得非常準(zhǔn)確的最后結(jié)果。參變量的個數(shù)隨著神經(jīng)器官元的個數(shù)提高。每一個神經(jīng)器官元可以用來辨別多個用手做姿勢,每一個神經(jīng)器官遠(yuǎn)的參變量的變動都會影響其它節(jié)點(diǎn)的辨別最后結(jié)果。配備布置和調(diào)試這些個參變量是一項藝術(shù),需求經(jīng)驗,并沒有特別指定的規(guī)則可循。不過,當(dāng)神經(jīng)器官網(wǎng)絡(luò)配合成雙機(jī)器學(xué)習(xí)過程中手動調(diào)試參變量,隨著時間的推移,系統(tǒng)的辨別精密度會隨之增長。


4.3 基于樣本的辨別


基于樣本還是基于模版的用手做姿勢辨別系統(tǒng)能夠?qū)⑷说挠檬肿鲎藙莺鸵阎挠檬肿鲎藙菹喟闩?。用戶的用手做姿勢在模型板庫中已?jīng)規(guī)范化了,要得能夠用來計算用手做姿勢的般配精密度。有兩種樣本辨別辦法,一種是儲存一系列的點(diǎn),另一種辦法是運(yùn)用大致相似的Kinect SDK中的骨骼追蹤系統(tǒng)。在后面的那一個辦法中,系統(tǒng)中里面含有一系列骨骼數(shù)值和景深幀數(shù)值,能夠運(yùn)用計數(shù)辦法對萌生的影像幀數(shù)值施行般配以辨別出已知的幀數(shù)值來。


這種用手做姿勢辨別辦法高度倚賴于機(jī)器學(xué)習(xí)。辨別引擎會記錄,處置,和重用現(xiàn)時幀數(shù)值,所以隨著時間的推移,用手做姿勢辨別精密度會逐層增長。系統(tǒng)能夠更好的辨別出你想要表現(xiàn)的具體用手做姿勢。這種辦法能夠比較容易的辨別出新的用手做姿勢,并且較其它兩種辦法能夠更好的處置比較復(fù)雜的用手做姿勢。不過樹立這么一個系統(tǒng)也不由得易。首先,系統(tǒng)倚賴于數(shù)量多的樣本數(shù)值。數(shù)值越多,辨別精密度越高。所以系統(tǒng)需求數(shù)量多的儲存資源和CPU時間的來施行查尋和般配。其次系統(tǒng)需求不一樣高度,不一樣胖瘦,不一樣衣著打扮(衣著打扮會影響景深數(shù)值提出取得身板子大概輪廓)的樣壓根兒施行某一個用手做姿勢。


5.辨別常見的用手做姿勢


挑選用手做姿勢辨別的辦法一般是倚賴于項目標(biāo)需求。假如項目只消辨別幾個簡單的用手做姿勢,那末運(yùn)用基于算法還是基于神經(jīng)器官網(wǎng)絡(luò)的用手做姿勢辨別就足夠了。對于其它類型的項目,假如有興致的話可以投合乎時尚間來樹立可復(fù)用的用手做姿勢辨別引擎,還是運(yùn)用一點(diǎn)人煙已經(jīng)寫好的辨別算法,接下來本文紹介幾種常用的用手做姿勢,并演習(xí)怎么樣運(yùn)用算法的辦法來辨別它們,用手做姿勢辨別的額外兩種辦法因為其復(fù)雜性本文不做紹介。


無論挑選哪種用手做姿勢辨別的辦法,都務(wù)必思索問題用手做姿勢的變動范圍。系統(tǒng)務(wù)必具備靈活性,并準(zhǔn)許某一個用手做姿勢有某個范圍內(nèi)的變化。很少有人能夠每每都做一模同樣的用手做姿勢。例如,思索問題周伯通現(xiàn)時左右首畫圓圈兒這個用手做姿勢,重復(fù)這一用手做姿勢10次,圓形的核心每每都在一個點(diǎn)嗎,圓形的起點(diǎn)和重點(diǎn)每每都在相同的地方嗎?每每畫圓的時長都同樣嗎?而后運(yùn)用右首做這個動作,最終比較最后結(jié)果。還是拉幾個朋友還是家人來做,而后仔細(xì)查看。也可以站在鏡子面前看自個兒做,還是運(yùn)用錄像設(shè)施錄下來再看。技法就是對于某一用手做姿勢,讓盡有可能多的人來做,而后打算標(biāo)準(zhǔn)化這一用手做姿勢。用手做姿勢辨別一個比較好的形式就是關(guān)心注視用手做姿勢最中心的局部而不是哪一些內(nèi)在的細(xì)枝末節(jié)。


5.1 揮舞(wave)用手做姿勢


只要玩過Xbox上的體感游戲,有可能都運(yùn)用過舉手揮動這個用手做姿勢。舉手揮動這一用手做姿勢無論歲數(shù)體積都能夠做的一個簡單動作。這是一個友善的,歡樂的用手做姿勢,許多人一般舉手揮動還是揮手來打招呼還是分別。在應(yīng)用研發(fā)的上下文中,舉手揮動用手做姿勢一般奉告應(yīng)用手續(xù)已經(jīng)準(zhǔn)備好了,可以著手體驗認(rèn)識應(yīng)用了。


舉手揮動是最簡單最基本的用手做姿勢。運(yùn)用算法辦法能夠很容易辨別這一用手做姿勢,不過之前講到的不論什么辦法也能夠運(yùn)用。固然舉手揮動是一個很簡單的用手做姿勢,不過怎么樣運(yùn)用代碼來辨別這一用手做姿勢呢?讀者可以在鏡子前做向自個兒舉手揮動,而后仔細(xì)仔細(xì)查看手的運(yùn)動,特別注意仔細(xì)查看手和臂膀之間的關(guān)系。接著仔細(xì)查看手和臂膀之間的關(guān)系,而后仔細(xì)查看在做這個用手做姿勢事身板子的整個兒姿態(tài)。有點(diǎn)人維持身板子和臂膀的不動,運(yùn)用手腕子左右移動來舉手揮動。有點(diǎn)人維持身板子和臂膀不動運(yùn)用手腕子前后移動來舉手揮動。可以經(jīng)過仔細(xì)查看這些個姿態(tài)來理解其它各種不一樣舉手揮動的形式。


XBOX中的舉手揮動動作定義為:從臂膀著手到肘部屈曲。用戶以臂膀肘為焦點(diǎn)往返移動小臂,移動最簡單的面和肩部在一個最簡單的面上,況且臂膀和地面維持平行,在用手做姿勢的中部(下圖1),小臂鉛直于后臂和地面。下圖展覽了這一姿態(tài)。


 





 


從圖中可以仔細(xì)查看得出一點(diǎn)規(guī)律,第1個規(guī)律就是,手和手腕子都是在肘部和肩部之上的,這也是大部分是舉手揮動動作的特點(diǎn)標(biāo)志。這也是我們辨別舉手揮動這一用手做姿勢的第1個標(biāo)準(zhǔn)。


第1幅圖展覽了舉手揮動這一姿態(tài)的半中腰位置,小臂和后臂鉛直。假如用戶手臂變更了這種關(guān)系,小臂在鉛直線左面還是右面,我們則覺得這是該用手做姿勢的一個斷片。對于舉手揮動這一姿態(tài),每一個姿態(tài)斷片務(wù)必往返重復(fù)多次,否則就不是一個完整的用手做姿勢。這一運(yùn)動規(guī)律就是我們的第二個準(zhǔn)則:當(dāng)某一用手做姿勢是舉手揮動時,手還是手腕子,務(wù)必在半中腰姿態(tài)的左右往返重復(fù)特別指定的回數(shù)。運(yùn)用這兩點(diǎn)經(jīng)過仔細(xì)查看獲得的規(guī)律,我們可以經(jīng)過算法樹立算法準(zhǔn)則,來辨別揮舞用手做姿勢了。


算法經(jīng)過計算手離去半中腰姿態(tài)地區(qū)范圍的回數(shù)。半中腰地區(qū)范圍是一個以臂膀肘為原點(diǎn)并給與一定閾值的地區(qū)范圍。算法也需求用戶在一定的時間段內(nèi)完成這個用手做姿勢,否則辨別便會敗績。這處定義的揮舞用手做姿勢辨別算法只是一個單獨(dú)的算法,不里面含有在一個多層的用手做姿勢辨別系統(tǒng)內(nèi)。算法保護(hù)自身的狀況,并在辨別完成時以事情方式告知用戶辨別最后結(jié)果。揮舞辨別檢查查看多個用戶以及兩雙手的揮舞用手做姿勢。辨別算法計算新萌生的每一幀骨骼數(shù)值,因為這個務(wù)必記錄這些個辨別的狀況。


下邊的代碼展覽了記錄用手做姿勢辨別狀況的兩個枚舉和一個結(jié)構(gòu)。第1個名為WavePosition的枚舉用來定義手在舉手揮動這動不動作中的不一樣位置。用手做姿勢辨別類運(yùn)用WaveGestureState枚舉來追蹤每一個用戶的手的狀況。WaveGestureTracker結(jié)構(gòu)用來保留用手做姿勢辨別中所需求的數(shù)值。他有一個Reset辦法,當(dāng)用戶的手達(dá)不到舉手揮動這一用手做姿勢的基本動作條件時,譬如當(dāng)手在臂膀肘以下時,可調(diào)配使用Reset辦法來重置用手做姿勢辨別中所用到的數(shù)值。


private enum WavePosition{
    None = 0,
    Left = 1,
    Right = 2,
    Neutral = 3
}private enum WaveGestureState{
    None = 0,
    Success = 1,
    Failure = 2,
    InProgress = 3
}private struct WaveGestureTracker{    public int IterationCount;    public WaveGestureState State;    public long Timestamp;    public WavePosition StartPosition;    public WavePosition CurrentPosition;    public void Reset()
    {
        IterationCount = 0;
        State = WaveGestureState.None;
        Timestamp = 0;
        StartPosition = WavePosition.None;
        CurrentPosition = WavePosition.None;
    }
}


下邊代碼顯露了用手做姿勢辨別類的最基本結(jié)構(gòu):它定義了五個恒量:半中腰地區(qū)范圍閾值,用手做姿勢動作連續(xù)不斷時間,用手做姿勢離去半中腰地區(qū)范圍左右移動回數(shù),以及左手和右首標(biāo)識恒量。這些個恒量應(yīng)當(dāng)作為配備布置文件的配備布置項儲存,在這處為了簡單方便,所以以恒量聲明。WaveGestureTracker數(shù)組保留每一個有可能的游戲者的雙手的用手做姿勢的辨別最后結(jié)果。當(dāng)舉手揮動這一用手做姿勢探量觀測到達(dá)在這以后,被觸動引發(fā)GestureDetected事情。


當(dāng)主手續(xù)收繳到一個新的數(shù)值幀時,就調(diào)配使用WaveGesture的Update辦法。該辦法循環(huán)遍歷每一個用戶的骨骼數(shù)值幀,而后調(diào)配使用TrackWave辦法對左右首施行舉手揮動姿態(tài)辨別。當(dāng)骨骼數(shù)值不在追蹤狀況時,重置用手做姿勢辨別狀況。


public class WaveGesture{    private const float WAVE_THRESHOLD = 0.1f;    private const int WAVE_MOVEMENT_TIMEOUT = 5000;    private const int LEFT_HAND = 0;    private const int RIGHT_HAND = 1;    private const int REQUIRED_ITERATIONS = 4;    private WaveGestureTracker[,] _PlayerWaveTracker = new WaveGestureTracker[6, 2];    public event EventHandler GestureDetected;    public void Update(Skeleton[] skeletons, long frameTimestamp)
    {        if (skeletons != 門里出身)
        {            Skeleton skeleton;            for (int i = 0; i < skeletons.Length; i++)
            {
                skeleton = skeletons[i];                if (skeleton.TrackingState != SkeletonTrackingState.NotTracked)
                {
                    TrackWave(skeleton, true, ref this._PlayerWaveTracker[i, LEFT_HAND], frameTimestamp);
                    TrackWave(skeleton, false, ref this._PlayerWaveTracker[i, RIGHT_HAND], frameTimestamp);
                }                else                {                    this._PlayerWaveTracker[i, LEFT_HAND].Reset();                    this._PlayerWaveTracker[i, RIGHT_HAND].Reset();
                }
            }
        }
    }
}


 


下邊的代碼是舉手揮動姿態(tài)辨別的主要思維規(guī)律辦法TrackWave的主體局部。它證驗我們先前定義的構(gòu)成舉手揮動姿態(tài)的條件,并更新用手做姿勢辨別的狀況。辦法辨別左手還是右首的用手做姿勢,第1個條件是證驗,手和肘關(guān)節(jié)點(diǎn)是否處于追蹤狀況。假如這兩個關(guān)節(jié)點(diǎn)信息不可以用,則重置追蹤狀況,否則施行下一步的證驗。


假如姿態(tài)連續(xù)不斷時間超過閾值且還沒有進(jìn)入了到下一步驟,在姿態(tài)追蹤超時,重置追蹤數(shù)值。下一個證驗手部關(guān)節(jié)點(diǎn)是否在肘關(guān)節(jié)點(diǎn)之上。假如不是,則依據(jù)現(xiàn)時的追蹤狀況,舉手揮動姿態(tài)辨別敗績還是重置辨別條件。假如手部關(guān)節(jié)點(diǎn)在Y軸上且高于肘部關(guān)節(jié)點(diǎn),辦法接著判斷手在Y軸相片比本人好看對于肘關(guān)節(jié)的位置。調(diào)配使用UpdatePosition辦法并傳入合宜的手關(guān)節(jié)點(diǎn)所處的位置。更生手關(guān)節(jié)點(diǎn)位置在這以后,最終判下定論義的重復(fù)回數(shù)是否滿意,假如滿意這些個條件,舉手揮動這一用手做姿勢辨別成功,被觸動引發(fā)GetstureDetected事情。


private void TrackWave(Skeleton skeleton, bool isLeft, ref WaveGestureTracker tracker, long timestamp)
{
    JointType handJointId = (isLeft) ? JointType.HandLeft : JointType.HandRight;
    JointType elbowJointId = (isLeft) ? JointType.ElbowLeft : JointType.ElbowRight;
    Joint hand = skeleton.Joints[handJointId];
    Joint elbow = skeleton.Joints[elbowJointId];    if (hand.TrackingState != JointTrackingState.NotTracked && elbow.TrackingState != JointTrackingState.NotTracked)
    {        if (tracker.State == WaveGestureState.InProgress && tracker.Timestamp + WAVE_MOVEMENT_TIMEOUT < timestamp)
        {
            tracker.UpdateState(WaveGestureState.Failure, timestamp);
            System.Diagnostics.Debug.WriteLine("Fail!");
        }        else if (hand.Position.Y > elbow.Position.Y)
        {            //運(yùn)用 (0, 0) 作為熒幕的核心.  從用戶的視角看, X軸左負(fù)右正.            if (hand.Position.X <= elbow.Position.X - WAVE_THRESHOLD)
            {
                tracker.UpdatePosition(WavePosition.Left, timestamp);
            }            else if (hand.Position.X >= elbow.Position.X + WAVE_THRESHOLD)
            {
                tracker.UpdatePosition(WavePosition.Right, timestamp);
            }            else            {
                tracker.UpdatePosition(WavePosition.Neutral, timestamp);
            }            if (tracker.State != WaveGestureState.Success && tracker.IterationCount == REQUIRED_ITERATIONS)
            {
                tracker.UpdateState(WaveGestureState.Success, timestamp);
                System.Diagnostics.Debug.WriteLine("Success!");                if (GestureDetected != 門里出身)
                {
                    GestureDetected(this, new EventArgs());
                }
            }
        }        else        {            if (tracker.State == WaveGestureState.InProgress)
            {
                tracker.UpdateState(WaveGestureState.Failure, timestamp);
                System.Diagnostics.Debug.WriteLine("Fail!");
            }            else            {
                tracker.Reset();
            }
        }
    }    else    {
        tracker.Reset();
    }
}


 


下邊的代碼添加到WaveGestureTracker結(jié)構(gòu)中:這些個幫忙辦法保護(hù)結(jié)構(gòu)中的字段,要得TrackWave辦法易讀。惟一需求注意的是UpdatePosition辦法。TrackWave調(diào)配使用該辦法判斷手的位置已經(jīng)移動。他的最主重要的條目的是更新CurrentPosition和Timestamp屬性,該辦法也負(fù)責(zé)更新InterationCount字段合InPorgress狀況。


public void UpdateState(WaveGestureState state, long timestamp)
{
    State = state;
    Timestamp = timestamp;
}public void Reset()
{
    IterationCount = 0;
    State = WaveGestureState.None;
    Timestamp = 0;
    StartPosition = WavePosition.None;
    CurrentPosition = WavePosition.None;
}public void UpdatePosition(WavePosition position, long timestamp)
{    if (CurrentPosition != position)
    {        if (position == WavePosition.Left  position == WavePosition.Right)
        {            if (State != WaveGestureState.InProgress)
            {
                State = WaveGestureState.InProgress;
                IterationCount = 0;
                StartPosition = position;
            }

            IterationCount++;
        }

        CurrentPosition = position;
        Timestamp = timestamp;
    }
}


上面所說的代碼斷片就可以成功實現(xiàn)揮舞(wave)用手做姿勢辨別的思維規(guī)律了。


6. 結(jié)束語


本文主要紹介了用手做姿勢辨別中預(yù)設(shè)的基本概念以及用手做姿勢辨別的進(jìn)展過程,在此基礎(chǔ)上紹介了用手做姿勢辨別的三種基本辦法:基于算法的用手做姿勢辨別、基于神經(jīng)器官網(wǎng)絡(luò)的用手做姿勢辨別和基于樣本庫的用手做姿勢辨別。





相關(guān)產(chǎn)品中心查看更多