在 WIndows 上安裝 Kinect(含 MMD 使用 Kinect 簡易教學)


前一篇文章有大概介紹過微軟的 Kinect 這個新東西了~它的深度攝影機、以及他的衍伸應用,在最近也算是已經被發揚光大,應用非常多了。而這一篇呢,就來簡單講一下,要怎樣才能把 Kinect 裝到 PC 上,在 Windows 作業系統下使用吧~

基本上,Kinect 的訊號接頭雖然是特殊的 XBox 360 AUX 接頭,但是它實際上只是標準 USB 加上額外的電源而已;同時,在台灣買到的標準配件裡,也有附上把 AUX 接頭轉為 USB + 電源的線,所以要把 Kinect 接到 PC 上,並不需要做任何硬體、線路上的修改。下方左圖就是他的 AUX 接頭,而下方右圖就是官方附的轉接線,可以把 AUX 接頭轉換成一個標準 USB 接頭和一個電源插座。

 

但是由於微軟官方並沒有提供給 Windows 用的驅動程式,所以直接接上去後,是沒辦法直接使用的。為了要讓 Kinect 能讓 Windows 上正常運作,就要有修改過、給 Kinect 用的驅動程式才行了~而這些驅動程式基本上都不是官方的,也不只一種;目前比較有名的,應該是 OpenKinect 的 libfreenect(網頁)和 OpenNI(網頁) 加上特製版的 SensorKinect(網頁) 這樣的架構。

下面基本上就是搭配 OpenNI 安裝 Kinect 的教學。不過,請注意!OpenNI 改版後,不管是檔案的下載連結、碩安裝的方法,都有一些變化~下方的教學已經不適用,建議請參考重新寫過的《2012 OpenNI 環境/Kinect 安裝教學》一文。

而 Heresy 這邊是採用 OpenNI 這個架構來做的。使用這個架構的話,需要準備三樣東西:

  1. OpenNI
    • OpenNI 的基礎 Framework。他基本上是一個跨平台的「自然互動」(Natural Interaction) 開放原始碼架構(open source framework),提供了一組標準的 API 來針對不同的裝置(目前應該也只有 Kinect)、中介軟體來做操作。
    • 可以直接在 OpenNI 的官方網站下載。目前最新版本為 1.0.0.23(檔名應該是「OPENNI-Win32-1.0.0.23.exe」,直接下載連結)。
  2. SensorKinect
    • 支援 OpenNI 的 Kinect 驅動程式,他是基於 PrimeSense 官方的版本、專門針對 Kinect 修改出來的;算是 OpenNI 的一部分,要先安裝 OpenNI 後才可安裝。
    • 可以在 SensorKinect 的 github 頁面下載(直接下載連結),下載後只需要裡面的「\bin\SensorKinect-Win32-5.0.0.exe」這個檔案。
  3. NITE
    • 由 PrimeSense 提供的 OpenNI 的中介軟體,負責分析 Kinect 抓到的資料,轉換為人體骨架、手勢等資料,如果只是想要讀取 Kinect 的深度資訊和影像資訊的話,其實可以不用安裝。
    • 可以在 PrimeSense 的網頁下載,最新版本為 1.3.0.17(檔名應該是「NITE-Win32-1.3.0.17.exe」,直接下載連結);安裝時需要授權碼,不過可以在 OpenNI 的網頁找到一組免費的(0KOIk2JeIBYClPWVnMoRKn5cdY4=)。

而當這些東西都準備好後,接下來就可以來安裝了!不過這邊要注意一下,這些軟體目前都有比較新的 unstable 版,建議看完這篇文章後,再參考《OpneNI + Kinect unstable 版安裝更新(2011/01)》,下載新的 unstable 版來安裝!

不過,不要急著把 Kinect 連結到電腦上,因為在之前先安裝軟體,會比較方便。而安裝的步驟,大致如下:

  1. 安裝 OpenNI
    • 只要執行 OpenNI 的安裝檔(OPENNI-Win32-1.0.0.23.exe,就可以完成安裝了~
    • 預設安裝位置會在「C:\Program Files\OpenNI」,裡面包含了開發 OpenNI 程式所必須的檔案、文件,也有一定數量的範例可以做測試。
  2. 安裝 SensorKinect
    • 剛剛下載的檔案應該會是一個 ZIP 壓縮檔,解壓縮後,可以找到「\bin\SensorKinect-Win32-5.0.0.exe」這個檔案,點兩下就可以進行安裝了。
    • 預設的安裝位置會是「C:\Program Files\Prime Sense\Sensor」,其中驅動程式就是在「\Driver」裡。
  3. 連接 Kinect 硬體 
    • 這時候,可以把 Kinect 的 USB 線接到 PC 上了~
    • Kinect 的硬體分為三個裝置:Kinect Camera、Kinect Motor 和 XBox NUI Audio。其中 Kinect Camera 和 Kinect Motor 應該都可以直接找到驅動程式、並且自動完成安裝;但是目前因為沒有 XBox NUI Audio 的驅動程式,所以這樣裝置會無法正確安裝,不過基本上不重要。
    • 右圖為安裝完成後,在裝置管理員裡看到的東西。
    • 如果沒有自動找到驅動程式的話,請指定驅動程式路徑到剛剛安裝的 SensorKinect 的驅動程式所在路徑,預設會是「C:\Program Files\Prime Sense\Sensor\Driver」。
  4. 測試 Kinect 是否可以正常使用 
    • 理論上,這個時候已經完成基本的安裝,可以透過 OpenNI 來讀取攝影機的資料了~而此時 Kinect 上應該會有一個黃色的燈號開始閃爍。
    • 要測試的話很簡單,可以到 OpenNI 的安裝路徑下,找到「Samples\Bin\Release」這個資料夾(預設路徑會是「C:\Program Files\OpenNI\Samples\Bin\Release」),裡面有許多已經編譯好的測試程式可以拿來做初步的測試。不過由於有些程式需要其他模組,所以可能無法正常運作,Heresy 建議在這邊使用「NiViewer.exe」和「NiSimpleViewer.exe」這兩隻程式,來做初期的測試。
    • 理論上,執行 「NiViewer.exe」後,應該就會看到用黃色來表示的深度畫面,以及彩色的攝影機畫面了(如下圖)~而如果有出現這樣的畫面,就代表 OpenNI 和 Kinect 基本上可以正常運作了。(NiViewer 則只會有深度畫面,如圖
    • 另外要注意的是,OpenNI 程式的架構應該會呼叫一個 XnSensorServer 的程序,並且透過電腦內部的連線來取得裝置的資料;所以如果有安裝防火牆軟體的話,可能要注意一下相關的設定,以避免因為連線被防火牆擋掉,而無法正常使用
  5. 安裝 NITE 
    • 在上面四個步驟都成功後,基本上已經可以使用 Kinect 和 OpenNI 的基本功能了。但是如果要能夠透過 Kinect 分析場景、抓到人的骨架的話,則還需要額外安裝 NITE 這個 Middleware。
    • 安裝的話,只要執行他的安裝檔案(NITE-Win32-1.3.0.17.exe),並且輸入 OpenNI 網頁上提供的免費授權碼(0KOIk2JeIBYClPWVnMoRKn5cdY4=)就可以了。
    • 另外要注意,由於 NITE 官方的範例是使用 320 x 240 的解析度,和 SensorKinect 預設的 640×480 不同,所以必須要修改設定檔,讓兩者相同。修改方法是用 Sensor「\SampleXMLs\NITE\Data\」目錄內的所有 XML 檔案(三個),取代掉 NITE「\Data\」目錄內的 XML 檔
  6. 測試 NITE 是否可以正常使用 
    • 此時 NITE 提供給 OpenNI 的各項功能應該都已經可以正常運作了~而要測試的話,可以執行 NITE 本身的範例(執行檔位於 NITE 資料夾內的「\Samples\Bin\Release\」目錄),或是 OpenNI 的範例程式。
    • Heresy 個人是建議可以試試看 OpenNI 的 NiUserTracker.exe 這隻程式(檔案預設會在「C:\Program Files\OpenNI\Samples\Bin\Release\NiUserTracker.exe」),他的執行畫面大致上會和下面的截圖一樣;他會用灰階的畫面來呈現深度資訊,同時會把畫面裏面有在動的物體抓出來,用不同的顏色來顯示。
    • 另外,NITE 的範例 Sample-StickFigure.exe(預設檔案位置:「C:\Program Files\Prime Sense\NITE\Samples\Bin\Release\Sample-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(直接下載連結)。而在下載後,操作流程大致如下:

  1. 將兩者都解壓縮。
  2. 把 DxOpenNI 裡的 DxOpenNI.dll 和 SamplesConfig.xml 這兩個檔案,放到 MikuMikuDance 的 Data 目錄下。
     
  3. 執行 MikuMikuDance.exe(Windows 7 的話,可能要按右鍵,選取「以系統管理者身分執行」),其主視窗畫面如下:
  4. 接下來,可以透過下方褐色的「model manipulation」區塊裡的「load」按鈕(如圖),開啟位於「\UserFile\Model」目錄下的模型檔案。
     
  5. 在讀取模型之後,畫面的顯示區域就會顯示出剛剛讀取的模型的樣子,以及他的關節了(如下圖)。
    他預設會把模型的骨架、關節都顯示出來,按下藍色區塊「bone manipulation」的「select」鈕,可以取消選取,讓這些骨架和關節消失。

    而其中,如果有讀取多個模型的話,「model manipulation」區塊的第一個下拉選單,也會有所有已經讀取的模型,可以讓使用者選擇現在要針對哪麼模型做操作。
     
  6. 而接下來,要使用 Kinect 來操作目前的腳色的話,請點選選單上「help」的「Kinect」;點下去後,MMD 會透過 DxOpenNI 來去呼叫 OpenNI、進一步讀取 Kinect 的畫面。這個可能要等一段時間,而等到抓到 Kinect 的畫面後,在畫面的右上方,就會出現不同顏色的區塊,代表 OpenNI 抓到的東西了~

    而這個時候和之前測試 NITE 的 Sample-StickFigure.exe 時一樣,請在 Kinect 能抓到整個人的情況下,擺出校正姿勢(如上圖),然後過一段時間,MMD 裡的腳色就會和你的動作同步了~而接下來,就是隨便動、隨便跳了!
     
  7. MMD 是有提供頭髮和衣物等的物理模擬功能,不過預設是在撥放模式才會進行模擬。如果希望在使用 Kinect 操作時也有物理模擬的話,請選擇選單「physical operation」裡的「anytime」,讓 MMD 在所有時間都會去計算物理效果。
     
  8. 如果想要把動作記錄下來的話,可以選擇選單「help」的「capture」,這樣就會把所有的活動過程都記錄下來。而再點選一次,則就會停止紀錄。而在擷取後要撥放的話,則是在畫面右下角的灰色「play」區塊,有一個「play」的按鈕,按下去就會開始播放剛剛的動作了~
    而要輸出結果的話,可以選則選單「file」的「render to AVI file」來做輸出的動作。
     
  9. 如果想看比較好的製作結果的話,可以透過選單的「file」-「open」,開啟位於 MMD 下「User」目錄裡的範例檔案(預設應該會有 sample.pmm 和 sample(AllStar).pmm 兩個),這是包含舞台、動作都編輯好的範例,按下「play」就可以看到別人做好的結果了~

在 MMD 中使用 Kinect 的簡易教學,大概就先講到這裡了。基本上,MMD 應該是目前對一般人來說,比較有趣、操作比較簡單的 Kinect 互動程式了~也基於這個原因,Heresy 才拿它來做展示;但是實際上,Heresy 自己對於這個程式也是一整個不熟,所以這邊的教學也僅只是紀錄如何在 MMD 裡使用 Kinect 而已。其他細部調整的部分,就請大家自己想辦法找教學了。 ^^"

而目前看來,要拿 Kinect 來做這類型的應用,可能還有幾個問題要處理:

  1. OpenNI 目前能透過 NITE 抓到的人體骨架精細度有限。基本上,他能抓到就是單純的人的四肢,但是對於四肢的方向(例如手心向上或向下,或是頭面對的方向),就已經無能為力了,更別提手掌、手指的細部動作了。
     
  2. 雖然 Kinect 能取得深度資訊,可以比純粹使用 Webcam 抓到更好的人體骨架資訊,但是他同樣有光學上的死角;例如當你的手在背後的時候,就沒有辦法抓到手的動作了。這個問題理論上可以透過多組不同視角的 Kinect 來解決,不過就是還要自行做這樣的解決方案就是了。
     
  3. 上面這兩問題,或許有可能可以透過 OpenNI 的架構,寫一個更進階、計算複雜度更高的 middleware 來取代 NITE,但是這會是相當麻的一件事。
     
  4. MMD 目前沒有處理碰撞的問題,所以目前取得的骨架資料,某些時候(比如說兩手非常接近的時候)可能會讓模型「打結」、甚至糾纏、交錯在一起。

簡單來說,Heresy 個人會覺得,現階段要用現成的東西、讓 Kinect 變成便宜、窮人版的 motion captrue 設備不是不可行的,但是當然,後續的微調還是得要費上不少力;但是相對於完全沒有 motion capture 來說,應該已經算是省掉許多工夫了~至少在大動作的部分,motion capture 是可以做到一定的水準,方便之後微調的;以 Heresy 非專業的眼光來看,這應該算是滿有價值的了。


OpenNI / Kinect 相關文章目錄

對「在 WIndows 上安裝 Kinect(含 MMD 使用 Kinect 簡易教學)」的想法

  1. Heresy您好:
    我對kinetic不太了解,但修了一堂需要實作的課程。目前的要求是要讓人在攝影機前面擺出擁抱的姿勢,而螢幕裡面的機器人也辨識出擁抱的動作,進而也做出擁抱的動作。請問這樣子的要求可以用您的教學辦到嗎><

  2. 我想請問一下裡面的轉接器是變壓器嗎?
    那個也可接電腦嘛?
    我網路上看到的是寫變壓器不確定可否接電腦 (變壓器跟大大的一樣
    請大大幫解答!!

      • Heresy您好;
        我的問題是(AUX 接頭轉為 USB + 電源的線)這裡是變壓器嘛!!
        因為我買得好像不適電腦版要再買轉接頭,在網路上看到和您一樣的轉接頭卻標明是轉接器!!
        因此想詢問是一樣可接電腦嗎?
        網路上賣的:http://www.pcstore.com.tw/longzhao/M08920422.htm
        深怕買來無法使用!!

  3. Heresy您好:
    我下載使用MikuMikuDance 64bit的版本,照步驟操作後會出現GetProcAddress:193:%1 不是正確的Win32應用程式,也跳出OpenNI might be failed install。請問此測試只能在1.X版本運行嗎?還是因為Windows x64 版的 NiTE 2.2.0.11 和 OpenNI 2.2 不相容導致?謝謝

  4. Heresy您好:
    我對電腦一竅不通,但因公司需求,想向你請教一個問題。
    用window寫openi的體感程式後,我可以把這個體感程式轉用linux使用嗎?

    • OpenNI 本身是跨平台的 SDK,但是使用它寫出來的程式是否可以跨平台,也還要看你其他使用的開發環境、函示庫。
      如果一開始就有注意平台問題的話,是可以把程式寫成可以在 Linux 和 Windows 上運作的。

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料