獲取簡(jiǎn)單地作為布爾或浮點(diǎn)值的數(shù)據(jù)的游戲和其它應(yīng)用W簡(jiǎn)化游戲或其 它應(yīng)用開(kāi)發(fā)。根據(jù)本技術(shù),通過(guò)姿勢(shì)和控制器API 204,使得運(yùn)成為可能,該姿勢(shì)和控制器 API處理來(lái)自捕捉設(shè)備20的數(shù)據(jù)W及有可能來(lái)自控制器100的數(shù)據(jù),包括將數(shù)據(jù)轉(zhuǎn)換為布爾 和浮點(diǎn)輸入。
[0059] 姿勢(shì)和控制器API 204(也被稱為API 204)包括庫(kù)226,該庫(kù)226具有各骨架模型將 如何被解釋并被轉(zhuǎn)換為布爾或浮點(diǎn)輸入W供在控制臺(tái)202上運(yùn)行的應(yīng)用使用的定義?,F(xiàn)在 將參考圖5和6描述用于接收骨架模型數(shù)據(jù)并將該數(shù)據(jù)處理為布爾或浮點(diǎn)輸入的API 204的 一個(gè)實(shí)施例。
[0060] 包括用戶位置和移動(dòng)的場(chǎng)景可被捕捉設(shè)備20每次一帖地檢測(cè)。根據(jù)此數(shù)據(jù),在步 驟350中,姿態(tài)信息300被傳遞至API 204。姿態(tài)信息包括用戶的S維骨架模型和其它參數(shù)。 運(yùn)些另外的參數(shù)可W包括捕捉設(shè)備20檢測(cè)的x、y和Z最小和最大圖像平面位置。參數(shù)還可包 括對(duì)離散時(shí)間間隔在每一關(guān)節(jié)的基礎(chǔ)上對(duì)速度和加速度的測(cè)量。由此,在各實(shí)施例中,API 204接收大量數(shù)據(jù),包括用戶的身體中的所有點(diǎn)的位置和動(dòng)力活動(dòng)的全景圖。
[0061] 根據(jù)本技術(shù)的各方面,API 204可將簡(jiǎn)單的身體位置和移動(dòng)解釋為如在預(yù)定義規(guī) 則中闡明的姿勢(shì)。具體而言,API 204可在步驟354中分析所接收的姿態(tài)信息300來(lái)查看姿態(tài) 信息(或姿態(tài)信息的一部分)是否與庫(kù)226內(nèi)存儲(chǔ)的任何預(yù)定義規(guī)則304相匹配。在各實(shí)施例 中,所存儲(chǔ)的規(guī)則包括定義姿勢(shì)、動(dòng)作或狀況W及該姿勢(shì)、動(dòng)作或狀況的參數(shù)或元數(shù)據(jù)的信 息。所存儲(chǔ)的規(guī)則304描述特定位置和/或動(dòng)力運(yùn)動(dòng),當(dāng)其在姿態(tài)信息300中被檢測(cè)到時(shí)將被 解釋為預(yù)定義的姿勢(shì)。在各實(shí)施例中,每一個(gè)姿勢(shì)都可W具有不同的規(guī)則或規(guī)則集304。也 就是說(shuō),每個(gè)姿勢(shì)可通過(guò)單一規(guī)則定義。
[0062] 如同上面指出的,姿態(tài)信息可提供可被使用和解釋的大量數(shù)據(jù)。然而,在一個(gè)實(shí)施 例中,庫(kù)226中的規(guī)則304定義姿勢(shì),該姿勢(shì)為布爾型,例如真(1)或假(0)。W此方式,復(fù)雜的 姿態(tài)信息可被API 204簡(jiǎn)化來(lái)向在控制臺(tái)202上運(yùn)行的軟件應(yīng)用提供簡(jiǎn)單的布爾姿勢(shì)輸入。 例如,規(guī)則304可探究用戶的手正在觸摸(例如,真)或沒(méi)有在觸摸(例如,假)用戶的頭。運(yùn)一 規(guī)則可忽略大多數(shù)位置信息300,而簡(jiǎn)單地辨別該數(shù)據(jù)是否顯示用戶的手在他或她的頭上。 如果用戶的手在頭上,則API 204可提供輸入"r到在控制臺(tái)202上運(yùn)行的軟件應(yīng)用308.如 果用戶的手沒(méi)有在頭上,則API 204可提供輸入"0"到在控制臺(tái)202上運(yùn)行的軟件應(yīng)用308. 在其它實(shí)施例中,運(yùn)些1、0值可被反轉(zhuǎn)。
[0063] 不同規(guī)則304可定義各種各樣的其它姿勢(shì),從而導(dǎo)致來(lái)自API 204的布爾輸入。例 如,規(guī)則304可針對(duì)兩個(gè)關(guān)節(jié)或身體部位中的任一個(gè)彼此觸摸來(lái)定義(例如,觸摸=1,沒(méi)有 觸摸= 0);手舉起(1)或手放下(0);講話(1)或沒(méi)有講話(0);講出特定短語(yǔ)/命令(1)或沒(méi)有 講出該短語(yǔ)/命令(0);腿提起(1)或腿在地上(0)。在其他實(shí)施例中,運(yùn)些1、〇值中的每一個(gè) 可被反轉(zhuǎn)。各種其它規(guī)則可被定義W辨別來(lái)自姿態(tài)信息300的真/假姿勢(shì)。
[0064] 在上述實(shí)施例中,易于辨別的身體位置被API 204用作預(yù)定義姿勢(shì)W向在控制臺(tái) 202上運(yùn)行的軟件應(yīng)用308提供布爾輸入。然而,要理解,更復(fù)雜的身體位置可被API用作預(yù) 定義姿勢(shì)W向軟件應(yīng)用308提供布爾輸入。例如,可W想象,姿勢(shì)可設(shè)及各種關(guān)節(jié)相對(duì)于彼 此W所定義的方式放置,且當(dāng)那些相對(duì)位置從姿態(tài)數(shù)據(jù)中檢測(cè)到時(shí),姿勢(shì)被檢測(cè)且API 204 可提供輸入1。如果否,該輸入為0。
[0065] 除了向應(yīng)用308提供簡(jiǎn)單布爾輸入外,API 204還可W或替換地根據(jù)姿態(tài)信息300 辨別浮點(diǎn)值輸入,或簡(jiǎn)單浮點(diǎn)輸入。浮點(diǎn)輸入可按照類似于布爾輸入的方式辨別,區(qū)別在于 值的范圍可W為從0到1,或在其它實(shí)施例中從-1到1。如上所述,API 204可被定義W查找規(guī) 貝1J304所定義的特定位置或移動(dòng)。在浮點(diǎn)輸入的情況下,一般位置可有資格作為預(yù)定義姿 勢(shì),且附加地采用一般位置中的變化作為輸入,取決于該變化多么極端,所述變化被歸一化 為從O到1(或-1到1)的值。
[0066] 作為浮點(diǎn)輸入的一個(gè)示例,規(guī)則304可被定義為檢測(cè)用戶是否傾斜??蒞前傾、左 傾、右傾等。當(dāng)用戶傾斜時(shí),該位置可被針對(duì)傾斜定義的規(guī)則304檢測(cè)到。規(guī)則304還可采用 傾斜程度作為輸入,在直立的、"中立"位置和傾斜到最大程度(其可W是任意的、預(yù)定的傾 斜度)之間。從而,略微傾斜可接收靠近0的浮點(diǎn)值,而顯著傾斜可接收靠近1的浮點(diǎn)值。在此 實(shí)例中,API 204可提供傾斜姿勢(shì)被檢測(cè)到,連同針對(duì)該傾斜的浮點(diǎn)值。向左傾斜可被提供 為具有在0和1之間的浮點(diǎn)值,而向右傾斜可被提供為具有在0和1之間的浮點(diǎn)值。替換地, 左/右傾斜可被提供有在-U極端左傾)和1(極端右傾)之間的浮點(diǎn)值。
[0067] 可存在附加的歸一化過(guò)程。例如,API 204可針對(duì)不同大小的用戶(如由捕捉設(shè)備 20測(cè)量的)歸一化。從而,即使大用戶作出的極端傾斜比較小用戶作出的極端傾斜可能在絕 對(duì)值方面更夸大,但是兩者都可W被歸一到相同的值。歸一化還可在不同軟件應(yīng)用308之間 進(jìn)行。從而,針對(duì)給定位置指派的浮點(diǎn)值將跨多個(gè)軟件應(yīng)用相同。
[0068] 傾斜是可定義由API 204提供的浮點(diǎn)輸入的簡(jiǎn)單測(cè)量的身體位置的一個(gè)示例,且 要理解,各種其它簡(jiǎn)單測(cè)量的身體位置可被從姿態(tài)信息300辨別作為浮點(diǎn)輸入。一些其它的 浮點(diǎn)輸入包括但不限于:
[0069] ?身體傾斜、身體扭轉(zhuǎn),
[0070] .因虛弱而何僕,
[0071] ?腿或手臂舉起,
[0072] ?語(yǔ)音(其中例如音量可在預(yù)定的最小值和最大值之間被歸一化為浮點(diǎn)值),W及
[0073] ?關(guān)于垂直的x、y和Z軸中的一個(gè)或多個(gè)的頭部定向。
[0074] 還構(gòu)想了其他的。
[0075] 而且,要理解,更復(fù)雜的身體位置范圍可被API 204用作預(yù)定義姿勢(shì)W向軟件應(yīng)用 308提供浮點(diǎn)輸入。例如,可W想到,姿勢(shì)可設(shè)及各個(gè)關(guān)節(jié)相對(duì)于彼此按照定義的方式被定 位,且從中立位置的變化可定義浮點(diǎn)值的范圍。
[0076] 除了布爾和浮點(diǎn)輸入,API 204可進(jìn)一步提供關(guān)于所謂的動(dòng)作姿勢(shì)的輸入。運(yùn)些是 隨著時(shí)間發(fā)生的姿勢(shì)。具體而言,使用規(guī)則304,API 204可用于識(shí)別在來(lái)自捕捉設(shè)備20的多 帖數(shù)據(jù)上發(fā)生的姿勢(shì)。為此目的,API 204可包括跟蹤所識(shí)別的姿勢(shì)和其他輸入的隨時(shí)間輸 入Q叩ut-over-time)存檔、隱馬爾可夫模型實(shí)現(xiàn)(其中模型化系統(tǒng)被假定為馬爾可夫過(guò) 程一一其中當(dāng)前狀態(tài)封裝了確定將來(lái)狀態(tài)所使用的任何過(guò)去狀態(tài)信息,因此不必為此目的 而維護(hù)任何其他過(guò)去狀態(tài)信息的過(guò)程一一該過(guò)程具有未知參數(shù),并且隱藏參數(shù)是從可觀察 數(shù)據(jù)來(lái)確定的)、W及用于求解姿勢(shì)識(shí)別的特定實(shí)例所使用的其他功能。
[0077] 每個(gè)動(dòng)作姿勢(shì)可由規(guī)則304定義,該規(guī)則304包括屬性(諸如踢或砍),該屬性或者 為空(即,當(dāng)前沒(méi)有檢測(cè)到動(dòng)作)或者用將給出3D向量和肢體類型的對(duì)象填充。3D向量可指 示動(dòng)作的方向或動(dòng)作的主要位置。肢體類型可表示哪個(gè)肢體正在執(zhí)行該動(dòng)作(左手、右手、 左腳、右腳等)。
[0078] 動(dòng)作姿勢(shì)的示例包括但不限于:
[0079] .指向-手臂在一個(gè)方向上完全伸展。向量是手臂指向的方向。當(dāng)手在用戶側(cè)面時(shí) 忽略手。
[0080] ?砍-手臂快速移動(dòng)越過(guò)身體。向量是手臂移動(dòng)的方向。
[0081] .刺-手臂從身體向外快速移動(dòng)。向量是手臂伸展的方向。
[0082] .推-手臂按比刺慢的方式從身體向外移動(dòng)。向量是推的方向。
[0083] .拉-手臂按照平均速度向內(nèi)朝身體移動(dòng)。向量是拉的方向。
[0084] .保持不動(dòng)-手臂(可替換地為腿)保持靜止達(dá)給定時(shí)間量。向量是保持不動(dòng)的肢 體的位置。
[0085] ?踢-腿按照平的或向上的方式快速遠(yuǎn)離身體移動(dòng)。向量是踢的方向。
[0086] ?踩-腿快速朝地面移動(dòng)。向量是踩的方向。
[0087] 還構(gòu)想了其他的。
[0088] 再次參考圖6,在步驟356可檢測(cè)布爾、浮點(diǎn)或動(dòng)作姿勢(shì)。在各實(shí)施例中,姿勢(shì)可簡(jiǎn) 單地被檢測(cè)為通過(guò)/失敗。替換地,API 204可確定所標(biāo)識(shí)的姿勢(shì)和對(duì)應(yīng)于用戶的位置/移動(dòng) 與該姿勢(shì)相對(duì)應(yīng)的概率的置信度水平。具體而言,除定義姿勢(shì)的參數(shù)之外,規(guī)則還可W包括 在姿態(tài)信息300將被解釋為姿勢(shì)之前要實(shí)現(xiàn)的闊值置信度水平。某些姿勢(shì)可能作為系統(tǒng)命 令或游戲指令具有更大的影響,如此,在姿態(tài)被解釋為該姿勢(shì)之前具有較高的置信度水平。 姿態(tài)信息與存儲(chǔ)的規(guī)則的參數(shù)的比較導(dǎo)致關(guān)于姿態(tài)信息是否表示姿勢(shì)的累積置信度水平。 在各實(shí)施例中,置信度水平可由游戲開(kāi)發(fā)者設(shè)置或修改。
[0089] -旦確定了關(guān)于給定姿態(tài)或運(yùn)動(dòng)是否滿足給定姿勢(shì)規(guī)則的置信度水平,API 204 然后就在步驟556確定該置信度水平是否超過(guò)關(guān)于所考慮的規(guī)則的預(yù)定闊值。闊值置信度 水平可W與考慮中的規(guī)則相關(guān)聯(lián)地存儲(chǔ)。如果置信度水平低于闊值,則沒(méi)有檢測(cè)到姿勢(shì)(步 驟360),并且不采取動(dòng)作。另一方面,如果置信度水平高于闊值,則用戶的運(yùn)動(dòng)被確定為滿 足所考慮的姿勢(shì)規(guī)則,且隨后返回姿勢(shì)類型(布爾、浮點(diǎn)或動(dòng)作),連同與該姿勢(shì)相關(guān)聯(lián)的任 何輸入值。如同上面指出的,在其它實(shí)施例中,在通過(guò)(步驟364)或失敗(360)基礎(chǔ)上,姿勢(shì) 可不帶置信度水平地被確定。
[0090] 一旦姿勢(shì)已被檢測(cè),則姿勢(shì)類型和輸入值隨后可被軟件應(yīng)用308用來(lái)控制或影響 游戲度量。替換地,姿勢(shì)類型和輸入值可被控制臺(tái)202的操作系統(tǒng)而不是軟件應(yīng)用使用來(lái)影 響操作系統(tǒng)內(nèi)的控制功能。
[0091] 在上面描述的實(shí)施例中,輸入可被基于輪詢的軟件應(yīng)用308使用。周期性地,例如 每秒30或60次,軟件應(yīng)用308輪詢輸入(控制器、鍵盤、骨架跟蹤等)、基于所接收的輸入決定 要做什么、并隨后確定游戲狀態(tài)并呈現(xiàn)圖形。然而,在其它實(shí)施例中,輸入可被基于事件的 軟件應(yīng)用308使用,諸如舉例而言其中軟件應(yīng)用308不需要每秒更新30或60次。基于事件的 軟件應(yīng)用308可僅在輸入事件發(fā)生時(shí)更新。
[0092] 在基于事件的實(shí)施例中,軟件應(yīng)用308等待控制器100或目標(biāo)識(shí)別、分析和跟蹤系 統(tǒng)200發(fā)送指示存在更新的"事件"。在該時(shí)刻,軟件應(yīng)用308可處理輸入、更新游戲狀態(tài)、并 隨后返回W等待處理下一事件。
[0093] 為了知曉要處理運(yùn)些事件中的哪個(gè)事件(因?yàn)榭赡苡袕牟僮飨到y(tǒng)事件到控制器事 件到鍵盤事件等等許多許多的事件),軟件應(yīng)用308(可能在啟動(dòng)時(shí))確定它是為哪個(gè)事件被 調(diào)用的。該軟件應(yīng)用可通過(guò)針對(duì)期望事件注冊(cè)句柄來(lái)實(shí)現(xiàn)運(yùn)一點(diǎn)。句柄是當(dāng)特定事件被"拋 出"時(shí)運(yùn)行的軟件代碼。例如,當(dāng)用戶按下控制器100上的控制器按鈕時(shí),按鈕按下事件被拋 出。