給想開始學 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 Wind
ows 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 現況》。

5 thoughts on “給想開始學 Kinect/OpenNI 程式開發的人 2016”

  1. Heresy老師妳好,看了妳的文章後受益匪淺,有壹個問題想要咨詢壹下;在kinectV1時期,將kinect拍攝的數據用.oni格式存儲出來,並且進行開發是壹個很好的選擇,而在您的文章中似乎表示openni並不再適合對kinectV2進行開發(雖然我也確實沒有找到合適的openni2_kinect2的驅動)。那我想請問的是,我現在要進行kinectV2的開發,大概目標是重建壹個室內空間的三維模型(才剛剛開始著手,所以很多問題不懂),我還應該繼續選用openni2來獲取oni文件進行開發嗎?還是用MS kinect SDK中的studio所錄制的XEF格式進行開發?熱切希望得到老師的解答。謝謝老師!

  2. 謝謝老師的回答,我還想請問xef格式適合用VS平台來進行開發嗎?因為似乎現在網路上關於xef格式的c++開發並沒有什麼參考資料。

發佈回覆給「heresy」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。