2012 OpenNI 環境/Kinect 安裝教學

一年多前,Heresy 有寫了一篇《在 WIndows 上安裝 Kinect(含 MMD 使用 Kinect 簡易教學)》,算是在當時針對第一個版本的 OpenNI、NITE,以及 Microsoft Kinect 的安裝做教學。

不過到現在,OpenNI 的版本已經從 1.0.x 進版到 1.5.x 了,在模組、路徑上,其實都有相當程度的變更。雖然後來也有更新過一次(參考),不過可能還是不夠新,所以現在再來針對現在的最新版本,來寫一個比較完整的吧。

Windows 環境安裝 OpenNI

首先,先針對一般在 Windows 上,只需要到 OpenNI 官方網站(連結),在網站的上方有「Downloads」的字樣,把滑鼠游標移過去會出現選單(下圖紅色的圈),點選選單裡的「OpenNI Modules」、就可以進入下載頁面了(頁面)。

下載頁面裡,「Select downloads option」(選取下載選項)下面有三個下拉選單,需要依序選取(右圖)。

在這邊的前兩個欄位、依序選取「OpenNI Package」、「Stable」,這樣第三個欄位就會有給 Windows 的安裝套件可以選了。

一般使用者

對於只是想跑有用到 OpenNI 程式(例如 MMD)、但是沒有要進行程式開發的人來說,如果是 32 位元的 Windows 作業系統的話,就請選取「PrimeSense Package Stable Build for Windows x86 (32-bit) v20.4.2.20 Redist Edition」(版本編號可能會因為時間而有所變化);選好之後,按下方的「Download」按鈕,就可以進行下載了。下載之後,請執行這個安裝檔,並一直按「Next」,這樣就會把 OpenNI 和 NITE 必要的檔案都安裝完成了。

而如果是使用 64 位元的 WIndows 的話,則建議請下載「PrimeSense Package Stable Build for Windows x64 (64-bit) v20.4.2.20 Redist Edition」這個版本;他會同時安裝 32 位元和 64 位元的版本,這樣遇到 32 位元或 64 位元的程式,都可以使用。

程式開發者

而如果是要進行 OpenNI 程式開發的話,則不能使用「Redist Edition」,要使用「Development Edition」。「Development edition」和「Redist edition」的不同,在於「Redist edition」是給一般用戶用的,只包含了執行 OpenNI 時必要性的檔案;而「Development edition」則是給開發人員用的,檔案比較大,除了必要的內部元件外,還包含了開發程式需要的檔案、文件、以及範例等等東西。而由於「Development edition」包含了「Redist edition」的所有檔案,所以如果有安裝「Development edition」的話,就不用額外安裝「Redist edition」了。

而和 Redist Edition 版本一樣,如果是使用 32 位元的作業系統的話,就請選擇 32 位元的「PrimeSense Package Stable Build for Windows x86 (32-bit) v20.4.2.20 Development Edition」;而如果是使用 64 位元 Windows 作業系統的話,則建議請選擇 64 位元用的「PrimeSense Package Stable Build for Windows x64 (64-bit) v20.4.2.20 Development Edition」、同時安裝 32 位元和 64 位元的版本。


硬體安裝

ASUS Xtion PRo 系列

如果是使用 ASUS Xtion Pro 系列的產品的話,由於他是 OpenNI 官方相容的硬體,所以理論上直接把 Xtion Pro 接到 USB 上,就可以抓到驅動程式並且使用了!在安裝完驅動程式後,在裝置管理員裡面,應該可以看到「PrimeSense」的類別下,有一個「PrimeSense PS1080」(如右圖),這就代表有這卻抓到硬體了!

而如果系統沒有自動抓到驅動程式、而需要手動指定驅動程式所在位置的話,OpenNI 所提供的驅動程式預設是會在「C:\Program Files\OpenNI\Driver」,理論上應該只要指定這個資料夾,Windows 就可以找到對應的驅動程式了。

Microsoft Kinect for Xbox360

不過如果是使用 Microsoft Kinect for Xbox 360 的話,官方的驅動程式並不能直接支援,還需要另外去安裝修改過的驅動程式!目前一般都是使用 avin2 這位網友所修改出來的「SensorKinect」模組,他的網頁是

https://github.com/avin2/SensorKinect

在這個頁面裡面,點選「Bin」後,就可以看到已經編譯、封包完成的 SensorKinect 硬體模組的安裝檔(頁面);而如果是一般使用的 32 位元的話,就是點選「SensorKinect091-Bin-Win32-v5.1.0.25.msi」進入頁面下載,64 為原則就是點選「SensorKinect091-Bin-Win64-v5.1.0.25.msi(一樣,版本編號可能會變化)來下載。

不過不熟系 github 的人可能點進去了也不知道要怎麼下載,所以這邊再補充一下,在 github 進入單一檔案的頁面後,在右下方會有「RAW」和「History」兩個按鈕,這時候只要按下「RAW」就可以下載檔案了!(下圖紅色圈的部分)

而下載後,執行下載完成的安裝檔,就可以安裝 Kinect 專用的 OpenNI 硬體模組以及驅動程式了。不過要注意的是,由於硬體模組需要有 OpenNI 的平台才能安裝,所以請先安裝好 OpenNI 的環境再來安裝 SensorKinect,這樣才不會出問題。

都裝好後,接上 Kinect 後,理論上就會抓到三個硬體;在裝置管理員裡,在「PrimeSense」的類別下,會有三個裝置:「Kinect Audio」、「Kinect Camera」、「Kinect Motor」。如果都有抓到的話,就代表硬體都安裝成功了。

而如果沒有自動找到驅動程式的話,可以手動去指定驅動程式所在的路徑,預設是會在:「C:\Program Files\PrimeSense\SensorKinect\Driver」。

不過另外要注意的是,目前 SensorKinect 應該無法使用在新的 Kinect for Windows 硬體上的,可能要等新版的驅動程式會不會對此做修改了。


測試

理論上,OpenNI 環境裝好、硬體也抓到了,要使用 OpenNI 感應器的環境應該就已經就緒了~而接下來,就是要執行 OpenNI 的程式、來做測試了!如果是安裝「Development edition」的話,在程式集裡面應該可以找到一個「NiViewer」的官方範例,可以用來做測試之用。

他執行起來應該會是全螢幕、像下面這樣子:

左上方黃色的部分就是深度影像、右上方就是彩色影像了。基本的操作,包括了:按「Esc」可以離開程式、「f」可以在全螢幕和視窗模式間做切換,滑鼠右鍵可以叫出進一步控制的選單。

如果是安裝「Redist edition」的話,則沒有這個官方範例可以做測試,所以就只能看要用什麼程式,直接拿它來做測試了。

如果無法正常使用的話,可能要注意的有幾點:

  1. OpenNI 程式的架構應該會呼叫一個 XnSensorServer 的程序,並且透過電腦內部的連線來取得裝置的資料;所以如果有安裝軟體防火牆的話,可能要注意一下相關的設定,以避免因為內部的連線被防火牆擋掉,而無法正常使用。

  2. Microsoft Kinect for Xbox 360 基本上比較挑 USB port,所以有可能會差上去沒反應、或無法正常使用;如果遇到不明問題,建議先換接到別的 USB Port 上試試看。同時,也建議不要透過 USB Hub、而是直接接到主機板的 USB port 上。

  3. 官方的硬體模組/驅動程式可以和 avin2 的 SensorKinect 同時安裝不會有問題,但是 ASUS Xtion Pro 和 Kinect for Xbox 360 無法同時使用,驅動程式會衝突,後面接上去的裝置會錯誤。

  4. NiViewer 等官方範例基本上都是用 OpenGL 來做顯示的,如果顯示卡驅動程式沒有正確安裝的話,可能會無法正確顯示;如果遇到城市可以執行,但是沒有正確的畫面的話,建議檢查一下顯示卡驅動程式是否有正確安裝。

  5. 如果是 Direct 3D 的程式、遇到缺少 d3d9_24 dll 這類的檔案的話,請至微軟網站下載 Direct X 線上安裝程式進行更新。


一些細節

前面基本上是先根據下載、安裝的部分,直接做說明;接下來,來講一些細節的部分。

首先,OpenNI 的環境主要包括三個部分:OpenNI 本身的框架分析演算法的 Middleware、以及硬體模組;基本上,應該是這三種東西都安裝好了,才算把整個 OpenNI 環境建立完成。下方就是這三者的簡易說明:

OpenNI 本身的框架

由 OpenNI.org 提供的 OpenSource 軟體,可以在 github 上找到他的原始碼(連結);不過對一般人來說,應該都是下載 OpenNI.org 提供、已經編譯好的 binary 就可以了。他基本上是 OpenNI 的平台,所有程式都是透過這個框架、來對裝置、middleware 做存取、控制的。

要注意的是,安裝的時候,OpenNI 一定是要最先安裝、最晚移除的,這樣才能新增、移除其他的 middleware 和硬體模組。另外實際上,安裝 OpenNI 的同時應該就已經安裝了公版的驅動程式了。

分析演算法的 Middleware

OpenNI 的框架本身算是空的,像是人體骨架分析、手勢辨識等這些功能都只有設計一個介面在那、並沒有實作;而要真的能用這些分析功能,就必須要額外安裝這些演算法的 Middleware。

目前基本上都是安裝 PrimeSense 所提供的 NITE,他裡面包含了目前所需要的各種分析的演算法,不過他不是 OpenSource 的,所以沒有原始碼可以看、只能下載編譯好的 binary。如果之後有其他的 Middleware 的話,也可以安裝其他 Middleware 來使用。

硬體模組

對應不同的 OpenNI 相容硬體所需要的模組,要有安裝這個模組,OpenNI 才能對對應的硬體進行控制。

目前的硬體不管是 Microsoft Kinect 還是 Asus 的 Xtion Pro 系列,都是使用 PrimeSense 的感應器;而 PrimeSense 官方有針對由自家的感應器放出公版的驅動程式及 OpenNI 硬體模組的原始碼(連結)。

和 OpenNI 一樣,一般人應該都不需要去使用原始碼,而可以直接使用官方提供、編譯好的 binary 就可以了。不過要注意的是,公版驅動程式和感應器模組並不適用於 Microsoft Kinect!如果要使用 Microsoft Kinect 的話,是需要使用修改過的版本的。

而在前面「Windows 環境安裝 OpenNI」的部分所使用的「OpenNI Package」的安裝檔,實際上是把這三樣東西都包在一起,方便使用者安裝而已~在早期,其實都是要分別下載安裝的。實際上,目前官方下載頁面裡,也都還有提供原始碼下載(頁面)、以及上述三者的檔案各自下載的功能。

在下載頁面裡,「Select downloads option」下面有三個下拉選單,第一層選單就是用來選要下載哪類的東西的,它包含了五種選項:

  • OpenNI Binaries
  • OpenNI Compliant Middleware Binaries
    (OpenNI 相容 Middleware)
  • OpenNI Compliant Hardware Binaries
    (OpenNI 相容硬體)
  • OpenNI Packages
  • ONI files

前面在這邊所選的,就是整個包裝好的「OpenNI Package」;而要獨立下載的話,則就是前面三項了!至於最後一項「ONI files」,則是提供了官方錄好的深度、彩色資料,算是用來做測試資料用的,基本上一般都用不到。

而在這邊選取前四項的話,第二層的選單都會出現「stable」和「unstable」的選項。
Stable 是穩定版、通常版本比較舊、但是經過比較多的測試、會比較穩;unstable 是不穩定的版本,但是會比較新、功能可能比較多。某方面來說,可以把 stable 版看成正式版、把 unstable 版看成測試(Beta)版,這樣應該比較容易理解。至於要用 stable 版還是 unstable 版?就看需求了。以開發來說,Heresy 會建議用最新的 unstable 版就是了。(不過像在這個時間點,其實兩者的版本是相同的)

接下來,最後一層會列出來不同平台、不同版本的檔案,這時候就是要針對自己的平台和需求做選取了。在這邊,他主要會有不同作業系統,包含是哪種作業系統、32 / 64 位元的版本。一般使用者基本上都是使用「for Windows」、「32-bit」的版本,應該就都可以了~

不過這邊要注意的是,個別下載安裝檔的話, 64 位元的版本並不會像 Packages 的版本一樣、直接包含 32 位元的版本,所以如果是要同時安裝 32 位元和 64 位元的版本,是需要兩者個別安裝的。

而「Development Edition」和「Redist Edition」之間的選擇,前者就是「程式開發版」,後者則是「可轉發套件版」(Redistributable),則是如同在「Windows 環境安裝 OpenNI」所說的,是要開發程式的人再選擇「Development Edition」應該就可以了。不過要注意的是,「Redist Edition」裡面不包含任何 OpenNI 的程式,所以也沒有辦法使用官方範例(NiViewer)來進行測試。

32 thoughts on “2012 OpenNI 環境/Kinect 安裝教學”

  1. heresy,您好!
    NITE貌似也是跟以前不一样了,安装时不需要授权码了,但不知道还需不需要像以前一样将「SampleXMLsNITEData」目录中的所有 XML 文件,取代掉 NITE「Data」目录中 XML 文件?

  2. to euphy
    目前的 NITE 已經不需要授權碼了。
    而 XML 的部分,應該也不需要特別處理了。

  3. heresy大神:
    您好!
    我试了nite下的那些sample?比如pointviewer。我编译能通过,但是总提示我没有Sample-Tracking.xml的文件。运行窗口弹出就自动关闭了。不知道是什么原因。最初版本的驱动我是能编译且运行出来的。希望您在百忙之中能帮我看看是什么问题。谢了~

  4. to gjxw

    OpenNI 和 NITE 的範例程式,基本上都是需要 XML 檔來做初始化設定的,而且檔案位置與名稱,都是寫死在程式裡的。
    以你說的 pointviewer 來說,在 main.cpp 裡面,可以找到一行
    #define SAMPLE_XML_PATH “../../../Data/Sample-Tracking.xml”
    就是在定義 XML 檔所在的位置。

    所以,在執行階段,你必須要確定相對執行檔的這個路徑下,有需要的 XML 檔,如此才能正確執行。

  5. to heresy
    我之前也看到了#define SAMPLE_XML_PATH “../../../Data/Sample-Tracking.xml”
    而且我去那个路径看了也确实有这个xml文档啊,貌似就是原来要改key的那个xml文档。可是就是执行不过去,弹出的窗口总是提示”InitFromXmlFile failed:File not found!”.我真是不明白了,所以才来问您的~~~

  6. to gjxw

    麻煩請確定一下你的整個範例的目錄結構的相對關係,以及執行檔執行時的工作目錄。
    如果要單純化,請試著把 SAMPLE_XML_PATH 以絕對路徑的方式指定、然後再來進行測試。

  7. to heresy

    弄好了,改了绝对路径,还要把改成/,才运行通过。真是感谢您了,百忙之中还有空来回答我这些小问题。还有就是我在windows live中申请了加k heresy为好友(也不知道是不是您),我的名字是geounxg@hotmail.com。有点怕您以为是乱加的,所以说以一下~~~

  8. to heresy

    何大神,我實在沒辦法了,還得向您請教點問題。FAAST那個軟件是如何把後臺監測到的動作進而產生的鍵盤消息傳到前臺進程的呢?我自己做的程序,可以用keybd_event傳給notepad.exe,但是就是傳不到前臺的程序?希望您能給點思路,再次打擾,十分抱歉!~

  9. to gjxw

    抱歉,不太確定你所說的「前臺進程」到底是指什麼。
    不過基本上,要送鍵盤滑鼠事件給其他應用程式,就是得靠 Windows 本身提供的 API 了。
    如果你可正確地把鍵盤送給 notepad,基本上應該是沒問題才對。

    而如果是某些特定的程式不行…那很有可能是這些程式有針對這類的虛擬事件作封鎖,或是實際上是採用其他的方法來做鍵盤事件的處理,那就必須要另外想辦法了。

    Heresy 自己沒有再研究這一塊,或許你可以參考
    http://www.360doc.com/content/11/0811/17/541242_139671012.shtml
    這篇文章看看

  10. to heresy

    行了,還是用的keybd_event,就是把bscan置成1就行了,看了N多方法,原來這麼簡單。我發現我只要一來問您,問題總是能解決,您真是好人~

  11. to heresy

    再問您個問題,FAAST里需要選是fullbody或者是nite,我想知道skeleton信息和手勢信息是不能同時被kinect獲取并做操作么?

  12. 問您個問題,在安装primesense-win32-fullinstaller-dev-20.4.2.20 时弹出 can not instrall: installer failed with return code 1603,这是什么错误啊?我的系统为winXP SP3

  13. to gjxw
    在 OpenNI 裡面兩者是獨立,可以同時使用的。
    基本上這是 FAAST 的設計問題。

  14. to xiaoniu
    建議你試試看不要安裝 package,而是分別安裝 OpenNI、NITE、驅動程式。
    這樣應該可以判斷是死在哪個步驟。

    另外,有先把舊版本移除嗎?

  15. 找到原因了 老版本有的需要手动删除 谢谢
    再问个问题 我是个新手 仅有部分C 基础,应该如何循序渐进的学习kinect编程呢 谢谢

  16. 你好 我安装上使用niview.exe的例子时显示的是两个全白色的画面 怎么回事啊 谢谢 望解答 USB什么的都换过了

  17. to xiaoniu

    這一般來說是你的電腦在使用 OpenGL 繪製時有問題所造成的。請檢察你是否有安裝最新版的顯示卡驅動程式。

  18. 感谢 问题已经顺利解决
    把显卡驱动更新到最新就可以了
    还有个问题向你请教下:使用自带的骨架检测例子niusertracker时一个user检测不到时需要等待好久才能判断user丢失,其中画面出现停顿现象,查找了原因发现应该是openni库的原因,请问你有没有碰到这样的现象谢谢

  19. to xiaoniu
    這應該是 NITE 的問題,Heresy 這邊也有類似的狀況。

  20. 这两天我查看了他的源码,还没有找到方法解决这个问题,请问Heresy 你呢?估计不好解决,需要等到下一版本发布了

  21. 楼主您好,我以前一直用kinect的SDK做开发,现在想用openNI,不知道这两个驱动能否同时安装在电脑上,会有冲突吗?

  22. 請問一下~~
    進行開始進行互動技術的學習,所以正在尋找一些可以應用的資源。
    根據版主所提供的OpenNI 下載頁面似乎已經更新了,似乎找不到開發者城市下載頁面,只有新版的SDK下載頁面,請問我該如何取得開發套件呢?

  23. Heresy 老師
    我現在照著你上面的作法後
    buliding
    就會出現
    0xC0000008: An invalid handle was specified
    如何解決?
    謝謝

  24. to kinect初學者

    請問一下你的錯誤是在哪裡發生的?
    官方的 NiViewer 是否可以正常使用?

  25. Heresy 老師
    我在VS2010的DEBUG時出現的
    我使用的老師code run 都有include 和 lib
    卻無法執行
    我用官方版的 NiViewer 可以用

  26. to kinect初學者
    如果是這樣的話,建議你用偵錯的方法,一行一行去執行,看看錯誤是發生在哪一行,這樣會比較好找到問題。

    另外,也建議自己在範例程式裡面加上錯誤檢查的程式碼,這樣應該可以更簡單地找到問題所在。
    OpenNI 1: http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=215
    OpenNI 2: http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=426

  27. 我运行NiViewer.exe和NiSimpleViewer.exe都会出现无法定位程序输入点XXX于动态链接库OpenNI.dll上。请问大神是怎么回事儿啊

  28. to 巴黎雅丐
    請確認你的 OpenNI 和 Senor 版本是對應的。
    如果版本之間不是對應的版本,就有可能會出現這個問題。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *