201407、OpenNI 現況

| | 26 Comments| 14:45
Categories:

在 2013 年底,Apple 正式收購了 OpenNI 的主導廠商、PrimeSense;而到了 2014 年的四月底、OpenNI 的官方網站也正式關閉,其後又過了一段時間後、連 PrimeSense 的官方網站也都停止運作了。而這也看得出來,所謂的 OpenNI 聯盟,其實只是靠 PrimeSense 玩起來的…

那現在,OpenNI 的狀況是怎樣呢?

首先,之前針對 iPad 推出外掛深度感應器「Structure Sensor」的公司 Occipital(官網),已經決定接手繼續維護 OpenNI 2 的 SDK 了!他也為此建立了一個專頁、提供了 OpenNI 2 相關的資源下載;其網址是:

http://structure.io/openni

而原始碼的部分,由於 Github 上、OpenNI 帳號下的 repository(連結)所有權還在 PrimeSense 的人那(其實 Heresy 有試著連絡,但是沒有回應),所以之後基本上很難繼續維護;所以 Occipital 也在 Github 上 fork 了一份、並持續維護,其網址是:

https://github.com/occipital/openni2

雖然目前還沒有釋出新版本,不過他的 develop branch(連結)目前也已經做了不少修改;其中,Heresy 自己也有貢獻一些、修正一些問題。

所以,如果只是要透過 OpenNI 2 來存取深度影像的問,基本上還不用擔心會斷頭。至於感應器的支援部分,OpenNI 2 本身能直接支援的感應器,基本上還是以 PrimeSense 的相關產品為主,包括了:

而其他能支援的,應該也包括了像是 Occipital 的 Structure Sensor 這類直接採用 PrimeSense 方案的感應器。

但是由於 PrimeSense 已經被收購了,所以以後應該也難以取得新的感應器了,那如果有需要的話,該怎麼辦呢?基本上,目前也有不少第三方的驅動模組,可以用來讓 OpenNI 2 可以支援其他廠商的深度感應器,包括了:

而如果是要針對其他裝置做測試話,也可以考慮用 Heresy 寫的 Virtual Device for OpenNI 2,自己餵資料進去做測試。


實際上,問題比較大的,應該還是 PrimeSense NiTE 這個為了 OpenNI 開發的人體骨架分析/追蹤軟體了。

因為不管是 OpenNI 1 或是 OpenNI 2,雖然 OpenNI SDK 本身都是免費、OpernSource 的,但是真正要開發體感程式的話,都還是需要 NiTE 這個非 OpenSource 的函式庫,來做深度影像的分析、以擷取出人體的骨架、並加以分析。

而實際上,NiTE 應該也算是 OpenNI 環境下、唯一個可以免費使用的人體骨架追蹤的函式庫;但是在 PrimeSense 被收購的現在,他不但不會再有更新,甚至連散佈的機會都消失了…

如果早期開始玩的人,手邊都還有備份的話,要繼續使用問題還不大;但是礙於其授權協議,他不但不能用於非 PrimeSense 的感應器、而且也不能自行散佈。這也就是為什麼 Occipital 沒有提供 NiTE 的備份下載的原因了。

不過雖然按照授權協議,是不能自行散布的,不過拜偉大的 Google 大神所賜,其實網路上要找到可以下載的地方,還不算太難(例如);但是有沒有可能下載到有問題的檔案,就比較難確定了。

說實話,以這部分來說,個人是希望可以有足以取代 NiTE 的開源方案可以使用。但是之前有認真找了一下,雖然並非沒有,不過好像還沒有真的可以取代 NiTE 的東西可以用啊…

真的有興趣的話,或許可以試試看下面這兩個:

不過 Heresy 自己還沒真的玩過,也不確定是否可以搭配 OpenNI 使用。如果有人知道有比較好的函式庫可以用,也歡迎提供資訊了。


26 thoughts on “201407、OpenNI 現況”

  1. 老师,您好,关于Kinect 深度图和彩色图对齐的问题,在OpenNI2中是不是已经自动给对齐了?感觉setImageRegistrationMode(IMAGE_REGISTRATION_DEPTH_TO_COLOR )这个函数调用还是不调用都没有什么影响。我用的版本是OpenNI2.2.0.33,另外我还替换过你自己在一片blog中发布的Kinect.dll,感觉和最新的版本效果差不多,对齐的效果比微软自带的sdk效果好很多的样子。麻烦老师给我指点一下。

  2. 另外,使用这个表达式的时候 status=mDevice.setImageRegistrationMode( IMAGE_REGISTRATION_DEPTH_TO_COLOR );status给出的结果是STATUS_ERROR,也就是说这个函数没有调用成功,那么我现在应该去怎样对齐depth image和color image呢?还是我得放弃使用Openni2,而换用Openni1,看到您在Openni1中也写了相关的文章,使用Openni1才可以解决吗·

  3. to JANESTAR

    目前直接下載的 OpenNI 2 Binary 還是不支援,需要自行替換 Kinect .dll 才行。
    或者,自行 clone GitHub 上的原始碼下來建誌也是一個方法。

    如果更換後還是沒有任何改變,有可能是換錯檔案了。
    請確認執行程式所在路徑下的 Kinect.dll 也是需要更換的。

  4. 麻烦老师给我一个可以用的Kinect.dll 下载链接吧,因为之前我在您的blog上搜了好久,我不确定我是不是下载了正确的Kinect.dll,谢谢老师啦

  5. 老师,您好,刚刚我替换过来您提供的Kinect.dll文件,我把安装目录下C:Program Files (x86)OpenNI2RedistOpenNI2Drivers下的Kinect.dll和copy至执行程序下的Redist文件夹下的Kinect.dll都替换为您提供的Kinect.dll,结果我调试的时候,发现status=mDevice.setImageRegistrationMode( IMAGE_REGISTRATION_DEPTH_TO_COLOR );status的状态为STATUS_ERROR,这是为什么呢?感觉我替换的路径应该是没有错的。

  6. to JANESTAR

    請確認你的執行路徑下的檔案配置。
    在執行檔所在目錄下,應該是要有一個 OpenNI2 的資料夾,其下會有 Drivers 的資料夾,底下才會是相關的 dll。

    也就是相對於執行檔的路徑是:
    \OpenNI2\Drivers\Kinect.dll
    其中,並不包含 Redist 這層結構

    另外,也請確認 32 / 64 位元是否正確。

    要做測試的話,一個比較極端的方法,就是先把 dll 刪除,理論上就會不能建立出 device。

  7. 老师,您好,我的执行程序下的替换路径为
    C:UsersLLJDocumentsvisual studio 2010ProjectsOpenNI2OpenNI2OpenNI2DriversKinect.dll
    我还尝试用64位元的dll,发现不能建立device,您刚说的档案配置我觉得我应该是没有弄错的。这让我有点疑惑,为什么
    setImageRegistrationMode()函数的返回状态是STATUS_ERROR?求老师指导,太感谢了

  8. to JANESTAR

    那 Heresy 只能說也不確定了。
    Heresy 這邊剛剛測試過是正常的。

    還是,你有先建立出 Color 和 Depth 的 VideoStream 嗎?
    你該不會是在建立出 VideoStream 之前就先去呼叫了吧?

  9. 😀 Heresy老师太厉害了,果然我在建立出 VideoStream 之前就先去呼叫了。。。。。换过来立马就好了。难怪我搞了好久都没出结果。我学得太粗糙了。谢谢Heresy老师了。以后要更细心的学习。

  10. 想问一下老师,设备的选择,想尝试一下primesense的设备,那对比ASUS Xtion系列和PrimeSense CARMINE系列,应该如何选择呢~~
    谢谢…

  11. to Yao

    Heresy 自己沒用過 PrineSense 的感應器,不過基本上 Asus Xtion Pro Live 和 PrimeSense CARMINE 1.08 應該是幾乎完全一樣的。

  12. 请问老师,在ubuntu上搭建kinect环境,用到的是openni和Sensor kinect驱动,我看到您之前的帖子,openni2.0以后的升级版支持linux arm,如果将kinect移植到arm Linux平台下,有无对应的sensor kinect可用,望不吝赐教!

  13. 是不是sensor kinect驱动就不支持Openni2以上的SDK了?用libfreenect就可以?您再说的明白点,或者您把邮箱留个我,我给您发份邮件,万分感谢!

  14. 您的文章我看了,也就是说如果用openni2的话是通过Kinect官方的驱动程序来结合使用的是吧?要是在Linux中还是用openni1 sensorKinect是比较稳定的选择。还有一个问题就是PC机的Ubuntu可以搭建Kinect开发环境,如果我在ARM平台希望搭载Kinect是不是也需要将Ubuntu移植到ARM上才可以?

  15. to 风霖雪

    抱歉,個人沒有在 ARM 上面開發的經驗,比較不確定。

  16. heresy老师好:我现在使用的是openni2.2.0.0.33,但convertDepthToColor()的对齐误差
    还是很大,点对点的映射,有没有行之有效的替代方案?谢谢

  17. 你好,我按上面的步骤设置后,将下载来的Kinect.dll替换之前的后,提示找不到设备。查看了下载链接发现跟NITE2.2有关。我是否还的安装NITE2.2呢?

  18. 想要得到对齐的深度数据和彩色数据,原始的 Kinect.dll 有偏移,换了您的后同楼上提示找不到设备。因为想要用来三维重建,有没有有效的方法。或者我是否应该放弃OPENNI采用官方SDK去对齐数据。在做毕设,遇到瓶颈了,希望老师给出指点。

  19. 是可以了。使用CoordinateConverter::convertDepthToColor,只能一个一个点对应,写在这希望能帮到别的同学。

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

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