前一篇文章 有大概介紹過微軟的 Kinect 這個新東西了~它的深度攝影機、以及他的衍伸應用,在最近也算是已經被發揚光大,應用非常多了。而這一篇呢,就來簡單講一下,要怎樣才能把 Kinect 裝到 PC 上,在 Windows 作業系統下使用吧~
基本上,Kinect 的訊號接頭雖然是特殊的 XBox 360 AUX 接頭,但是它實際上只是標準 USB 加上額外的電源而已;同時,在台灣買到的標準配件裡,也有附上把 AUX 接頭轉為 USB + 電源的線,所以要把 Kinect 接到 PC 上,並不需要做任何硬體、線路上的修改。下方左圖就是他的 AUX 接頭,而下方右圖就是官方附的轉接線,可以把 AUX 接頭轉換成一個標準 USB 接頭和一個電源插座。
但是由於微軟官方並沒有提供給 Windows 用的驅動程式,所以直接接上去後,是沒辦法直接使用的。為了要讓 Kinect 能讓 Windows 上正常運作,就要有修改過、給 Kinect 用的驅動程式才行了~而這些驅動程式基本上都不是官方的,也不只一種;目前比較有名的,應該是 OpenKinect 的 libfreenect(網頁 )和 OpenNI(網頁 ) 加上特製版的 SensorKinect(網頁 ) 這樣的架構。
而 Heresy 這邊是採用 OpenNI 這個架構來做的。使用這個架構的話,需要準備三樣東西:
OpenNI
OpenNI 的基礎 Framework。他基本上是一個跨平台的「自然互動」(Natural Interaction) 開放原始碼架構(open source framework),提供了一組標準的 API 來針對不同的裝置(目前應該也只有 Kinect)、中介軟體來做操作。 可以直接在 OpenNI 的官方網站 下載。目前最新版本為 1.0.0.23(檔名應該是「OPENNI-Win32-1.0.0.23.exe 」,直接下載連結 )。 SensorKinect
支援 OpenNI 的 Kinect 驅動程式,他是基於 PrimeSense 官方的版本、專門針對 Kinect 修改出來的;算是 OpenNI 的一部分,要先安裝 OpenNI 後才可安裝。 可以在 SensorKinect 的 github 頁面 下載(直接下載連結 ),下載後只需要裡面的「inSensorKinect-Win32-5.0.0.exe 」這個檔案。 NITE
由 PrimeSense 提供的 OpenNI 的中介軟體,負責分析 Kinect 抓到的資料,轉換為人體骨架、手勢等資料,如果只是想要讀取 Kinect 的深度資訊和影像資訊的話,其實可以不用安裝。 可以在 PrimeSense 的網頁 下載,最新版本為 1.3.0.17(檔名應該是「NITE-Win32-1.3.0.17.exe 」,直接下載連結 );安裝時需要授權碼,不過可以在 OpenNI 的網頁找到一組免費的(0KOIk2JeIBYClPWVnMoRKn5cdY4=)。
而當這些東西都準備好後,接下來就可以來安裝了!不過,不要急著把 Kinect 連結到電腦上,因為在之前先安裝軟體,會比較方便。而安裝的步驟,大致如下:
安裝 OpenNI
只要執行 OpenNI 的安裝檔(OPENNI-Win32-1.0.0.23.exe ) ,就可以完成安裝了~ 預設安裝位置會在「C:Program FilesOpenNI 」,裡面包含了開發 OpenNI 程式所必須的檔案、文件,也有一定數量的範例可以做測試。 安裝 SensorKinect
剛剛下載的檔案應該會是一個 ZIP 壓縮檔,解壓縮後,可以找到「inSensorKinect-Win32-5.0.0.exe」這個檔案,點兩下就可以進行安裝 了。 預設的安裝位置會是「C:Program FilesPrime SenseSensor 」,其中驅動程式就是在「Driver 」裡。 連接 Kinect 硬體
這時候,可以把 Kinect 的 USB 線接到 PC 上 了~ Kinect 的硬體分為三個裝置:Kinect Camera、Kinect Motor 和 XBox NUI Audio。其中 Kinect Camera 和 Kinect Motor 應該都可以直接找到驅動程式、並且自動完成安裝 ;但是目前因為沒有 XBox NUI Audio 的驅動程式,所以這樣裝置會無法正確安裝,不過基本上不重要。 右圖為安裝完成後,在裝置管理員裡看到的東西。 如果沒有自動找到驅動程式的話,請指定驅動程式路徑到剛剛安裝的 SensorKinect 的驅動程式所在路徑,預設會是「C:Program FilesPrime SenseSensorDriver 」。 測試 Kinect 是否可以正常使用
安裝 NITE
在上面四個步驟都成功後,基本上已經可以使用 Kinect 和 OpenNI 的基本功能了。但是如果要能夠透過 Kinect 分析場景、抓到人的骨架的話,則還需要額外安裝 NITE 這個 Middleware。 安裝的話,只要執行他的安裝檔案(NITE-Win32-1.3.0.17.exe),並且輸入 OpenNI 網頁上提供的免費授權碼 (0KOIk2JeIBYClPWVnMoRKn5cdY4=)就可以了。 另外要注意,由於 NITE 官方的範例是使用 320 x 240 的解析度,和 SensorKinect 預設的 640×480 不同,所以必須要修改設定檔,讓兩者相同。修改方法是用 Sensor「SampleXMLsNITEData」目錄內的所有 XML 檔案(三個),取代掉 NITE「Data」目錄內的 XML 檔 。 測試 NITE 是否可以正常使用
此時 NITE 提供給 OpenNI 的各項功能應該都已經可以正常運作了~而要測試的話,可以執行 NITE 本身的範例(執行檔位於 NITE 資料夾內的「SamplesBinRelease」目錄),或是 OpenNI 的範例程式。 Heresy 個人是建議可以試試看 OpenNI 的 NiUserTracker.exe 這隻程式(檔案預設會在「C:Program FilesOpenNISamplesBinReleaseNiUserTracker.exe」),他的執行畫面大致上會和下面的截圖一樣;他會用灰階的畫面來呈現深度資訊,同時會把畫面裏面有在動的物體抓出來,用不同的顏色來顯示。
另外,NITE 的範例 Sample-StickFigure.exe(預設檔案位置:「C:Program FilesPrime SenseNITESamplesBinReleaseSample-StickFigure.exe」)也是值得跑來試試看的程式。
這個範例程式是一個虛擬的 3D 場景,除了會去取出識別出來的區塊(上圖中不同的顏色就是不同的區塊)外,針對他認為是人的物體,也會去找出他的人體骨架(下圖橘色人形中的藍線),並進行追蹤。 而在使用上要注意的是,要讓 NITE 能抓到人的骨架,必須要先對著 Kinect 擺出 NITE 所定義的「校正姿勢」、並維持一段時間;這個姿勢基本上就是右圖的樣子(圖片取自 NITE 文件)。理論上擺出這個姿勢過一小段時間,NITE 就可以成功地找出骨架了;不過如果過了一段時間都還沒有出現的話,建議可以試著先把手放下來、重新再擺這個姿勢。
OK,到這邊為止如果都正確無誤的話,基本上就是代表整個 Kinect + OpenNI 的環境都架設成功了!而接下來,理論上就可以透過 OpenNI 的提供的東西,來寫自己要的程式了~
接下來,來玩點比較有趣的吧!這邊就以之前 也有提到過的 Miku Miku Dance 來玩看看 Kinect 吧!
Miku Miku Dance(簡稱 MMD,英文官方網站 、維基百科介紹 )這套軟體是基於要製作 Vocaloid 的初音未來(維基百科 )的跳舞影片而發展出來的軟體~而目前的最新版本,也已經可以支援使用 Kinect + OpenNI 來擷取、錄製動作了!有興趣的人,可以先參考官方的 YouTube 示範影片。
要做到這件事,首先是要先按照上面的步驟,確定 Kinect 和 OpenNI 都可以正常運作。而接下來,則是到官方網站 ,下載「MikuMikuDance 7.24 (DirectX9 Ver.)」(直接下載連結 )以及 DxOpenNI(直接下載連結 )。而在下載後,操作流程大致如下:
將兩者都解壓縮。 把 DxOpenNI 裡的 DxOpenNI.dll 和 SamplesConfig.xml 這兩個檔案,放到 MikuMikuDance 的 Data 目錄下。 執行 MikuMikuDance.exe(Windows 7 的話,可能要按右鍵,選取「以系統管理者身分執行」),其主視窗畫面如下: 接下來,可以透過下方褐色的「model manipulation」區塊裡的「load」按鈕(如圖 ),開啟位於「UserFileModel 」目錄下的模型檔案。 在讀取模型之後,畫面的顯示區域就會顯示出剛剛讀取的模型的樣子,以及他的關節了(如下圖)。 他預設會把模型的骨架、關節都顯示出來,按下藍色區塊「bone manipulation」的「select」鈕,可以取消選取,讓這些骨架和關節消失。 而其中,如果有讀取多個模型的話,「model manipulation」區塊的第一個下拉選單,也會有所有已經讀取的模型,可以讓使用者選擇現在要針對哪麼模型做操作。 而接下來,要使用 Kinect 來操作目前的腳色的話,請點選選單上「help」的「Kinect」;點下去後,MMD 會透過 DxOpenNI 來去呼叫 OpenNI、進一步讀取 Kinect 的畫面。這個可能要等一段時間,而等到抓到 Kinect 的畫面後,在畫面的右上方,就會出現不同顏色的區塊,代表 OpenNI 抓到的東西了~ 而這個時候和之前測試 NITE 的 Sample-StickFigure.exe 時一樣,請在 Kinect 能抓到整個人的情況下,擺出校正姿勢(如上圖),然後過一段時間,MMD 裡的腳色就會和你的動作同步了~而接下來,就是隨便動、隨便跳了! MMD 是有提供頭髮和衣物等的物理模擬功能,不過預設是在撥放模式才會進行模擬。如果希望在使用 Kinect 操作時也有物理模擬的話,請選擇選單「physical operation」裡的「anytime」,讓 MMD 在所有時間都會去計算物理效果。 如果想要把動作記錄下來的話,可以選擇選單「help」的「capture」,這樣就會把所有的活動過程都記錄下來。而再點選一次,則就會停止紀錄。而在擷取後要撥放的話,則是在畫面右下角的灰色「play」區塊,有一個「play」的按鈕,按下去就會開始播放剛剛的動作了~ 而要輸出結果的話,可以選則選單「file」的「render to AVI file」來做輸出的動作。 如果想看比較好的製作結果的話,可以透過選單的「file」-「open」,開啟位於 MMD 下「User」目錄裡的範例檔案(預設應該會有 sample.pmm 和 sample(AllStar).pmm 兩個),這是包含舞台、動作都編輯好的範例,按下「play」就可以看到別人做好的結果了~
在 MMD 中使用 Kinect 的簡易教學,大概就先講到這裡了。基本上,MMD 應該是目前對一般人來說,比較有趣、操作比較簡單的 Kinect 互動程式了~也基於這個原因,Heresy 才拿它來做展示;但是實際上,Heresy 自己對於這個程式也是一整個不熟,所以這邊的教學也僅只是紀錄如何在 MMD 裡使用 Kinect 而已。其他細部調整的部分,就請大家自己想辦法找教學了。 ^^"
而目前看來,要拿 Kinect 來做這類型的應用,可能還有幾個問題要處理:
OpenNI 目前能透過 NITE 抓到的人體骨架精細度有限。基本上,他能抓到就是單純的人的四肢,但是對於四肢的方向(例如手心向上或向下,或是頭面對的方向),就已經無能為力了,更別提手掌、手指的細部動作了。 雖然 Kinect 能取得深度資訊,可以比純粹使用 Webcam 抓到更好的人體骨架資訊,但是他同樣有光學上的死角;例如當你的手在背後的時候,就沒有辦法抓到手的動作了。這個問題理論上可以透過多組不同視角的 Kinect 來解決,不過就是還要自行做這樣的解決方案就是了。 上面這兩問題,或許有可能可以透過 OpenNI 的架構,寫一個更進階、計算複雜度更高的 middleware 來取代 NITE,但是這會是相當麻的一件事。 MMD 目前沒有處理碰撞的問題,所以目前取得的骨架資料,某些時候(比如說兩手非常接近的時候)可能會讓模型「打結」、甚至糾纏、交錯在一起。
簡單來說,Heresy 個人會覺得,現階段要用現成的東西、讓 Kinect 變成便宜、窮人版的 motion captrue 設備不是不可行的,但是當然,後續的微調還是得要費上不少力;但是相對於完全沒有 motion capture 來說,應該已經算是省掉許多工夫了~至少在大動作的部分,motion capture 是可以做到一定的水準,方便之後微調的;以 Heresy 非專業的眼光來看,這應該算是滿有價值的了。
原文地址:http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=6&PAPER_ID=212