FAAST-用Kinect製作體感互動或遊戲之簡易教學

用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提供OpenNIMicrosoft 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

有問題可以到官方網站洽詢