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)來進行測試。


OpenNI / Kinect 相關文章目錄

對「2012 OpenNI 環境/Kinect 安裝教學」的想法

  1. Heresy 你好
    我將3臺KINECT鏈接到電腦,用EnumerateProductionTree 來列舉DepthGenerator, ImageGenerator 和 SceneAnalyzer, 3個Depth 和Image 都沒問題,但是他返回了我15個SceneAnalyzer,每個得到的數據還都是完全一樣的,請問你遇到過這個問題嗎?

    • 針對 User Generator 和 Scene Analyzer,NITE 的確會回傳多個 node。
      之間的差異…Heresy 也不是很確定

  2. 謝謝您的分享,讓人受益良多,想請問哪邊可以知道primesense和SensorKinect可以正確work的相對應版本的資訊?謝謝。

    • SensorKinect 官方網站的 readme 都有列出哪個版本是採用哪個版本的 OpenNI Sensor 模組進行修改的。以那邊所列的版本資訊來做對應就可以了。

  3. 請問:這一次在安裝時,並沒有安裝nite,不知是否已經在「OpenNI Package」之中了~!???謝謝妳
    還是另外安裝?

  4. 在這邊請問,我下載完軟體都是64位元,
    並且將kinect硬體安裝完成,
    但是mmd 卻沒有辦法連結
    請問能幫忙解決嗎?

    • 麻煩請提供詳細的錯誤狀況或錯誤訊息,光是一句沒辦法連接基本上無法做任何判斷。
      另外,也請先確認 OpenNI 本身的範例能正常執行。

  5. 哈囉~Heresy
    小弟看了您的OpenNI Kinect應用後收穫良多~
    興起想試試看安裝的內容,小弟跟著您的文章下載了primesense-win32-fullinstaller-dev-20.4.2.20及SensorKinect093-Bin-Win32-v5.1.2.1安裝完成後重開機連上kinect裝置有搜尋到primesensor.

    但是問題發生了,在使用範例程式時也發生了無法找到程序進入點的問題,看看您的回覆似乎跟應用程式版本不符合有關,請問我所下載的這兩個程式版本是可以使用的嗎??

    後來也看到您提到不能同時安裝kinectsdk及OpenNI所以將他移除了,原以為是衝突但移除後也是沒用…請問到底發生了什麼問題呢??

  6. 大大您好
    小弟安裝版本是SensorKinect091-Bin-Win64-v5.1.0.25.msi以及primesense-win64-fullinstaller-dev-20.4.2.20.exe
    但是出現錯誤:
    無法找到程序輸入點
    ?RegisterToNewStreamData@XnDeviceBase@@UEAAIP6AXAEBUXnNewStreamDataEventArgs@@PEAX@Z1AEAPEAX@Z(在動態連結程式庫XnDDK64.dll)

    已經有重新開機過,也確認裝置管理員中抓取到了Kinect Audio,Kinect Camera,Kinect Moter

    想問問怎麼解決>"<

    • 通常這類的問題會是版本不一致造成的。
      建議你先把所有已經安裝好的相關軟體移除,然後重新安裝一次再試試看。
      要注意的是,記得 SensorKinect 必須要在安裝好 package 後再安裝。

      • 恩 謝謝大大

        另外想問大大一件事情

        在initialize時候要給XnMapOutputMode nXRes和nYRes

        其中OpenNI有XN_VGA_X_RES ,XN_VGA_Y_RES (640*480)

        以及 XN_SVGA_X_RES, XN_SVGA_Y_RES (800*600)

        但是現在OpenNI可以使用到大於640*480的VGA嗎

        因為小弟測試 不管如何測試都有問題

        想問問大大是否可以讓他的VGA調到更高呢

        • OpenNI 定義的解析度只是預留的功能,目前的感應器基本上不是全部都支援。
          要知道所使用的感應器支援那些解析度,請使用 GetMapOutputMode() 這個函式。
          不過 Kinect 應該只支援 VGA 而已。

  7. 請問Heresy,如果要在64位元的電腦上執行32位元的程式,只要在另外裝32位元的Pakage就好了嗎????謝謝Heresy大大

  8. 我剛把電源線換到獨立的插座就ok了,原本是插在和電腦主機共用的延長線插座上.
    但我要執行NiViewer時出現錯誤訊息:
    無法啟動程式,因為您的電腦遺失OpenNI64.dll,請嘗試重新安裝以修正這個問題.
    就不知道要怎麼解決了說@@

  9. 謝謝Heresy大長久以來的解說獲益良多

    另外想請問你有使用過unity連接kinect嗎?

    如果有可以麻煩您寫一篇使用手冊嗎@@? 官方的解說不太詳細

  10. 請問我裝好 PrimeSense Package Stable Build for Windows x64 (64-bit) v20.4.2.20 Development Edition 與 SensorKinect091-Bin-Win64-v5.1.0.25.msi 這二個軟體後(有照順序裝,先裝openni才裝sensorkinect),但裝置管理員PrimeSense只出現「Kinect Motor」卻沒有「Kinect Audio」、「Kinect Camera」,而我電腦是64位元主機,我後來去點ni viewer執行後卻跑出:
    Device: PrimeSense/SensorKinect/5.1.0.25: The device is not connected!
    Device: PrimeSense/SensorV2/5.1.0.41: The device is not connected!
    Device: PrimeSense/SensorKinect/5.1.0.25: The device is not connected!
    Device: PrimeSense/SensorV2/5.1.0.41: The device is not connected!。
    然後就沒下文了。
    請問是哪裡出問題呢,還是我裝錯了?
    (kinect燈有亮,我重裝好幾次都失敗…)

    Liked by 1 person

    • 這應該是驅動程式不正確。
      你是否有安裝過其他家的 Kinect 驅動程式?例如 Microsoft Kinect for Windows SDK?
      如果有的話,很有可能是他還在用舊的驅動程式,而沒有使用 SensorKinect 提供的驅動程式。

      • 在裝64位元的驅動程式之前我有裝32位元後來發現裝錯了才全刪掉改64位元,我沒有用其他家的驅動程式,我很確定它抓的是SensorKinect。

          • 我也遇到同樣問題耶~已經把主機上所有的port都換過一遍了,結果還是不行.

          • 之前遇到只有抓到「Kinect Motor」的狀況,後來發現是 Kinect 的電源線沒有接。
            請確認一下是否有正確連接電源線。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.