Kinect+OpenNI+Maya之超划算MOCAP(?)

如果你是有在關注電玩訊息的朋友,應該很早就關注過XBOX360的Kinect的發展,在微軟一開始拋出一連串美好的廣告影片後,大家〈包含我XD〉都很懷疑有沒有這麼厲害~?影像辨識如何在沒有前置設定的狀態下迅速又輕易的捕捉到人體的姿勢手勢,當Kinect一出…馬上造成熱潮,起碼大方向來說微軟真的做到了,因為他單套件是USB傳輸,很快就有人把他接到電腦上開發了一堆程式…當時讓我覺得可以敗下去了的是Kinect打魔獸這支影片吧XD。

當然可以研究互動新技術又可以打電動當然就一定要敗囉,先大推一下XBOX360+Kinect的經典遊戲之一Dance Central〈很久沒寫文章了所以要貼下影片XD〉

這塊遊戲可以讓你體驗到Kinect的辨識度,當然這裡也要稍微解釋一下Kinect這個技術創意點,以往的影像辨識技術都是使用單一攝影機捕捉單一影像,接著多半是將影像二值化處理以後,依照不同的演算法將要捕捉的物體的輪廓抽取出來,但是這樣的邏輯前提都是背景和前景要能很迅速的被分析出來,而且很容易因為有其他物件進入而錯亂,Kinect之所以很讚的地方是,他是應用兩個攝影機產生類似視差的效果,讓兩個影片重疊起來便可計算出相對物件的距離和輪廓,可以很快速的把前景抽取出來並且相對又不擔心其他物件亂入,因為這樣的計算邏輯所有單獨的物體都不會重疊在一起〈當然如果你硬要拿東西在手上或黏在身上另當別論〉,因此再針對人的輪廓的辨識演算法鑽研一下…一套成功的應用商品就這樣誕生了。

既然他可以很輕易的捕捉”人”,那我可以不可以直接把人跟骨架直接建立關係,網路上有很多強者開發了很多for kinect的程式,今天要寫得就是運用OpenNI的工具連動Maya做為MOCAP的案例,如果你有一台Kinect可以參考網路上的這篇教學先安裝基本環境。

安裝完這篇教學的內容後,你至少可以看到運算出基本骨架的結果,基本上Kinect + OpenNI這一段已經告一段落,接下來的步驟這篇文章是提到傳到Maya,但是只要你有心~國外也已經有人將他導到motionbuilder,就請自行research囉。

將Kinect+OpenNI捕捉到的骨架數值傳送到Maya需要有一個中介的程式,於是有強者寫了一套Maya OpenNI Server的工具,其官方影片如下

下載這隻程式,解壓縮以後直行他底下的/bin/MayaOpenNIServer.exe,在介面上可以看到Kinect的分析畫面,如果他辨識出兩個或以上的獨立物體,會用不同的色塊表示,灰黑色的地方都是被視為背景,請參照第一篇教學底部的歸零動作,讓程式捕捉到你的骨架,接著按下”Start server”,此時骨架的位置數據將會不斷的透過server上的port(預設9999)丟出來,而Maya做的事情其實就是去”接”數值,並把數值直接丟給控制器。

你可以把/MayaScript下的兩隻mel丟到Maya的Script資料夾下,就可以直接在maya介面上叫出連結程式,程式內的說明檔會告訴你先按Make Nulls之後在按Connect,前一個動作直行的時候就會產生一組控制器,連結後這些控制器就會隨著接收到的值移動,所以如果你想要及時控制你的角色做Mocap,就請按照程式建立的控制器替自己角色的對應位置的控制器命名,之後直接案Connect即可…之後該怎麼做~就自行發揮吧。

在此感謝星木映像的強者正揚的資訊提供,下面是該公司的測試及應用結果

最後~雖說這是便宜(窮人)版MOCAP救星,但還是有一些需要注意的地方,首先他的骨架就如各位看官所見非常簡單,手指腳掌一概沒有~以Maya而言就請避開或者運用Animation Layer另外做,其次他不像一般專門的MOCAP程式有自動或手動的修正功能,所以包括一些程式判定產生的抖動會因辨識環境產生,這種key修起來可能相對麻煩,但是如果當作條動畫用的表演參考是個很不錯的選擇,而除了Kinect以外也有Mocap專門公司已經要使用相同的影像辨識原理製作專門的Mocap軟體…畢竟~比起傳統光纖或光學式動態捕捉設備,影像辨識設備如果能做到大部分可達成的功能~應該是中小型工作室不錯的選擇哩。