微軟官方博客揭秘Kinect工作原理

2011/1/8 9:33:33    編輯:驅(qū)動(dòng)之家     字體:【

Win7之家afsion.com.cn):微軟官方博客揭秘Kinect工作原理

     “你就是控制器!(You are the controller.)如果你有在關(guān)注Kinect,相信已經(jīng)聽(tīng)過(guò)這句給力的廣告詞了。從《Kinect Adventures!》中手腳并用堵漏水窟窿,到Zune播放界面中揮手換歌,Kinect開(kāi)創(chuàng)了一種更加自然的娛樂(lè)交互方式。在這篇博客文章中,我將揭秘這款體感系統(tǒng)背后的秘密以及它如何讓開(kāi)發(fā)者創(chuàng)造Kinect體驗(yàn)。而Kinect團(tuán)隊(duì)的項(xiàng)目經(jīng)理Arjun Dayal則將展示如何實(shí)現(xiàn)通過(guò)基于手勢(shì)的方式來(lái)控制Xbox Dashboard和Kinect Hub。首先,讓我們從指導(dǎo)Kinect研發(fā)的概念原理開(kāi)始。

  我們生活在一個(gè)模擬的世界

  傳統(tǒng)編程基于一系列的規(guī)則:原因和結(jié)果,非黑即白,非真即假。在為輸入輸出數(shù)目有限的簡(jiǎn)單系統(tǒng)建模時(shí),這種方式工作得挺好。拿游戲《Halo》來(lái)說(shuō)吧:按A鍵是讓士官長(zhǎng)跳,前撥左搖桿讓他向前走,前撥右搖桿讓他向上看。不是A,就是B?上У氖,我們生活的真實(shí)世界并不是如此數(shù)字化,而是模擬的。

  在模擬世界中,并不是只有簡(jiǎn)單的“是”和“否”,還有“也許是/否”;不僅有“對(duì)”和“錯(cuò)”,還有“對(duì)/錯(cuò)的可能性”。讓我們想象一下?lián)]手這一簡(jiǎn)單動(dòng)作的所有可能性:身體運(yùn)動(dòng)的幅度,環(huán)境差異,衣服質(zhì)地的不同,文化差異造成的動(dòng)作差異等等。你可能需要研究10的23次方這么多的可能性,顯然用傳統(tǒng)編程方式來(lái)解決這類問(wèn)題是不現(xiàn)實(shí)的。

  我們從一開(kāi)始就知道必須采用一種全新的,接近于人腦工作的方式來(lái)解決這一問(wèn)題。當(dāng)你遇到一個(gè)人的時(shí)候,你的大腦立即將注意力集中在他身上,并根據(jù)經(jīng)驗(yàn)辨識(shí)出他的身份。這一過(guò)程并不是通過(guò)數(shù)百層的決策樹(shù)來(lái)實(shí)現(xiàn),人腦就是知道。嬰兒很難區(qū)分出兩個(gè)人的不同,但我們通過(guò)多年的學(xué)習(xí)和訓(xùn)練可以在幾分之一秒內(nèi)做到。事實(shí)上,你也許還能蠻準(zhǔn)確地估摸出他們的年齡、性別、心情甚至個(gè)性。這也是讓我們成就為人類的原因之一。

  Kinect以類似的方法被創(chuàng)造出來(lái)。它觀察身邊的世界,它注意觀察你的動(dòng)作。即使Kinect從來(lái)沒(méi)見(jiàn)過(guò)你揮過(guò)手,也能很快地從它學(xué)習(xí)過(guò)的TB級(jí)數(shù)據(jù)中猜測(cè)出你所做動(dòng)作的含義。

  Kinect傳感器

  Kinect骨架追蹤處理流程的核心是一個(gè)無(wú)論周圍環(huán)境的光照條件如何,都可以讓Kinect感知世界的CMOS紅外傳感器。該傳感器通過(guò)黑白光譜的方式來(lái)感知環(huán)境:純黑代表無(wú)窮遠(yuǎn),純白代表無(wú)窮近。黑白間的灰色地帶對(duì)應(yīng)物體到傳感器的物理距離。它收集視野范圍內(nèi)的每一點(diǎn),并形成一幅代表周圍環(huán)境的景深圖像。傳感器以每秒30幀的速度生成景深圖像流,實(shí)時(shí)3D地再現(xiàn)周圍環(huán)境。如果你玩過(guò)pin point impression 3D針模玩具可能更容易理解這一技術(shù)——將你的手(或者臉,如果你愿意的話)按壓在這種玩具上,就可以產(chǎn)生你身體某一部位的簡(jiǎn)單3D模型。

      尋找移動(dòng)部件

  Kinect需要做的下一件事是尋找圖像中較可能是人體的移動(dòng)物體,就像人眼下意識(shí)地聚焦在移動(dòng)物體上那樣。接下來(lái),Kinect會(huì)對(duì)景深圖像進(jìn)行像素級(jí)評(píng)估,來(lái)辨別人體的不同部位。同時(shí),這一過(guò)程必須以優(yōu)化的預(yù)處理來(lái)縮短響應(yīng)時(shí)間。

  Kinect采用分割策略來(lái)將人體從背景環(huán)境中區(qū)分出來(lái),即從噪音中提取出有用信號(hào)。Kinect可以主動(dòng)追蹤最多兩個(gè)玩家的全身骨架,或者被動(dòng)追蹤最多四名玩家的形體和位置。在這一階段,我們?yōu)槊總(gè)被追蹤的玩家在景深圖像中創(chuàng)建了所謂的分割遮罩,這是一種將背景物體(比如椅子和寵物等)剔除后的景深圖像。在后面的處理流程中僅僅傳送分割遮罩的部分,以減輕體感計(jì)算量。

      Kinect的大腦

  真正的魔術(shù)在這里發(fā)生。分割化玩家圖像的每一個(gè)像素都被傳送進(jìn)一個(gè)辨別人體部位的機(jī)器學(xué)習(xí)系統(tǒng)中。隨后該系統(tǒng)將給出了某個(gè)特定像素屬于哪個(gè)身體部位的可能性。比如,一個(gè)像素有80%的幾率屬于腳,60%的幾率屬于腿,40%的幾率屬于胸部?雌饋(lái)這時(shí)候我們就可以把幾率最大的可能性當(dāng)作結(jié)果,但這么做未免太過(guò)武斷了。我們的做法是將所有的這些可能性輸入到接下來(lái)的處理流程中并且等到最后階段再做判斷。

  看了上面的介紹,你也許要問(wèn)我們?nèi)绾谓虝?huì)Kinect辨識(shí)人體部位。開(kāi)發(fā)這一人工智能(被稱為Exemplar(模型)系統(tǒng))可不是一件輕松的事情:數(shù)以TB計(jì)的數(shù)據(jù)被輸入到集群系統(tǒng)中來(lái)教會(huì)Kinect以像素級(jí)技術(shù)來(lái)辨認(rèn)手、腳以及它看到的其他身體部位。下圖就是我們用來(lái)訓(xùn)練和測(cè)試Exemplar的數(shù)據(jù)之一。

  模型匹配:生成骨架系統(tǒng)

  處理流程的最后一步是使用之前階段輸出的結(jié)果,根據(jù)追蹤到的20個(gè)關(guān)節(jié)點(diǎn)來(lái)生成一幅骨架系統(tǒng)。Kinect會(huì)評(píng)估Exemplar輸出的每一個(gè)可能的像素來(lái)確定關(guān)節(jié)點(diǎn)。通過(guò)這種方式Kinect能夠基于充分的信息最準(zhǔn)確地評(píng)估人體實(shí)際所處位置。另外我們?cè)谀P推ヅ潆A段還做了一些附加輸出濾鏡來(lái)平滑輸出以及處理閉塞關(guān)節(jié)等特殊事件。

  骨架追蹤系統(tǒng)的目標(biāo)之一是為處理流程的各種輸出提供一種菜單式的選擇界面。游戲開(kāi)發(fā)者可以選擇任意的系統(tǒng)部件組合來(lái)開(kāi)發(fā)各種游戲體驗(yàn)。比如,你可以僅僅使用分隔映射來(lái)制造一些驚人的華麗效果(《Your Shape: Fitness Evolved》是一個(gè)好例子)。

  講到這里,我們已經(jīng)描繪出一個(gè)可用于控制游戲或娛樂(lè)的完全實(shí)時(shí)的體感系統(tǒng)。接下來(lái),Arjun將介紹改進(jìn)的Xbox Dashboard和Kinect Hub。他將向你展示這兩個(gè)用戶界面如何利用景深圖像流和20關(guān)節(jié)骨架系統(tǒng)來(lái)創(chuàng)造一種基于自然手勢(shì)的,訪問(wèn)游戲、電影、音樂(lè)和其他娛樂(lè)活動(dòng)的全新方式。

      Kinect:技術(shù)如何最終理解你!

  如今,技術(shù)在我們的日常生活中扮演著重要角色,但直到現(xiàn)在,技術(shù)產(chǎn)品在真正理解人類意圖以及適應(yīng)個(gè)體風(fēng)格差異方面做得仍然不好。Kinect的問(wèn)世讓這一切有所改變。站在Kinect前,它就能知道你是誰(shuí)。不僅如此,還能將你和你的愛(ài)人區(qū)別開(kāi)來(lái)。當(dāng)你移動(dòng)時(shí),傳感器能在瞬間追蹤到你。想要互動(dòng)?用聲音和肢體移動(dòng)就可以播放電影、玩游戲、和朋友聊天等等。不需要學(xué)習(xí)任何新的控制方式,多么神奇!

  前面Kinect團(tuán)隊(duì)項(xiàng)目經(jīng)理Ron已經(jīng)描述了Kinect傳感器讓Xbox實(shí)時(shí)追蹤玩家動(dòng)作背后的高深技術(shù),但我們?nèi)绾巫罴训剡\(yùn)用?我們的目標(biāo)是讓玩家盡可能自如地控制Xbox,同時(shí)讓所有用戶可以容易地學(xué)習(xí)并理解各種控制手勢(shì)。接下來(lái)我們會(huì)更加深入地揭秘這一體感技術(shù),并且談?wù)勗贙inect Hub和Dashboard中的Kinect體驗(yàn)。

  手勢(shì):從何說(shuō)起?

  聽(tīng)到我們要設(shè)計(jì)一種手勢(shì)來(lái)上下左右移動(dòng)物體的時(shí)候,你也許會(huì)想:“沒(méi)難度啊,把你的手移到物體上,選中然后向你想要的方向移動(dòng),搞定!”

  等下,別那么自信。問(wèn)問(wèn)你的朋友他們是怎么想的,你可能會(huì)驚訝地發(fā)現(xiàn)他們的回答和你是如此的不同。是你的方式更好嗎?不一定,只是對(duì)你來(lái)說(shuō)更有邏輯性。人類的獨(dú)特之處在于能通過(guò)多種方法來(lái)完成某一特定任務(wù)。讓我們拿駕駛來(lái)做例子。如果你讓100個(gè)人來(lái)模仿如何開(kāi)車,你可能會(huì)得到許多答案。有些人會(huì)將兩手分別握住面前的10點(diǎn)鐘和2點(diǎn)鐘位置,有些人可能會(huì)只用一手握住12點(diǎn)鐘位置,有些人可能會(huì)背靠椅子坐著;同樣地,模仿腳踩油門、剎車和離合器的方式也會(huì)五花八門。所有這些方式都能讓我們駕駛,而技術(shù)的工作就是要能識(shí)別所有這些方式——讓技術(shù)理解你!

  那么,識(shí)別一個(gè)看似簡(jiǎn)單動(dòng)作有多復(fù)雜呢,拿伸手做例子。當(dāng)你想伸手去拿什么東西的時(shí)候,你會(huì)認(rèn)為伸手的方向應(yīng)該完全垂直于身體平面。但實(shí)際上由于肩膀和手臂關(guān)節(jié)的結(jié)合方式,你不可能以直線方式伸手。因此,每個(gè)人都會(huì)以略為不同的方式做出一個(gè)伸手動(dòng)作,但每個(gè)人都覺(jué)得這是一個(gè)同樣的伸手動(dòng)作。成功的手勢(shì)識(shí)別就是要理解人類動(dòng)作的微妙之處,并且讓技術(shù)了解這些不同。

  研發(fā)Kinect這款革命性產(chǎn)品的過(guò)程中,我們既要戰(zhàn)勝上述挑戰(zhàn)還要讓產(chǎn)品易于使用。我們所做的每個(gè)決定都是人機(jī)互動(dòng)領(lǐng)域史無(wú)前例的,我們的工作有可能將重新定義互動(dòng)娛樂(lè)技術(shù)的未來(lái)。

  手勢(shì)原型: 去粕取精

  我們?cè)跒槠聊粚?dǎo)航創(chuàng)造控制手勢(shì)時(shí),采用了很常見(jiàn)的方法:記錄下了所有能想到的天馬行空的點(diǎn)子,比如用腳來(lái)選擇菜單神馬的。當(dāng)我們意識(shí)到這樣的點(diǎn)子實(shí)在太多了的時(shí)候,我們知道需要一種更靠譜的選擇方式。

  我們收集并記錄下所有創(chuàng)意,并且一一制作出原型以檢驗(yàn)?zāi)且环N更適合普通用戶。和普通用戶進(jìn)行原型測(cè)試非常重要,我們因此學(xué)到了許多關(guān)于人體運(yùn)動(dòng)的信息,并用于重新調(diào)整每次新測(cè)試。人機(jī)互動(dòng)的現(xiàn)有規(guī)則并不總是適用于在客廳進(jìn)行的10英寸距離上的體感交互。通過(guò)測(cè)試我們更好地理解用戶行為,比如長(zhǎng)時(shí)間做手勢(shì)時(shí)怎樣才舒服,以及我們創(chuàng)造的控制手勢(shì)集和人類自然手勢(shì)是否沖突。

  在測(cè)試過(guò)程中,我們的理念是“不斷失敗,去粕取精”,我們不斷拋棄不合適的方案,保留有效方案。工程、用戶研究和設(shè)計(jì)團(tuán)隊(duì)都充分參與到手勢(shì)集的原型制作過(guò)程中,并和普通用戶一起進(jìn)行測(cè)試,根據(jù)所有獲取到的數(shù)據(jù)來(lái)決定最佳手勢(shì)。

  在數(shù)月的測(cè)試、觀察和研究后,我們得到了一種簡(jiǎn)單且容易理解的控制方式——懸停選擇和翻頁(yè)控制。懸停選擇是一種容易學(xué)習(xí)、高度可靠并且可預(yù)測(cè)的機(jī)制,而翻頁(yè)控制提供了一種更有觸感的方式來(lái)控制屏幕內(nèi)容。

  讓我們通過(guò)Xbox Dashboard和Kinect Hub的實(shí)現(xiàn)方式來(lái)更加深入地談?wù)撨@種控制模型的細(xì)節(jié)。

      Kinect Hub: Kinect體驗(yàn)大本營(yíng)!

  Kinect Hub是Xbox Dashboard中的Kinect體驗(yàn)中心,在這里你可以用手勢(shì)來(lái)訪問(wèn)Kinect內(nèi)容。Hub的設(shè)計(jì)簡(jiǎn)單且容易理解,你可以注意到我們采用了巨大的顏色分明的項(xiàng)目方塊,讓用戶輕松地找到并選擇他們所想做的事。

  Kinect Hub: 如何使用?

  可以通過(guò)懸停選擇來(lái)輕易選中Kinect Hub中的任何項(xiàng)目。你所要做的就是將手停在想要選擇的項(xiàng)目方塊上并等待進(jìn)度圓圈計(jì)時(shí)器填滿。左右手都行!

  我們?yōu)槠聊簧系捻?xiàng)目方塊加入了一些有趣的立體效果,當(dāng)你將手在項(xiàng)目方塊間移動(dòng)時(shí)可以注意到。(注意上圖手掌光標(biāo)所處的項(xiàng)目方塊有略微向內(nèi)翻開(kāi)的效果)

  如果你想看Hub中的其他東西,在屏幕左右兩側(cè)找到翻頁(yè)圖標(biāo)。

  控制方法是將手移向翻頁(yè)圖標(biāo)上,你會(huì)發(fā)現(xiàn)屏幕上的手掌光標(biāo)被吸附過(guò)去,接下來(lái)你只需要按屏幕顯示的方向拉動(dòng)即可實(shí)現(xiàn)翻頁(yè)。

  Kinect Hub光標(biāo):如何知道誰(shuí)在控制以及傳感器看到了什么?

  盡管同時(shí)只能有一個(gè)人控制Kinect Hub的手掌光標(biāo),但在我們收到的Beta測(cè)試反饋中有一個(gè)大問(wèn)題是用戶不知道誰(shuí)在控制,也不知道Kinect是否能夠真正看到他們正在做的動(dòng)作。有些時(shí)候用戶在Kinect前做動(dòng)作,但卻無(wú)法用手掌光標(biāo)選中屏幕上的項(xiàng)目。還有一些時(shí)候,玩家不知道客廳的家具擋住了Kinect的視線,玩家必須對(duì)房間重新布局以改善效果。這些情況都將給用戶帶來(lái)極大的挫敗感,因此我們決定給予用戶更多的信息來(lái)解決這些問(wèn)題。

  我們的團(tuán)隊(duì)采用一種有趣的方式來(lái)解決這些問(wèn)題,也就是Dashboard和Kinect Hub右下角的傳感器視圖功能。這一視圖讓用戶看到實(shí)時(shí)景深視頻,清楚地勾勒出玩家和房間內(nèi)物體的輪廓。

  當(dāng)玩家揮手來(lái)控制屏幕光標(biāo)的時(shí)候,你會(huì)注意到在景深視頻窗口中該玩家的手會(huì)發(fā)亮,這一效果讓玩家知道目前誰(shuí)在控制Xbox。如果你想讓旁邊的人接管控制,可以讓他前后揮手直至切換控制成功。

  希望大家喜歡這篇揭示Kinect Hub以及體感工作原理的文章。開(kāi)發(fā)這一全新的用戶體驗(yàn)是一次奇妙之旅,看到用戶開(kāi)始使用這一未來(lái)的娛樂(lè)互動(dòng)方式讓我們激動(dòng)萬(wàn)分。