Home People Research Blog Courses Links Search Download
NCHC

Blog

Blog 最新文章

  1. 提供新版 Edge 的 HoloLens 2 Insider Preview
    2021/01/20 08:55
  2. Facebook Oculus Quest 2 開箱文
    2021/01/13 14:19
  3. GitLab 手動執行 pipeline 的預輸入變數
    2021/01/04 11:14

Blog 最新回應

  1. 謝謝你提供的資訊...
    2021/01/17 17:40
  2. MSVC 也是有在進步的 XD...
    2020/12/24 15:55
  3. “如果不想另外定義一個 struct 的........
    2020/12/24 15:49

Keyword 關鍵字

Docker C++ Oculus Quest 2 C++11 Oculus git OpenVR Python Boost Docker 開放資料 PHP HTC Vive OpenXR Windows MR NiTE2 OpenNI iFlyover Kinect 3d print MR OpenCL HTC Vive Focus VR javascript VR 開放資料 HTC Vive Pro C++17 Java OpenMP OpenGL CUDA Valve Index ASUS Xtion WebGL GitLab 資料視覺化 Oculus Rift S Qt CubeX Python C++14 OpenCV Pandas 資訊地圖 Pandas Vulkan 3D立體 HoloLens 2 svn C++14 OpenNI2 C++20 xml

類別:技術相關 » 技術研究
文章發表|我要回應|RSS訂閱

2013 OpenNI 簡介

微軟在 2010 年底,針對該公司的 Xbox 360 遊戲機,推出了以深度感應器為主體的體感攝影機、Kinect,算是以相當低廉的價格,把深度感應器、動作捕捉的系統,從本來屬於高價的實驗室產品、變成了遊戲機配件引進了家庭之中。

而由於其相對低廉的價格,算是一般人都買的起的設備,所以在推出之後沒多久,就馬上有不少人開始針對他進行研究,並成功地讓 PC 也可以透過 USB 來連接 Kinect、讀取他的資料。

之後,包括 OpenKinect(官網)在內,有不少開發方案陸續地出現,讓大家可以在 PC 上去存取 Kinect 的資料。而在這些方案中,第一個有官方性質的,應該就是這由 Kinect 核心晶片 PS1080 開發廠商、PrimeSense(官網)所主導的 OpenNI 了!

OpenNI 簡介

OpenNI 的官方網站是:http://www.openni.org/。
OpenNI 這個字是「Open Natural Interaction」的縮寫,大致上可以翻譯為「開放式自然操作」;而所謂的 NI 又包含哪些東西呢?OpenNI 對自然操作(Natural Interaction,以下簡稱 NI)的定義包含了「語音」、「手勢」、「身體動作」等等,基本上就是比較直覺、直接靠人本身來進行的操作方式了。

而 OpenNI 是在 2010 年 11 月建立、並在 12 月建立了網站、並放出他的第一版 SDK。在一開始,是一個針對 Kinect 這款感應器提供的跨平台、Open Source 開發環境;他除了提供了深度影像、彩色影像的讀取之外,PrimeSense 也自己放出了名為 NiTE 的 middleware(這個不是 OpenSource)、來提供人體骨架追蹤等功能,這也讓 OpenNI 成為當時要進行相關程式開發最簡單、完整的一個環境~(註 1)

而目前 OpenNI 提供了 Windows、Linux、Mac OS X 上的開發環境,除了 x86 和 x64 外,也有支援 ARM(Linux)架構的處理器,對於要在非 Windows 平台上,進行體感程式、深度感應器程式開發的人來,應該算是一個相對完整的環境了~

雖然由於 OpenNI 主要是由 PrimeSense 在進行維護,所以支援的硬體也是以 PrimeSense 自家的產品為主(Microsoft Kinect、ASUS Xtion…),不過由於其 Open Source 的性質,實際上他也是可以靠自行擴充模組,來支援其他感應器的。


OpenNI 版本

目前 OpenNI 已經有兩個大版本了,一個是一開始的 1.x 版(最終為 1.5),另一個則是 2012 年底推出的 2.x 版(目前為 2.2);目前 OpenNI 已經沒有在維護 1.x 版,更新都是針對 2.x 發布而已。而這兩者在功能、與介面上,都有相當大的差異,彼此之間也完全不相容,這是在使用時要注意的。

OpenNI 1

OpenNI 1.x 基本上是提供了一個大的框架,在裡面定義了所有功能的使用介面;他所提供的主要功能包括了:

  • 讀取深度、彩色、紅外線影像的資料
  • 讀取聲音資料
  • 手勢偵測、手部位置追蹤
  • 姿勢偵測、人體追蹤、人體骨架(關節點)追蹤

不過基本上,OpenNI 只有提供讀取影像的功能,進一步的骨架追蹤等功能,都是要靠所謂的「middleware」、以 plug-in 的形式來提供實作。而為了讓大家可以順利地進行開發,雖然並非開放原始碼的,PrimeSense 還是提供了一套可以免費使用的 NiTE 作為 OpenNI 的 middleware,讓 OpenNI 有完整的功能。

右上圖,就是 OpenNI 1 的架構圖。這樣設計的好處,就是開發者只需要學習 OpenNI 怎麼用、而不需要去知道 middleware 怎麼實作的,就可以完成程式的開發了~因為這些聯繫的部分,會由 OpenNI 做掉。

不過相對的,這樣做的缺點,就是  OpenNI 本身定義的框架,也限制了 Middleware 能做的事。為了要遵守 OpenNI 所定義的介面,所以 middleware 的開發者,也僅能按照 OpenNI 的定義、來提供已經定義好的功能,而沒辦法擴增新的功能;某種程度上,這應該也是 OpenNI 1 一直到最後,都還是只有 PrimeSense NiTE 這個 middleware 的原因。

而如果想要知道 OpenNI 1 的程式怎麼寫的話,可以參考《OpenNI 1.x 教學文章》、或是之前整理的課程投影片與範例程式;雖然 OpenNI 1 的部分 Heresy 應該已經不會再去更新了,不過應該也已經涵蓋了絕大部分 OpenNI 1 的功能了。

目前 OpenNI 的官方網站,還有提供 OpenNI 1 最終版本的下載,其下載連結為:

http://www.openni.org/openni-sdk/openni-sdk-history-2/

所需要的檔案包括了:OpenNI SDK v1.5.4.0、OpenNI-Compliant Sensor Driver v5.1.2.1、NiTE v1.5.2.21,安裝的教學則可以參考《2012 OpenNI 環境/Kinect 安裝教學》。


OpenNI 2

相較於 OpenNI 1,OpenNI 2 整個介面簡化許多。OpenNI 2 基本上是變成只去定義深度感應器原始資料的讀取,而不去做額外的分析;像是骨架分析、手勢偵測這類靠分析出來的結果,OpenNI 2 基本上是完全不去理會了~

而如果要做這些進一步的分析的話,OpenNI 2 是把這類基於 OpenNI 2 取得的原始資料拿來分析的函式庫,通稱為「middleware library」;但是實際上,在 OpenNI 2 的架構裡面,並沒有針對這些「middleware library」做任何的定義、限制,所以這些額外的函式庫可以提供更多的功能。

在這樣的設計下,OpenNI 本身變得相當地輕巧,使用上也更為單純;而且同時,middleware library 的開發也變得相當地自由,可以提供各式各樣的功能。目前,OpenNI 的官方網站(連結)上,包含 PrimeSense 的 NiTE 2 在內,也已經有 16 個 middleware library 可以下載了~

不過,這樣做的缺點,基本上就是要使用不同的 middleware library 的時候,就必須要各自去學習不同的 library 的介面、使用方法,對於不同的設計風格,如果又缺少文件的話,其實是相對不容易上手的。

而如果想要學習 OpenNI 2 的程式開發的話,則可以參考《OpenNI 2.x 教學文章》這邊整理的教學文章,或是《OpenNI 2 & NiTE 2 課程投影片與範例》;針對 OpenNI 2 和 PrimeSense NiTE 2 的教學文章,基本上也都整理告一個段落了,之後還有想到要寫些什麼,應該也會慢慢地補充。

OpenNI 2 本身可以直接在官方的下載頁面下載,其連結是:

http://www.openni.org/openni-sdk/

目前最新的版本是 OpenNi 2.2.0.30 Beta,基本上只需要一個檔案,不像 OpenNI 1 那麼複雜。而所需要的 Middleware Library,則可以在註冊 OpenNI 網站會員後,在 OpenNI 的下載頁面下載。


區分 OpenNI 1 和 OpenNI 2 的程式碼

而如果看到一段 OpenNI C 程式碼,想要區分他是 OpenNI 1 還是 OpenNI 2 的話,最簡單的方法,就是去看他 include 的 header 檔、以及函式與類別的 namespace。

OpenNI 1 所需要 include 的 header 檔,是 XnCppWrapper.h,而相關的函示和類別,基本上都是在 xn 這個 namespace 下面。

OpenNI 2 的話,則是要 include OpenNI.h 這個 header 檔,所有相關的物件,則都是在 openni 這個 namespace 下面。

所以,只要看到程式裡面是使用 xn::--- 的話,基本上就是 OpenNI 1 的程式;而如果看到 openni::--- 的話,基本上就是 OpenNI 2 了~

而也由於不管是檔案、還是程式的介面,都是完全不同的,所以 OpenNI 1 和 OPenNI 2 基本上是完全不相容的。不過,也由於這樣,OpenNI 1 和 OpenNI 2 的 SDK 是可以同時安裝的!只要設定好,是可以在同一台電腦上,各自進行 OpenNI 1 和 OpenNI 2 的程式開發的。

不過,如果是使用微軟的 Kinect 感應器、而需要同時開發 OpenNI 1 和 OpenNI 2 的程式的話,會因為驅動程式的關係,而有一些問題就是了。


對 Microsoft Kinect 感應器的支援

雖然在 OpenNI 一開始推出的時候,市面上買的到的感應器只有 Microsoft 的 Kinect for Xbox 360,不過由於 Kinect 始終是微軟的產品,並非由微軟直接支援 OpenNI,所以其實 OpenNI 對於 Kinect 系列的感應器,在支援上是有小繞一下的。

在 OpenNI 1 的時候,由於當時微軟尚未推出 Kinect for Windows SDK,所以就算是在 Windows 上,也沒有官方的 Kinect 驅動程式可以用。而當時 OpenNI 1 的 Sensor 驅動程式模組,主要是針對 PrimeSense 自家的感應器做支援,並沒有直接支援 Kinect 感應器;如果要在 OpenNI 1 的環境中使用 Kinect 膽應器的話,實際上是需要另外去安裝基於 OpenNI 的官方版本修改的第三方 SensorKinect(GitHub)模組的。(註 2)

而到了 OpenNI 2 的時候,微軟的 Kinect for Windows SDK 也已經發展了一段時間了;應該是為了遵守微軟的授權規定,所以變成是以透過 Kinect for Windows SDK 來使用 Kinect 這樣的形式,讓 OpenNI 2 可以存取 Kinect 的資料。這樣做的好處是 Kinect 可以使用微軟官方版的驅動程式,所以也可以直接使用微軟的 Kinect for Windows SDK;但是缺點就是只剩下 Windows Vista 以後的電腦,可以在 OpenNI 2 環境中使用 Kinect 了。(註 3)

另外,由於在 OpenNI 2 和 OpenNI 1 下要使用 Kinect 感應器,是需要不同的驅動程式的,所以如果是需要在同一台電腦上,分別去開發 OpenNI 1 和 OpenNI 2 的話,是會需要強制更換 Kinect 所使用的驅動程式的(參考);這點在使用上,可能會造成一些困擾。


附註:

  1. 雖然微軟後來也有推出 Kinect for Windows SDK,讓開發人員可以在 Windows 上使用 Kinect 感應器做開發(參考)、後來甚至也針對 Windows PC,推出了略為修改的 Kinect for Windows 感應器,但是在起步的時間點,算是比 OpenNI 晚上不少的。

  2. OpenNI 1 剛推出的時候,市面上應該是還沒有 PrimeSense 公版的感應器。而 PrimeSense 之所以沒有直接在 OpenNI 公版的裝置驅動模組裡面加上對 Kinect 的支援,Heresy 個人認為應該是在迴避微軟對於 Kinect 可能的授權問題,所以才變成是要靠第三方修改版來做支援。

  3. 針對 Linux 和 Mac OS X 的平台,目前也有人透過 libfreenect,來針對 OpenNI 2 寫出支援 Kinect 的驅動程式模組;有需要的話可以參考:https://github.com/piedar/OpenNI2-FreenectDriver。

  4. PrimeSense 所提供的 NiTE 這套 Middleware,主要是提供了基於深度影像,進行人體骨架追蹤、姿勢偵測,手勢偵測、手部追蹤等功能的函式庫;他不像 OpenNI 是 Open Source 的,PrimeSense 僅有放出編譯好的 binary 檔案。不過他基本上可以免費使用,但是限制是只能用在使用他自家晶片的產品上。

張貼者:heresy於2013/09/30 09:56 上午有0則回應,瀏覽次數:3,161次

-- TOP --

我要回應
* 身份  訪客 (暱稱:)
 本篇文章作者 (帳號:密碼:)
* 內容      
很高興 悲傷 震驚 疑惑 大笑 發瘋 傷心
* 留言密碼 (請輸入下方圖片中去除前、後位數的數字,共五碼。)
說明 1. * 表示必填欄位。
2. 不支援HTML Tag。
   

-- TOP --

© Visualization and Interactive Media Laboratory of NCHC, 2007 - 2021, All Rights Reserved. Contact E-mail