Win7之家( afsion.com.cn):微軟官方博客揭秘Kinect工作原理
“你就是控制器!(You are the controller.)如果你有在關(guān)注Kinect,相信已經(jīng)聽過這句給力的廣告詞了。從《Kinect Adventures!》中手腳并用堵漏水窟窿,到Zune播放界面中揮手換歌,Kinect開創(chuàng)了一種更加自然的娛樂交互方式。在這篇博客文章中,我將揭秘這款體感系統(tǒng)背后的秘密以及它如何讓開發(fā)者創(chuàng)造Kinect體驗。而Kinect團(tuán)隊的項目經(jīng)理Arjun Dayal則將展示如何實現(xiàn)通過基于手勢的方式來控制Xbox Dashboard和Kinect Hub。首先,讓我們從指導(dǎo)Kinect研發(fā)的概念原理開始。
我們生活在一個模擬的世界
傳統(tǒng)編程基于一系列的規(guī)則:原因和結(jié)果,非黑即白,非真即假。在為輸入輸出數(shù)目有限的簡單系統(tǒng)建模時,這種方式工作得挺好。拿游戲《Halo》來說吧:按A鍵是讓士官長跳,前撥左搖桿讓他向前走,前撥右搖桿讓他向上看。不是A,就是B?上У氖,我們生活的真實世界并不是如此數(shù)字化,而是模擬的。
在模擬世界中,并不是只有簡單的“是”和“否”,還有“也許是/否”;不僅有“對”和“錯”,還有“對/錯的可能性”。讓我們想象一下?lián)]手這一簡單動作的所有可能性:身體運(yùn)動的幅度,環(huán)境差異,衣服質(zhì)地的不同,文化差異造成的動作差異等等。你可能需要研究10的23次方這么多的可能性,顯然用傳統(tǒng)編程方式來解決這類問題是不現(xiàn)實的。
我們從一開始就知道必須采用一種全新的,接近于人腦工作的方式來解決這一問題。當(dāng)你遇到一個人的時候,你的大腦立即將注意力集中在他身上,并根據(jù)經(jīng)驗辨識出他的身份。這一過程并不是通過數(shù)百層的決策樹來實現(xiàn),人腦就是知道。嬰兒很難區(qū)分出兩個人的不同,但我們通過多年的學(xué)習(xí)和訓(xùn)練可以在幾分之一秒內(nèi)做到。事實上,你也許還能蠻準(zhǔn)確地估摸出他們的年齡、性別、心情甚至個性。這也是讓我們成就為人類的原因之一。
Kinect以類似的方法被創(chuàng)造出來。它觀察身邊的世界,它注意觀察你的動作。即使Kinect從來沒見過你揮過手,也能很快地從它學(xué)習(xí)過的TB級數(shù)據(jù)中猜測出你所做動作的含義。
Kinect傳感器
Kinect骨架追蹤處理流程的核心是一個無論周圍環(huán)境的光照條件如何,都可以讓Kinect感知世界的CMOS紅外傳感器。該傳感器通過黑白光譜的方式來感知環(huán)境:純黑代表無窮遠(yuǎn),純白代表無窮近。黑白間的灰色地帶對應(yīng)物體到傳感器的物理距離。它收集視野范圍內(nèi)的每一點(diǎn),并形成一幅代表周圍環(huán)境的景深圖像。傳感器以每秒30幀的速度生成景深圖像流,實時3D地再現(xiàn)周圍環(huán)境。如果你玩過pin point impression 3D針模玩具可能更容易理解這一技術(shù)——將你的手(或者臉,如果你愿意的話)按壓在這種玩具上,就可以產(chǎn)生你身體某一部位的簡單3D模型。
尋找移動部件
Kinect需要做的下一件事是尋找圖像中較可能是人體的移動物體,就像人眼下意識地聚焦在移動物體上那樣。接下來,Kinect會對景深圖像進(jìn)行像素級評估,來辨別人體的不同部位。同時,這一過程必須以優(yōu)化的預(yù)處理來縮短響應(yīng)時間。
Kinect采用分割策略來將人體從背景環(huán)境中區(qū)分出來,即從噪音中提取出有用信號。Kinect可以主動追蹤最多兩個玩家的全身骨架,或者被動追蹤最多四名玩家的形體和位置。在這一階段,我們?yōu)槊總被追蹤的玩家在景深圖像中創(chuàng)建了所謂的分割遮罩,這是一種將背景物體(比如椅子和寵物等)剔除后的景深圖像。在后面的處理流程中僅僅傳送分割遮罩的部分,以減輕體感計算量。
Kinect的大腦
真正的魔術(shù)在這里發(fā)生。分割化玩家圖像的每一個像素都被傳送進(jìn)一個辨別人體部位的機(jī)器學(xué)習(xí)系統(tǒng)中。隨后該系統(tǒng)將給出了某個特定像素屬于哪個身體部位的可能性。比如,一個像素有80%的幾率屬于腳,60%的幾率屬于腿,40%的幾率屬于胸部?雌饋磉@時候我們就可以把幾率最大的可能性當(dāng)作結(jié)果,但這么做未免太過武斷了。我們的做法是將所有的這些可能性輸入到接下來的處理流程中并且等到最后階段再做判斷。
看了上面的介紹,你也許要問我們?nèi)绾谓虝﨣inect辨識人體部位。開發(fā)這一人工智能(被稱為Exemplar(模型)系統(tǒng))可不是一件輕松的事情:數(shù)以TB計的數(shù)據(jù)被輸入到集群系統(tǒng)中來教會Kinect以像素級技術(shù)來辨認(rèn)手、腳以及它看到的其他身體部位。下圖就是我們用來訓(xùn)練和測試Exemplar的數(shù)據(jù)之一。
模型匹配:生成骨架系統(tǒng)
處理流程的最后一步是使用之前階段輸出的結(jié)果,根據(jù)追蹤到的20個關(guān)節(jié)點(diǎn)來生成一幅骨架系統(tǒng)。Kinect會評估Exemplar輸出的每一個可能的像素來確定關(guān)節(jié)點(diǎn)。通過這種方式Kinect能夠基于充分的信息最準(zhǔn)確地評估人體實際所處位置。另外我們在模型匹配階段還做了一些附加輸出濾鏡來平滑輸出以及處理閉塞關(guān)節(jié)等特殊事件。
骨架追蹤系統(tǒng)的目標(biāo)之一是為處理流程的各種輸出提供一種菜單式的選擇界面。游戲開發(fā)者可以選擇任意的系統(tǒng)部件組合來開發(fā)各種游戲體驗。比如,你可以僅僅使用分隔映射來制造一些驚人的華麗效果(《Your Shape: Fitness Evolved》是一個好例子)。
講到這里,我們已經(jīng)描繪出一個可用于控制游戲或娛樂的完全實時的體感系統(tǒng)。接下來,Arjun將介紹改進(jìn)的Xbox Dashboard和Kinect Hub。他將向你展示這兩個用戶界面如何利用景深圖像流和20關(guān)節(jié)骨架系統(tǒng)來創(chuàng)造一種基于自然手勢的,訪問游戲、電影、音樂和其他娛樂活動的全新方式。
Kinect:技術(shù)如何最終理解你!
如今,技術(shù)在我們的日常生活中扮演著重要角色,但直到現(xiàn)在,技術(shù)產(chǎn)品在真正理解人類意圖以及適應(yīng)個體風(fēng)格差異方面做得仍然不好。Kinect的問世讓這一切有所改變。站在Kinect前,它就能知道你是誰。不僅如此,還能將你和你的愛人區(qū)別開來。當(dāng)你移動時,傳感器能在瞬間追蹤到你。想要互動?用聲音和肢體移動就可以播放電影、玩游戲、和朋友聊天等等。不需要學(xué)習(xí)任何新的控制方式,多么神奇!
前面Kinect團(tuán)隊項目經(jīng)理Ron已經(jīng)描述了Kinect傳感器讓Xbox實時追蹤玩家動作背后的高深技術(shù),但我們?nèi)绾巫罴训剡\(yùn)用?我們的目標(biāo)是讓玩家盡可能自如地控制Xbox,同時讓所有用戶可以容易地學(xué)習(xí)并理解各種控制手勢。接下來我們會更加深入地揭秘這一體感技術(shù),并且談?wù)勗贙inect Hub和Dashboard中的Kinect體驗。
手勢:從何說起?
聽到我們要設(shè)計一種手勢來上下左右移動物體的時候,你也許會想:“沒難度啊,把你的手移到物體上,選中然后向你想要的方向移動,搞定!”
等下,別那么自信。問問你的朋友他們是怎么想的,你可能會驚訝地發(fā)現(xiàn)他們的回答和你是如此的不同。是你的方式更好嗎?不一定,只是對你來說更有邏輯性。人類的獨(dú)特之處在于能通過多種方法來完成某一特定任務(wù)。讓我們拿駕駛來做例子。如果你讓100個人來模仿如何開車,你可能會得到許多答案。有些人會將兩手分別握住面前的10點(diǎn)鐘和2點(diǎn)鐘位置,有些人可能會只用一手握住12點(diǎn)鐘位置,有些人可能會背靠椅子坐著;同樣地,模仿腳踩油門、剎車和離合器的方式也會五花八門。所有這些方式都能讓我們駕駛,而技術(shù)的工作就是要能識別所有這些方式——讓技術(shù)理解你!
那么,識別一個看似簡單動作有多復(fù)雜呢,拿伸手做例子。當(dāng)你想伸手去拿什么東西的時候,你會認(rèn)為伸手的方向應(yīng)該完全垂直于身體平面。但實際上由于肩膀和手臂關(guān)節(jié)的結(jié)合方式,你不可能以直線方式伸手。因此,每個人都會以略為不同的方式做出一個伸手動作,但每個人都覺得這是一個同樣的伸手動作。成功的手勢識別就是要理解人類動作的微妙之處,并且讓技術(shù)了解這些不同。
研發(fā)Kinect這款革命性產(chǎn)品的過程中,我們既要戰(zhàn)勝上述挑戰(zhàn)還要讓產(chǎn)品易于使用。我們所做的每個決定都是人機(jī)互動領(lǐng)域史無前例的,我們的工作有可能將重新定義互動娛樂技術(shù)的未來。
手勢原型: 去粕取精
我們在為屏幕導(dǎo)航創(chuàng)造控制手勢時,采用了很常見的方法:記錄下了所有能想到的天馬行空的點(diǎn)子,比如用腳來選擇菜單神馬的。當(dāng)我們意識到這樣的點(diǎn)子實在太多了的時候,我們知道需要一種更靠譜的選擇方式。
我們收集并記錄下所有創(chuàng)意,并且一一制作出原型以檢驗?zāi)且环N更適合普通用戶。和普通用戶進(jìn)行原型測試非常重要,我們因此學(xué)到了許多關(guān)于人體運(yùn)動的信息,并用于重新調(diào)整每次新測試。人機(jī)互動的現(xiàn)有規(guī)則并不總是適用于在客廳進(jìn)行的10英寸距離上的體感交互。通過測試我們更好地理解用戶行為,比如長時間做手勢時怎樣才舒服,以及我們創(chuàng)造的控制手勢集和人類自然手勢是否沖突。
在測試過程中,我們的理念是“不斷失敗,去粕取精”,我們不斷拋棄不合適的方案,保留有效方案。工程、用戶研究和設(shè)計團(tuán)隊都充分參與到手勢集的原型制作過程中,并和普通用戶一起進(jìn)行測試,根據(jù)所有獲取到的數(shù)據(jù)來決定最佳手勢。
在數(shù)月的測試、觀察和研究后,我們得到了一種簡單且容易理解的控制方式——懸停選擇和翻頁控制。懸停選擇是一種容易學(xué)習(xí)、高度可靠并且可預(yù)測的機(jī)制,而翻頁控制提供了一種更有觸感的方式來控制屏幕內(nèi)容。
讓我們通過Xbox Dashboard和Kinect Hub的實現(xiàn)方式來更加深入地談?wù)撨@種控制模型的細(xì)節(jié)。
Kinect Hub: Kinect體驗大本營!
Kinect Hub是Xbox Dashboard中的Kinect體驗中心,在這里你可以用手勢來訪問Kinect內(nèi)容。Hub的設(shè)計簡單且容易理解,你可以注意到我們采用了巨大的顏色分明的項目方塊,讓用戶輕松地找到并選擇他們所想做的事。
Kinect Hub: 如何使用?
可以通過懸停選擇來輕易選中Kinect Hub中的任何項目。你所要做的就是將手停在想要選擇的項目方塊上并等待進(jìn)度圓圈計時器填滿。左右手都行!
我們?yōu)槠聊簧系捻椖糠綁K加入了一些有趣的立體效果,當(dāng)你將手在項目方塊間移動時可以注意到。(注意上圖手掌光標(biāo)所處的項目方塊有略微向內(nèi)翻開的效果)
如果你想看Hub中的其他東西,在屏幕左右兩側(cè)找到翻頁圖標(biāo)。
控制方法是將手移向翻頁圖標(biāo)上,你會發(fā)現(xiàn)屏幕上的手掌光標(biāo)被吸附過去,接下來你只需要按屏幕顯示的方向拉動即可實現(xiàn)翻頁。
Kinect Hub光標(biāo):如何知道誰在控制以及傳感器看到了什么?
盡管同時只能有一個人控制Kinect Hub的手掌光標(biāo),但在我們收到的Beta測試反饋中有一個大問題是用戶不知道誰在控制,也不知道Kinect是否能夠真正看到他們正在做的動作。有些時候用戶在Kinect前做動作,但卻無法用手掌光標(biāo)選中屏幕上的項目。還有一些時候,玩家不知道客廳的家具擋住了Kinect的視線,玩家必須對房間重新布局以改善效果。這些情況都將給用戶帶來極大的挫敗感,因此我們決定給予用戶更多的信息來解決這些問題。
我們的團(tuán)隊采用一種有趣的方式來解決這些問題,也就是Dashboard和Kinect Hub右下角的傳感器視圖功能。這一視圖讓用戶看到實時景深視頻,清楚地勾勒出玩家和房間內(nèi)物體的輪廓。
當(dāng)玩家揮手來控制屏幕光標(biāo)的時候,你會注意到在景深視頻窗口中該玩家的手會發(fā)亮,這一效果讓玩家知道目前誰在控制Xbox。如果你想讓旁邊的人接管控制,可以讓他前后揮手直至切換控制成功。
希望大家喜歡這篇揭示Kinect Hub以及體感工作原理的文章。開發(fā)這一全新的用戶體驗是一次奇妙之旅,看到用戶開始使用這一未來的娛樂互動方式讓我們激動萬分。
評論列表
查看所有 條評論