給想開始學 Kinect/OpenNI 程式開發的人 2016


這篇的主題,是要開始學 Kinect、或是 OpenNI 程式開發前,應該要知道的一些事情;基本上,主要的目的,是壤還搞不清楚狀況的人,知道自己可以使用哪個開發環境,還有該開發環境的狀況。

其實之前都寫在各個文章裡面了,不過由於不時還是有人會弄錯、或是不知道某些東西,所以這邊彙整一下。

基本上,要選擇體感程式、深度感應器的開發環境,主要要取決於你用的是哪個感應器;根據所使用的感應器的不同,能使用的開發環境自然也就不同了。

所以接下來,這邊就是以硬體為導向,開始分類。首先,下面是以表格形式的彙整:

感應器
ASUS Xtion 與其他 PrimeSene 架構感應器
第一代 Kinect
第二代 Kinect
OpenNI 1
可使用
可使用
不可使用
OpenNI 2
可使用
可使用
不建議使用
Kinect for Windows v1
不可使用
可使用
不可使用
Kinect for Windows v2
不可使用
不可使用
可使用

不過 這邊也要說明一下,Heresy 這邊考慮的基本上只有 OpenNI 和 Kinect for Windows SDK 而已,OpenKinect 等其他開發環境 Heresy 沒有列入這篇的整理。

不過,如果是要使用 OpenNI 的方案的話,也請先參考《201407、OpenNI 現況》,了解他目前的狀況。

下面則是細節:


Microsoft Kinect 感應器

微軟的 Kinect 感應器有兩個不同的世代,以搭配的遊戲機來看的話,第一個世代的 Kinect 是給 Xbox 360 用的,而第二個世代的 Kinect 是給 Xbox One 用的;如果使用的是 Kinect 感應器的話,最需要注意的是:這兩個世代的感應器不但外觀不同,內部架構也不同,兩者之間是完全不能相容的!要下載安裝 SDK 之前、請先確認版本!


第一代 Microsoft Kinect

第一代的 Kinect 外觀如下圖,基本上算是這個世代的深度感應器裡最早出來的產品。

他使用的是 PrimeSense 的 Light Coding 的方案,在硬體上有分為「Kinect for xbox 360」和「Kinect for Windows」兩種;前者是給 xbox 360 用的,給 PC 用算是附加功能,後者則是給 PC 用的,不能搭配 xbox 360 使用。兩者在外觀上差異極小,內部也僅有韌體有所不同。目前基本上應該已經買不到新品了。

而如果所使用的感應器是第一代的 Kinect 的話,那可以使用的開發環境算是最多的,包括了:

  • OpenNI 1
    • 很早期的開發環境,不是很建議。
    • 跨平台。
    • 要使用第三方的驅動程式模組(參考),和 Kinect for Windows SDK v1 是互斥的、不能同時使用。
  • OpenNI 2
    • 需要搭配 Kinect for Windows SDK v1 使用,所以僅能在 Windows 7 以後的平台運作。
    • 在非 Windows 環境下可以搭配 OpenNI2-FreenectDriver(連結)使用。
  • Kinect for Windows SDK 1
    • 僅能在 Windows 7 以後的平台運作。
    • Heresy 沒用過。

要注意的是,第一代的 Kinect 感應器,不能搭配 Kinect for Windows SDK 2 使用!所以如果你想要搭配微軟的 Kinect for Windows SDK 使用的話,請下載最後的 1.8 版,不要下載 2.x 版!


第二代 Microsoft Kinect

第二代的 Kinect 外觀如下,他算是目前市面上可能算是最好買到的深度感應器了。

他不再採用 PrimeSense 的方案,而是使用自己的 Time of Flight 技術。他基本上也有兩個版本,第一個版本是「Windows 專用的」,第二個版本則是「Xbox One 用的 + 專用轉接線」,不過兩者基本上相同,外觀差異也極小。目前微軟已經不再販售 Windows 專用版,而僅販售 Xbox One 的版本以及對應的轉接線(參考)。

Kinect for Windows SDK v2

第二代 Kinect 可以使用的開發環境,主要就是 Kinect for Windows SDK v2

要使用的話最需要注意的,就是他一定要使用特定的 USB 3.0 控制器,也只能搭配 Windows 8 以後的作業系統使用;此外,他也不能搭配 Kinect for Windows SDK 1.x 使用

OpenNI 2

如果不想使用 Kinect for Windows SDK v2 來開發的話,可以考慮使用 OpenNI 2,但是個人不是很建議。

因為雖然 OpenNI 2 目前有支援 Kinect for Windows v2 的分支(參考),但是由於他不是 PirmeSense 的方案,所以無法搭配 NiTE 使用,基本上只能讀取深度、彩色等畫面,無法進行人體骨架的追蹤

而如果想在非 Windows 的平台開發的話,則勉強可以使用 OpenNI 2 搭配 libfreenect2連結)使用;但是問題基本上會和上面相同。


ASUS Xtion 系列感應器以及其他 PrimeSense 感應器

如果是使用 ASUS Xtion 系列感應器以及 PrimeSense CARMINE、Capri 感應器等其他 PrimeSense 晶片的感應器的話,基本上只能使用 OpenNI 的方案。

理論上,要使用 OpenNI 1OpenNI 2 都可以,不過個人比較建議使用 OpenNI 2。

不過目前最大的問題,還是在於 PrimeSense NiTE 已經沒有維護、也沒有提供下載了,雖然網路上還找的到有人有備份,但是基本上都算是違反使用授權的;所以如果要拿來做人體骨架追蹤與分析,會比較麻煩。這部分還請參考《201407、OpenNI 現況》。

對「給想開始學 Kinect/OpenNI 程式開發的人 2016」的想法

  1. 老师您好,我想向您请教Kinect v2和Kinect v1识别骨骼的算法原理是否相同呢?我的意思是不是都基于论文《Real-Time Human Pose Recognition in Parts from Single Depth Images》里提到的先采集深度图像然后划分身体部分最后用决策树训练呢?

    • 微軟並沒有完全公開 Kinect for Windows SDK 的內容,所以無法確實知道他的實作。
      但是兩個世代基本上都是透過深度影像產生的,不過至少從 v2 的關節點有增加來看,兩代的演算法應該不完全相通。

  2. 您好

    我想向您請教一個問題

    我有利用您前幾章的介紹

    成功用cpp檔開啟ASUS Xtion Pro的鏡頭畫面

    但因為我需要利用vb檔操作surf的影像搜尋

    想請問您是否有方法或是相關資訊

    可以將openni在vb檔上操作呢???

    十分感謝您!

    • 建議請先說明你目前裝了什麼,是怎樣找不到?

      不過,如果你是要使用 OpenNI 2 的話,請安裝:
      Kinect for Windows SDK 1.8
      OpenNI 2.x

      • Hello
        喔喔可能是我沒裝SDK 的問題

        後來我找到舊版的 OpenNI , Nite
        裝了好幾次不同版本的…也不知道在裝什麼
        然後用(OpenNI 1.4, Nite 1.5)可以開Kinect了!!!
        可以開SimpleViewer, 有影像
        可是的一直不跑不了SimpleSkeleton 啟動他都不跑
        SDK 的問題嗎?

        後來我想去看 cpp 檔 跑跑看
        卻告訴我說 我的 Visual Basic 太新了.. 不能跑 OpenNI 的 code!?
        有什麼建議嗎? 這是Skeleton tracking完全不能用的意思?

        我之後想裝在Ubuntuu上所以是不是不可以用Windows SDK ?

        很感謝你的回應

        • 重讀了一遍你的文章
          看來好像沒辦法用 Nite了
          不知道找不找得到ubuntuu 可以用的 QQ

          你說的 OpenNI2-FreenectDriver 等於是 Windows 的 OpenNI + SensorKinect 對吧?

        • 個人建議,先把文章認真看完,然後考慮一下你要學哪個版本,再去看該版本的文章。
          針對 OpenNI 1 和 OpenNI 2,Heresy 都有寫完整的教學。

          另外,他的範例是 C++ 的,和 Visual Basic 沒關係。建議你確認一下你安裝的 VisualStudio 是什麼版本,有沒有裝到 C++ 的部分。

          • Hello
            可能沒看到OpenNI 1 + OpenNI 2 的教學
            我再看看

            我很確定OpenNI 1 不能用 2015 Visual Studio (新名 Community) 來 Compile.
            其實是某個 Code 裡面的一個設定. 不知道為什麼有. 可以刪掉那一行可是有點怕所以沒試.
            Windows的安裝已全刪所以沒辦法再確認.

            目前Ubuntu 裝上舊板 OpenNI 1, SensorKinect, Libfreekinect, Nite 看起來是可以用
            我再看看你哪裡有寫Ubuntu + OpenNI 2 在考慮要不要換

            謝謝

  3. Heresy你好,
    你內文最後有提到NiTE在被收購的同時, 網上散佈的程式就已經是違法的了
    那請問還能繼續使用NiTE做學術性的研究嗎?
    因為照這樣感覺是不是取得就已經違反授權了?

    感謝解答~

    • 如果有疑慮的話,建議直接參考 NiTE 的授權文件,並以此為基準,這樣才是最準確的。

      不過,在不可散布的部分,是因為 PrimeSense NiTE 在授權文件中,很明確地寫了「You shall not distribute the NITE in any manner」,所以才會說不可自行散佈。
      而在 PrimeSense 關閉前,Heresy 也有特別詢問過這件事,當時官方的說法,就是可以繼續使用、但是不可自行散佈。

  4. 想請問一下kinect v2,我在ubuntu環境想使用kinect,那麼 libfreenect2 很像本身就有提供 API 讀取這些資訊,我只跑過 libfreenect2 的 範例,我很好奇我還需要使用 OpenNI2嘛?還是他還是有一些更好的API提供呢?

    • 在 OpenNI 的社群已經弱化的現在,老實說,沒必要;看你想用哪個寫,並沒有什麼影響。

      以現在的狀態來看,使用 OpenNI 的好處,只在於你可以用同樣的 API,存取不同的深度感應器。
      除了 MS Kinect、ASUS Xtion 外,有不少深度感應器,都有對應 OpenNI2 的驅動程式模組可以用。

      • 感謝你~,我們再做的是有視覺的機器人,所以想說大家一直推OpenNI,原來是因為他能支援多種感應器,另一個是他有一些演算法的實作,那目前看來都被綁死那麼就不需要他了。

        • 在早期 OpenNI 是有明確的優勢的。
          至少在 PrimeSense 還在的時候,OpenNI 應該算是唯一一個有完整的人體骨架追蹤的開放社群的開發環境。雖然 NiTE 僅限於 PrimeSense 的感應器,但是還是相當充分了~
          此外,當時也還有不少人,是針對他還開發應用的。

          不過在 PrimeSense 被 Apple 買了之後…基本上總覺得沒救了。 XD

          • 话说我做的第一个游戏就是使用第一代Kinect跑在linux上的体感游戏,那时候好像是11年吧,可惜,最后因为需求和工期一直在变化,然后OpenNI和Kinect环境也在恶化,最后不了了之了,现在转向手游方向了,手上现在还保留这第一代Kinect……OpenNI真是可惜了,当时觉得还挺有发展性的,结果突然就土崩瓦解了。

發表留言

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