前一篇文章有大概介紹過微軟的 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 頁面下載(直接下載連結),下載後只需要裡面的「\binSensorKinect-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 壓縮檔,解壓縮後,可以找到「\binSensorKinect-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 是否可以正常使用 
- 理論上,這個時候已經完成基本的安裝,可以透過 OpenNI 來讀取攝影機的資料了∼而此時 Kinect 上應該會有一個黃色的燈號開始閃爍。
- 要測試的話很簡單,可以到 OpenNI 的安裝路徑下,找到「SamplesBinRelease」這個資料夾(預設路徑會是「C:Program FilesOpenNISamplesBinRelease」),裡面有許多已經編譯好的測試程式可以拿來做初步的測試。不過由於有些程式需要其他模組,所以可能無法正常運作,Heresy 建議在這邊使用「NiViewer.exe」和「NiSimpleViewer.exe」這兩隻程式,來做初期的測試。
- 理論上,執行 「NiViewer.exe」後,應該就會看到用黃色來表示的深度畫面,以及彩色的攝影機畫面了(如下圖)∼而如果有出現這樣的畫面,就代表 OpenNI 和 Kinect 基本上可以正常運作了。(NiViewer 則只會有深度畫面,如圖)
- 另外要注意的是,OpenNI 程式的架構應該會呼叫一個 XnSensorServer 的程序,並且透過電腦內部的連線來取得裝置的資料;所以如果有安裝防火牆軟體的話,可能要注意一下相關的設定,以避免因為連線被防火牆擋掉,而無法正常使用。
- 安裝 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 非專業的眼光來看,這應該算是滿有價值的了。
小弟我照著步驟去做到了測試 Kinect 是否可以正常使用 點選了NiViewer.exe後出現無法找到程序輸入點xnProductionNodeRelease(在動態連結程式庫OpenNI,dll)為什麼
以及無法找到程序輸入點 xnUSBEnumerateDevices(在動態連結程式庫OpenNI.dll)希望大大幫助一下感激不盡>”
to Yuan您好,Heresy 個人是沒碰到過這個問題。不過,一月以後 SensorKinect 似乎有改版過,在他的 readme 裡有提到,需要搭配 unstable 版的 OpenNI / NITEhttps://github.com/avin2/SensorKinect/blob/unstable/README或許可以試試看把這兩者更新成最新的 unstable 試試看?
好吧 :cry:謝謝Heresy大大只是本身就是用最新版且搭配了搭配 unstable 版的 OpenNI / NITE 小弟我在想想辦法吧感激不盡
請問如何控制kinect的馬達?
to wise1 OpenNI 沒辦法喔∼要透過其他方案才行。
我想請問一下Yuan,你後來是怎麼解決的?因為我目前也遇到一模一樣的問題,還沒有找到解決辦法,我不是安裝unstable那版的,雖然桌機有安裝成功可是筆電一直跑出跟您一樣的問題。或者版主有什麼解決辦法嗎? 謝謝!!
您好想請教一下若是用Kinect作為MMD動作擷取的工具需要搭配XBOX嘛?還是只要單買Kinect即可?
to 楓雨聆如果只是要接 PC、透過 OpenNI 的話來存取的話,是不需要 XBox 360 遊戲主機的。
無法找到程序輸入點 xnUSBEnumerateDevices,我是忘了插电源,不知你是否如小弟这般傻。
小弟在安装完测试NITE时,NiUserTracker.exe 中并没有变色显示动的物体,在Sample-StickFigure.exe中也没有骨架。其他图像都有。请问,是不是NITE没装好啊
本人在xp下安装,是不是这个原因啊。xp能运行吗?
Winodws XP 應該是可以正常使用的。你的問題可能是 OpenGL 沒辦法正確使用,請試著更新顯示卡驅動程式試試看。
:cry:我用maya kincet openni 跟上面 yuan 哥们碰到了一样的问题 我一打开mayaopenni 就会跳出(无法定位程序输入点xnProductionNodeRelease于动态链接库OpenNI.dll上)谁能给点解决意见 啊
但是我用mikumiku 是正常的
@ maya人這類的問題應該是 OpenNI 和你的應用程式所需要的版本不同所造成的。建議請確認 mayaopenni 他所需要的 OpenNI 版本,改使用該版本的 OpenNI 再試試看。
請問我用一般電腦用的鏡頭,可以用得著這個軟件嗎?
to diely
不行喔~OpenNI 的人體骨架分析等功能主要是依靠深度感應器來做的,一般的 Webcam 做不到。
安装完kinect后,找不到驱动。
◦預設的安裝位置會是「C:Program FilesPrime SenseSensor」,其中驅動程式就是在「Driver」裡。根本没有Driver这个文件,请问是什么问题呢?
有说在安装NITE时候要输入官方的序列号,这个也没有找呢?麻烦大侠了
to 小磊
這篇的描述是針對舊版的 OpenNI 和 NITE,新版做了不少修改。驅動程式的位置已經移到別的地方(C:\Program Files \PrimeSense\SensorKinect\Driver),而且 NITE 已經不用輸入序號了。
谢谢!安装的时候都很顺利,还是没找到驱动,没有SensorKinect文件。
OpenNI-Win64-1.3.2.1-Dev
Sensor-Win64-5.0.3.3-Redist
NITE-Win64-1.4.0.5-Dev
问下,安装的上面几个有问题没?
to 小磊
文中有提到了,Kinect 要用的驅動程式不是官方版的驅動程式,而是要用 avin2 的 SensorKinect。
請問WIN7可以使用OPENNI 來做連結嗎
不然他一職找不到驅動程式
to judy
可以,如同之前的回答,請不要使用官方版的驅動程式,而是要用 avin2 的 SensorKinect。
如果有安裝其他 Kinect 的驅動程式,也請移除、或強制修改。
你好,如果已经有kinect 记录的人体运动的avi格式视频;如何用openni获取 人体的各个关节点;
看了您的不少博客,但是没有看到如何处理现成的视频资料的,谢谢
to logger2010
如果是現成的 AVI 的話,OpenNI 是無法直接處理的,他只能使用自己的 ONI 格式。
各位大大請問一下在測試 NITE 的時候 NiUserTracker.exe還有這個Sample-StickFigure.exe都沒有成功,這個釋出了甚麼問題??
———————————————–
下面是我安裝得版本
openni-bin-win32-v1.0.0.25
avin2-SensorKinect-b7cd39d
66_nite-win32-1.3.0.17
to 魯魯米
建議請將 OpenNI 更新到最新的版本
http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=6&PAPER_ID=317
另外,麻煩請提供錯誤的詳細狀況,單純獎無法執行,基本上很難做判斷。
to heresy
感謝你的幫忙
我知道那裡出的問題了
您好
敝姓辛,冒昧打擾。 近來個人在規劃利用 mocap 及 AR 技術來規劃一個個人娛樂系統的busines case,由您的部落格知道您對3D 繪圖及Kinect 的應用非常瞭解。不知是否有機會可向您請教此領域的問題,來了解此構想是否可在現有技術下商業化。 如您可撥冗讓我與您討論想法及規劃,個人很希望可拜訪您,您可用 email 或 電話讓我知道可拜訪您的時間,謝謝!
祝 商祈
辛宗鴻
mobile: 0917 252199
email: chsin@me.com
请问PC版的kinect安装流程和这个一样吗?
to llj
你是指 Kinect for Windows 感應器嗎?
如果是的話,你需要使用 unstable 版的 OpenNI 和 SensorKinect
目前測試上遇到了一點問題
基本上深度測試沒有問題
但是骨架上有問題
執行StickFigure.exe的時候只有顏色但是沒有骨架
MMD裡有小紅人但是模型不會跟著動
有想過是NITE的問題
但是感覺應該是微軟的驅動上可能有問題
不知版主有沒有什麼想法
to seed
這應該是 NiTE 沒辦法正確追蹤到人體骨架的關係。
建議先使用 StickFigure 來確認,看看怎樣才可以讓他抓到骨架。
不確定你是用哪個版本,不過早期的 OpenNI NiTE 需要擺出 PSI 姿勢才能進行骨架追蹤。
另外,可能也要考慮試著更換一下背景環境、距離、攝影機角度,再試試看。