2011年7月16日 星期六

日本微軟Kinect SDK研討會

「Kinect for Xbox 360」用於PC的SDK「Kinect for Windows SDK beta」舉辦了研討會「如何使用Kinect for Windows SDK」。Kinect for Windows SDK是微軟2011年6月16日公開的。在此次研討會上,日本微軟除了介紹SDK的概要和樣本代碼(Sample Code)並進行了現場演示外,還提到了富士軟體和Second Factory等公司利用SDK的案例。


Kinect SDK與OpenNI的差異

作為將Kinect用於PC的框架,除了純正的Kinect for Windows SDK外,微軟還擁有Kinect的距離圖像感測器開發商——以色列PrimeSense公司的開放原始碼「OpenNI」。在研討會上,Second Factory和日本微軟等介紹了Kinect for Windows SDK與OpenNI的不同之處。

OpenNI定義的介面將用戶各關節的位置(骨架)識別和手勢識別功能等作為組件分離出來,使其可分別作為中介軟體流通。而Kinect for Windows SDK將用戶追蹤等各種識別功能整合在了SDK內部。

另外,OpenNI「標配了擊打動作等多種手勢識別功能」(Second Factory),而Kinect for Windows SDK則沒有配備。利用骨架識別和追蹤功能,僅憑簡單的動作捕捉會漏掉動作,要想從用戶的動作和姿勢中識別到有意義的指令,必須通過Scratch安裝圖案識別演算法。

「Kinect不過是一款感測器。希望各位開發人員進行各種改進」(日本微軟),在此次的研討會上,作為SDK用戶登臺的Second Factory還表示,「希望能在SDK中嵌入標準的手勢識別功能。就目前而言,如果要安裝手勢識別功能,會增加開發負荷」。

能否實現在遊戲機上的識別功能?

目前的Kinect for Windows SDK只具備最基本的功能,而Xbox 360通過微軟的努力,已經實現了利用Kinect識別面部表情和手指動作(參閱本站報導)。今後,這些用於遊戲機的高度識別功能是否也能作為API在PC用SDK上實現(參閱本站報導),目前尚不清楚。

單是面向PC推出純正SDK就是一大進步,僅僅是基於骨架識別的動作捕捉用法就有望衍生出多種應用。不過,如果將來採用微軟研究院(Microsoft Research)研究成果等的純正手勢識別API和面部識別API等也推出用於PC的產品,那麼外部開發人員就不會想要安裝相同產品了。正因為發展藍圖尚未確定,此次的SDK僅限于非商用用途,不過正像Second Factory所說的那樣,如果不是由圖案識別專家而是由普通開發者通過Scratch來安裝識別功能,那麼過程會十分艱苦。

另外,在手勢識別研究中,圖案識別演算法一般採用「HMM(hidden Markov model,隱馬爾可夫模型)」等,但此次的研討會上並沒有提及這一話題。

骨架識別方面Kinect SDK的速度更快


關於Kinect for Windows SDK和OpenNI的差異,除了上一篇中介紹的之外還有以下幾點。例如,骨架識別速度方面,Kinect for Windows SDK要比OpenNI「快很多」(Second Factory)。另外,OpenNI一次只能獲得一隻手的資訊,因此難以安裝使用兩隻手的動作識別處理,但Kinect for Windows SDK可支援兩隻手。

OpenNI的優點除了上一篇中提到的標配手勢識別功能外,還包括(1)在未識別身體整體骨架的狀態下也可以識別手,因此「即使坐著也能識別手的動作」(Second Factory);(2)Kinect for Windows SDK的距離圖像可輸出85cm~400cm範圍的距離,而OpenNI即使是85cm以內的物體也能獲得距離,等等。

可連接2台Kinect

Kinect for Windows SDK可連接2台Kinect。不過,能獲得距離圖像的只有第一台,第二台只能獲得普通的RGB圖像。

距離圖像的獲得模式包括「UseDepth」和「UseDepthAndPlayerIndex」兩種。UseDepth只單純地將16bit的距離圖像作為灰色標度(Gray Scale)輸出,共有解析度為320×240和80×60的兩種。距離範圍為85cm~400cm。影像和高反射區域的畫素值為零,表示距離不確定。

UseDepthAndPlayerIndex用來輸出對各用戶進行區分後的距離圖像。畫素值為16bit,與UseDepth相同,不過UseDepthAndPlayerIndex的0~2bit中插入了表示用戶區別的指數值,其餘3~15bit為距離圖像(depth)。也就是說,按照不同用戶進行區分(區域分割),通過用戶ID進行了標記處理的距離圖像是UseDepthAndPlayerIndex。各畫素中的用戶指數值可用來只區分特定用戶和特定區域。沒有顯示用戶圖像的背景等區域的指數值為零。

最多可區分7名用戶

Kinect for Windows SDK的骨架識別功能最多可同時識別兩位用戶,但如果只是距離圖像上的用戶識別(區分),最多可識別7人。在會場上,微軟公開了實際在距離圖像上最多區分7名用戶並進行顯示的演示(照片1)。

骨架識別方面,Kinect for Windows SDK可識別20個關節的3D座標。雖然關節分佈在全身各處,但頭部只設定了1點,因此無法識別面部的朝向。

Kinect for Windows SDK還備有音頻功能。配備了語音識別功能,不過目前並不支援日語。利用Kinect安裝的四個麥克風陣列,可在左50°~右50°的範圍內推斷說話者的音源位置。

過度使用傾斜機構會發生異常

Kinect在傾斜方向配備了傳動器,可通過Kinect for Windows SDK控制攝影鏡頭的傾斜角(仰角)。不過,「如果過於頻繁地使用會發生異常。最多只能一秒鐘轉動一次」(日本微軟開發者與平臺統括本部程式員川西 裕幸)。

技術在線  2011/07/14 進藤 智則

相關連結

沒有留言:

張貼留言