日韩国产黄片在线看_欧美天堂日韩天堂_大地电影影院在线播放_在线观看未禁18免费视色多多_国产亚洲精品综合在线你懂的电影_日产免费一区欧美_晚夜免费禁用十大亏亏无风险_亚洲黄色一级大片网站_最近中文在线播放国语_国产高清自拍视频

177 2750 6554

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

product/產(chǎn)品中心

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

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

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

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

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

瀏覽次數(shù):120

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

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


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


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


1. 啥子是用手做姿勢(shì)


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


以上這些個(gè)解釋明白用手做姿勢(shì)在不一樣的學(xué)科領(lǐng)域都有自個(gè)兒獨(dú)有特別的涵義。在學(xué)術(shù)領(lǐng)域都打算對(duì)用手做姿勢(shì)定義一個(gè)抽象的概念。在用戶體驗(yàn)認(rèn)識(shí)預(yù)設(shè)領(lǐng)域運(yùn)用最廣泛的關(guān)于用手做姿勢(shì)的定義真的Eric Hulteen 和Gord Kurtenbach 1990年刊發(fā)的一篇名為人機(jī)交互中的用手做姿勢(shì)(Gestures in Human-Computer Communication),定義如下所述:”用手做姿勢(shì)是身板子的運(yùn)動(dòng),他里面含有一點(diǎn)信息。舉手揮動(dòng)分別是一種用手做姿勢(shì)。敲打鍵盤不是用手做姿勢(shì),由于用手指頭的運(yùn)動(dòng)去敲打按鈕沒有被仔細(xì)查看,也不關(guān)緊,他只表現(xiàn)的鍵盤被按下這動(dòng)不動(dòng)作。(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)”


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


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


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


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


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


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


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


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


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


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


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




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



  • 天然生成有隨心性



  • 基于某種協(xié)定



  • 有可能被曲解


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


2. 天然交互界面(NUI)


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


天然交互界面天然在哪里呢?早期天然交互界面的發(fā)起者覺得交互界面的預(yù)設(shè)應(yīng)當(dāng)對(duì)用戶十分直觀,運(yùn)用用戶先天便會(huì)的行徑來施行交互操作。他的目的是不必操作由圖標(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)成功實(shí)現(xiàn)。


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


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


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


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


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


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


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


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


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


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


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


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


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


3. 用手做姿勢(shì)從哪兒來


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


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


 



 


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


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


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


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


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


一般的作法就是運(yùn)用假座其它類型交互界面中的約定。在觸碰交互界面中,一個(gè)輕點(diǎn)(tap)用手做姿勢(shì)和一般的鼠標(biāo)點(diǎn)擊是等同的。響應(yīng)輕點(diǎn)事情的兩個(gè)可視化元素,圖標(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ā)者的消耗的錢了眾多精神力來對(duì)用手做姿勢(shì)交互界面施行定制以成功實(shí)現(xiàn)“擊”這動(dòng)不動(dòng)作。


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


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


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


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


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


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


4.1 基于算法的用手做姿勢(shì)辨別


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


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


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


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


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


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


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


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


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


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


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


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


4.3 基于樣本的辨別


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


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


5.辨別常見的用手做姿勢(shì)


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


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


5.1 揮舞(wave)用手做姿勢(shì)


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


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


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


 





 


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


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


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


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


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


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


 


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


假如姿態(tài)連續(xù)不斷時(shí)間超過閾值且還沒有進(jìn)入了到下一步驟,在姿態(tài)追蹤超時(shí),重置追蹤數(shù)值。下一個(gè)證驗(yàn)手部關(guān)節(jié)點(diǎn)是否在肘關(guān)節(jié)點(diǎn)之上。假如不是,則依據(jù)現(xiàn)時(shí)的追蹤狀況,舉手揮動(dòng)姿態(tài)辨別敗績(jī)還是重置辨別條件。假如手部關(guān)節(jié)點(diǎn)在Y軸上且高于肘部關(guān)節(jié)點(diǎn),辦法接著判斷手在Y軸相片比本人好看對(duì)于肘關(guān)節(jié)的位置。調(diào)配使用UpdatePosition辦法并傳入合宜的手關(guān)節(jié)點(diǎn)所處的位置。更生手關(guān)節(jié)點(diǎn)位置在這以后,最終判下定論義的重復(fù)回?cái)?shù)是否滿意,假如滿意這些個(gè)條件,舉手揮動(dòng)這一用手做姿勢(shì)辨別成功,被觸動(dòng)引發(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)中:這些個(gè)幫忙辦法保護(hù)結(jié)構(gòu)中的字段,要得TrackWave辦法易讀。惟一需求注意的是UpdatePosition辦法。TrackWave調(diào)配使用該辦法判斷手的位置已經(jīng)移動(dò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;
    }
}


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


6. 結(jié)束語(yǔ)


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





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