在 2013 年底,Apple 正式收購了 OpenNI 的主導廠商、PrimeSense;而到了 2014 年的四月底、OpenNI 的官方網站也正式關閉,其後又過了一段時間後、連 PrimeSense 的官方網站也都停止運作了。而這也看得出來,所謂的 OpenNI 聯盟,其實只是靠 PrimeSense 玩起來的…
那現在,OpenNI 的狀況是怎樣呢?
首先,之前針對 iPad 推出外掛深度感應器「Structure Sensor」的公司 Occipital(官網),已經決定接手繼續維護 OpenNI 2 的 SDK 了!他也為此建立了一個專頁、提供了 OpenNI 2 相關的資源下載;其網址是:
而原始碼的部分,由於 Github 上、OpenNI 帳號下的 repository(連結)所有權還在 PrimeSense 的人那(其實 Heresy 有試著連絡,但是沒有回應),所以之後基本上很難繼續維護;所以 Occipital 也在 Github 上 fork 了一份、並持續維護,其網址是:
雖然目前還沒有釋出新版本,不過他的 develop branch(連結)目前也已經做了不少修改;其中,Heresy 自己也有貢獻一些、修正一些問題。
所以,如果只是要透過 OpenNI 2 來存取深度影像的問,基本上還不用擔心會斷頭。至於感應器的支援部分,OpenNI 2 本身能直接支援的感應器,基本上還是以 PrimeSense 的相關產品為主,包括了:
而其他能支援的,應該也包括了像是 Occipital 的 Structure Sensor 這類直接採用 PrimeSense 方案的感應器。
但是由於 PrimeSense 已經被收購了,所以以後應該也難以取得新的感應器了,那如果有需要的話,該怎麼辦呢?基本上,目前也有不少第三方的驅動模組,可以用來讓 OpenNI 2 可以支援其他廠商的深度感應器,包括了:
- Openni2-DepthSenseDriver
- https://github.com/kaorun55/Openni2-DepthSenseDriver
- 支援 SoftKinetic 的感應器
- OpenNI 2 with Intel Perceptual Computing
- https://github.com/vbystricky/OpenNI2/tree/PerCDevice/Source/Drivers/PerCDevice
- 支援 Intel / Creative 的深度感應器
- OpenNI2-FreenectDriver
- 在非 Windows 環境下、透過 libfreenect 支援第一代 Kinect
- https://github.com/OpenKinect/libfreenect/tree/master/OpenNI2-FreenectDriver
- OpenNI2-Kinect2Driver
- https://github.com/kaorun55/OpenNI2-Kinect2Driver
- 支援 Microsoft Kinect for Windows v2,不過目前還是預覽版本
而如果是要針對其他裝置做測試話,也可以考慮用 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 使用。如果有人知道有比較好的函式庫可以用,也歡迎提供資訊了。
老师,您好,关于Kinect 深度图和彩色图对齐的问题,在OpenNI2中是不是已经自动给对齐了?感觉setImageRegistrationMode(IMAGE_REGISTRATION_DEPTH_TO_COLOR )这个函数调用还是不调用都没有什么影响。我用的版本是OpenNI2.2.0.33,另外我还替换过你自己在一片blog中发布的Kinect.dll,感觉和最新的版本效果差不多,对齐的效果比微软自带的sdk效果好很多的样子。麻烦老师给我指点一下。
另外,使用这个表达式的时候 status=mDevice.setImageRegistrationMode( IMAGE_REGISTRATION_DEPTH_TO_COLOR );status给出的结果是STATUS_ERROR,也就是说这个函数没有调用成功,那么我现在应该去怎样对齐depth image和color image呢?还是我得放弃使用Openni2,而换用Openni1,看到您在Openni1中也写了相关的文章,使用Openni1才可以解决吗·
to JANESTAR
目前直接下載的 OpenNI 2 Binary 還是不支援,需要自行替換 Kinect .dll 才行。
或者,自行 clone GitHub 上的原始碼下來建誌也是一個方法。
如果更換後還是沒有任何改變,有可能是換錯檔案了。
請確認執行程式所在路徑下的 Kinect.dll 也是需要更換的。
麻烦老师给我一个可以用的Kinect.dll 下载链接吧,因为之前我在您的blog上搜了好久,我不确定我是不是下载了正确的Kinect.dll,谢谢老师啦
to JANESTAR
在這篇文章裡面有提供連結了
http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=533
下載:
https://github.com/KHeresy/OpenNI2/releases/tag/KinectOniFix
老师,您好,刚刚我替换过来您提供的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,这是为什么呢?感觉我替换的路径应该是没有错的。
to JANESTAR
請確認你的執行路徑下的檔案配置。
在執行檔所在目錄下,應該是要有一個 OpenNI2 的資料夾,其下會有 Drivers 的資料夾,底下才會是相關的 dll。
也就是相對於執行檔的路徑是:
\OpenNI2\Drivers\Kinect.dll
其中,並不包含 Redist 這層結構
另外,也請確認 32 / 64 位元是否正確。
要做測試的話,一個比較極端的方法,就是先把 dll 刪除,理論上就會不能建立出 device。
老师,您好,我的执行程序下的替换路径为
C:UsersLLJDocumentsvisual studio 2010ProjectsOpenNI2OpenNI2OpenNI2DriversKinect.dll
我还尝试用64位元的dll,发现不能建立device,您刚说的档案配置我觉得我应该是没有弄错的。这让我有点疑惑,为什么
setImageRegistrationMode()函数的返回状态是STATUS_ERROR?求老师指导,太感谢了
to JANESTAR
那 Heresy 只能說也不確定了。
Heresy 這邊剛剛測試過是正常的。
還是,你有先建立出 Color 和 Depth 的 VideoStream 嗎?
你該不會是在建立出 VideoStream 之前就先去呼叫了吧?
😀 Heresy老师太厉害了,果然我在建立出 VideoStream 之前就先去呼叫了。。。。。换过来立马就好了。难怪我搞了好久都没出结果。我学得太粗糙了。谢谢Heresy老师了。以后要更细心的学习。
想问一下老师,设备的选择,想尝试一下primesense的设备,那对比ASUS Xtion系列和PrimeSense CARMINE系列,应该如何选择呢~~
谢谢…
to Yao
Heresy 自己沒用過 PrineSense 的感應器,不過基本上 Asus Xtion Pro Live 和 PrimeSense CARMINE 1.08 應該是幾乎完全一樣的。
请问老师,在ubuntu上搭建kinect环境,用到的是openni和Sensor kinect驱动,我看到您之前的帖子,openni2.0以后的升级版支持linux arm,如果将kinect移植到arm Linux平台下,有无对应的sensor kinect可用,望不吝赐教!
to 风霖雪
如果要在 Linux 上搭配 Kinect 使用 OpenNI2 的話,可能要考慮使用 libfreenect
https://github.com/OpenKinect/libfreenect/tree/master/OpenNI2-FreenectDriver
是不是sensor kinect驱动就不支持Openni2以上的SDK了?用libfreenect就可以?您再说的明白点,或者您把邮箱留个我,我给您发份邮件,万分感谢!
to 风霖雪
建議請先參考這篇文章
http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=432
您的文章我看了,也就是说如果用openni2的话是通过Kinect官方的驱动程序来结合使用的是吧?要是在Linux中还是用openni1 sensorKinect是比较稳定的选择。还有一个问题就是PC机的Ubuntu可以搭建Kinect开发环境,如果我在ARM平台希望搭载Kinect是不是也需要将Ubuntu移植到ARM上才可以?
老师,您好
https://github.com/KHeresy/OpenNI2/releases/tag/
KinectOniFix里面Kinect32.dll下载不下来了吗,页面出错
能传我一份吗?谢谢。邮箱:zoom1539@gmail.com
to zoom1539
剛剛確認過,檔案還是好的,麻煩再試看看。
也請注意,下面的網址是連在一起、沒有分開的
https://github.com/KHeresy/OpenNI2/releases/tag/KinectOniFix
to 风霖雪
抱歉,個人沒有在 ARM 上面開發的經驗,比較不確定。
heresy老师好:我现在使用的是openni2.2.0.0.33,但convertDepthToColor()的对齐误差
还是很大,点对点的映射,有没有行之有效的替代方案?谢谢
你好,我按上面的步骤设置后,将下载来的Kinect.dll替换之前的后,提示找不到设备。查看了下载链接发现跟NITE2.2有关。我是否还的安装NITE2.2呢?
to 冯小包
不確定你到底是要做什麼,不過建議你,先試試看用原始的 Kinect.dll 看看能不能正常使用,可以再試著更換。
另外,如果是 https://github.com/KHeresy/OpenNI2/releases/tag/
KinectOniFix
這個版本,它是用來修正錄影的問題的,詳細說明請參考
http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=533
想要得到对齐的深度数据和彩色数据,原始的 Kinect.dll 有偏移,换了您的后同楼上提示找不到设备。因为想要用来三维重建,有没有有效的方法。或者我是否应该放弃OPENNI采用官方SDK去对齐数据。在做毕设,遇到瓶颈了,希望老师给出指点。
to 呜呜呜
有稍微確認了一下。
如果到 http://structure.io/openni 下載新的 OpenNI 2.2 的話,Kinect 的對位問題就已經解決了,不需要另行更換 Kinect.dll。
是可以了。使用CoordinateConverter::convertDepthToColor,只能一个一个点对应,写在这希望能帮到别的同学。