用Kinect玩魔獸的影片小樽之前介紹過,沒看過的也沒關係小樽再貼一次
雖然看起來很酷,但肯定你不會想一直這樣玩WOW(笑),但是如果你希望有個很簡單、不用寫複雜的程式,就可以快速使用Kinect來做作品的工具,那你可能會想用這個Toolkit。這隻程式的背景是美國南加州大學 (University of Southern California, USC)創新科技研究所(Institute for Creative Technologies)的 MxR Lab所開發的FAAST(Flexible Action and Articulated Skeleton Toolkit),如果你玩過Wii時期的Wii Remote,你會發現它用起來就是那個意思。
因為協助老師課程的關係有提到這部分的簡易教學,因此順便把教學寫上來提供之後有興趣研究的朋友可以參考,FAAST提供OpenNI和Microsoft SDK的支援,由於OpenNI有版本、平台、位元等複合因素影響,有些程式換了版本就不能跑之類的現象,因此小樽在這裡選用了Microsoft官方的SDK方式來連結FAAST,因此按裝部分如下:
1.安裝Microsoft Kinect SDK 1.0版,官方的SDK截至2012年底最新版本是1.5,但1.5有許多功能是針對Kinect for PC版,如果你用的是XBOX360版本的Kinect請下載1.0就好
2.安裝完官方SDK後,請下載最新版的FAAST,節制2012年底,最新版本是1.0,而且有一段時間沒有更新了,應該算發展得差不多了,在此下載
嗯…沒有然後了,你已經裝完了,解壓縮後執行FAAST.exe會看到畫面如下
接著要使用的話,要注意因為我們這邊使用的是Microsoft Kinect SDK,所以要選擇Microsoft,然後按下Connect如下
如果安裝都沒有問題,就可以看到Kinect的深度畫面囉,如下圖
畫面中Kinect Motor Control可以讓你調整Kinect的馬達來控制仰角,只要選擇要調整角度後點一下Set Pitch,你就會發現Kinect動囉~
接下來就是要調整互動對應的方式,請切換頁籤來到Gestures(姿勢)的頁面,你會看到與姿勢設定有關的介面如下
接著我們來做最簡單的姿勢設定,例如我要讓跳耀的動作對應一個鍵盤的案件,首先我選擇New Gesture新增一個姿勢指令,會先彈出一個視窗為這個動作命名
之後會再姿勢列表看到新增的姿勢,其下方會有Input和Output兩個屬性
首先我們選了Input然後點選右方的Add,會發現出現一個下拉選單如下
這是FAAST提供辨識的姿勢動作群組列表,包括肢體、姿勢、角向、速度、時間五種可以綁定的動作群,以跳躍為例,請選擇第一個肢體綁定(Add body constrain),會彈出一個視窗如下
這裡特別一提,不同的動作會有不同的屬性設定,跳躍屬於比較單純的屬性,因此上圖只會看到高度單位,FAAST容許誤差試的變量偵測…畢竟大家也知道動作要吻合到100%是有困難的,我們容許誤差的產生,以小樽的設定來說便是跳躍超過10公分則判定輸入成立,語法非常直覺
接著來到Output的地方,按下Add一樣會出現許多動作如下
這裡是讓使用者可以自定義接受到指定的動作後要輸出的指令,可以是鍵盤滑鼠或FAAST的事件,真是設想非常周到阿(淚目),以小樽的範例來說,我希望我的人跳了一下就按一下鍵盤的空白建,所以我選擇了Add keyboard event,然後下個視窗當然也是因為輸入的動作類型不同會相異,下面這個視窗是我選擇對應”按下””空白鍵”
好~大功告成,請記得使用Save把你設定好的姿勢事件儲存起來~FAAST儲存的是xml檔,如果要啟動偵測請按Start Emulator~你就會看到訊息列開始有反應囉,接下來可以打開你的魔獸世界…我是說…你想對應輸入的程式,然後~跳一下~嗯~你就得到他了,沒有然後了,其他動作和事件就請依此類推吧。
下面表格是引用”用 FAAST 把 Kinect 當 Windows 鍵盤用!“這篇教學,有中文翻譯的些對應表
類型 | 動作名稱 | 意義 | 條件值(單位) |
---|---|---|---|
skeleton | lean_left | 身體左傾 | 身體左傾角度(度) |
lean_right | 身體右傾 | 身體右傾角度(度) | |
lean_forwards | 身體前傾 | 身體前傾角度(度) | |
lean_backwards | 身體後傾 | 身體後傾角度(度) | |
left_arm_forwards | 左手前伸 | 手到肩膀的距離(英寸) | |
left_arm_down | 左手放下 | 手到肩膀的距離(英寸) | |
left_arm_up | 左手舉起 | 手到肩膀的距離(英寸) | |
left_arm_out | 左手向左伸 | 手到肩膀的距離(英寸) | |
left_arm_across | 左手向右伸 | 手交錯過身體到肩膀的距離(英寸) | |
right_arm_forwards | 右手前伸 | 手到肩膀的距離(英寸) | |
right_arm_down | 右手放下 | 手到肩膀的距離(英寸) | |
right_arm_up | 右手舉起 | 手到肩膀的距離(英寸) | |
right_arm_out | 右手向右伸 | 手到肩膀的距離(英寸) | |
right_arm_across | 右手向左伸 | 手交錯過身體到肩膀的距離(英寸) | |
left_foot_forwards | 左腳往前 | 腳到左臀部的距離(英吋) | |
left_foot_sideways | 左腳往左 | 腳到左臀部的距離(英吋) | |
left_foot_backwards | 左腳往後 | 腳到左臀部的距離(英吋) | |
left_foot_up | 左腳舉起 | 左腳離地高度(英吋) | |
right_foot_forwards | 右腳往前 | 腳到右臀部的距離(英吋) | |
right_foot_sideways | 右腳往右 | 腳到右臀部的距離(英吋) | |
right_foot_backwards | 右腳往後 | 腳到右臀部的距離(英吋) | |
right_foot_up | 右腳抬起 | 右腳離地高度(英吋) | |
jump | 跳 | 雙腳離地高度(英寸) | |
walk | 走 | 行走時雙腳離地高度(英寸) | |
NITE | push | 推 | 速度(英吋/秒) |
swipe_up | 往上揮 | 速度(英吋/秒) | |
swipe_down | 往下揮 | 速度(英吋/秒) | |
swipe_left | 往左揮 | 速度(英吋/秒) | |
swipe_right | 往右揮 | 速度(英吋/秒) | |
circle | 畫圓 | 半徑(英寸) | |
wave | 揮手 | 無(請填 0) |
上面列表中NITE是必須使用NITE的程式和驅動才能運作的部分,是針對手勢辨識,另外此教學使用的是Kinect of XBOX360的硬體,For PC的SDK1.5是否也可以正常無誤的運作,歡迎有常識經驗的朋友回報提供資訊。
此教學非常精簡~而且程式也很穩定,但你會發現他非常吃資源~沒錯,就算你沒接上Kinect光啟動FAAST本身就會發現系統資源持續被消耗,有得必有失~既然UI設計得如此強大,他也必須預測你所有有可能需要運算的工作,不然~就請自己開發吧XD,官方有說它們支援Unity3D的搭配方案,就小樽所知台灣有許多打著體感為賣點的計畫案也是用這套”非開放原始碼”的現成程式~至於評論我就不多說了,歡迎有興趣的朋友自行嘗試囉:D
有問題可以到官方網站洽詢
12/8日在巴哈姆特站聚上我有提供試玩
下列是示範
http://forum.gamer.com.tw/C.php?page=1&bsn=16862&snA=1692
目前卡在多人骨架指定追蹤,想多人同樂