- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Opencv骨骼获取
透過 OpenNI / NITE 分析人體骨架(上)
前面幾篇文章,基本上都是單純地讀取 OpenNI 裡的原始影像資料(深度/彩色),並沒有額外去做其他進一步的處理;而這一篇的,則是直接進入可能比較實用、也比較特別的部分,要去讀取使用 NITE 這套 middleware 分析出來的人體骨架資料了~
不過 Heresy 覺得 OpenNI 在這方面的資料其實相對少了許多,目前 Heresy 自己主要是根據 NITE 的範例程式「StickFigure」來做參考的,而整體來說,也算是摸到能正常運作而已;所以如果要看更完整的程式,也可以找這個官方的範例原始碼來看看。
接下來的部分,就是 Heresy 自己對於這部分摸出來的一些東西了。
OpenNI 人體骨架的構成
首先,OpenNI 的人體骨架基本上是由「關節」(joint)來構成的,而每一個關節都有位置(position)和方向(orientation)兩種資料;同時,這兩者也都還包含了對於這個值的「信賴度」(confidence),可以讓程式開發者知道 middleware 所判斷出來的這個關節資訊有多大的可信度。
而在目前的 OpenNI 裡,他以列舉型別的方式總共定義了 24 個關節(XnSkeletonJoint),分別是:
XN_SKEL_HEAD, XN_SKEL_NECK, XN_SKEL_TORSO, XN_SKEL_WAIST
XN_SKEL_LEFT_COLLAR, XN_SKEL_LEFT_SHOULDER, XN_SKEL_LEFT_ELBOW, XN_SKEL_LEFT_WRIST, XN_SKEL_LEFT_HAND, XN_SKEL_LEFT_FINGERTIP
XN_SKEL_RIGHT_COLLAR, XN_SKEL_RIGHT_SHOULDER, XN_SKEL_RIGHT_ELBOW, XN_SKEL_RIGHT_WRIST, XN_SKEL_RIGHT_HAND, XN_SKEL_RIGHT_FINGERTIP
XN_SKEL_LEFT_HIP, XN_SKEL_LEFT_KNEE, XN_SKEL_LEFT_ANKLE, XN_SKEL_LEFT_FOOT
XN_SKEL_RIGHT_HIP, XN_SKEL_RIGHT_KNEE, XN_SKEL_RIGHT_ANKLE, XN_SKEL_RIGHT_FOOT
不過雖然 OpenNI 定義了這麼多的關節,但是實際上在透過 NITE 這個 middleware 分析骨架時,其實能用的只有上面標記成紅色的十五個(可以透過 xn::SkeletonCapability 的成員函式 EnumerateActiveJoints() 取得可用的關節列表)。而如果把 NITE 有支援的關節畫成圖的話,就是下面的樣子了~
而如果再把這些關節連成線畫出來,結果就會是類似本文最右上方的那張圖裡的樣子了。
建立人體骨架的基本流程
要能夠在 OpenNI 的環境裡建立人體骨架,基本上是要靠所謂的 User Generator、也就是 xn::UserGenerator;而由於他的資料來源是深度影像(depth map),所以要使用的話,同時也要建立一個可用的 Depth Generator 出來才行。
不過 Heresy 個人覺得比較奇怪的是,在 OpenNI 的文件中,有提及「Production Chain」這個概念(請參考《Kinect 的軟體開發方案:OpenNI 簡介》),但是在實作時,似乎沒有提供建立這個鏈結的方法?以這邊這個例子來說,似乎只要同時有 User Generator 以及 Depth Generator 這兩種 production node,就會自動讓 User Generator 去存取 Depth Generator 的資料;而這樣的機制或許算是滿方便,但是 Heresy 比較好奇的是,如果存在兩個不同的 Depth Generator 的話,那 User Generator 會去存取哪一個的資料?不過,由於 Heresy 手邊只有一個 Kinect,所以也沒辦法做測試了。
而 User Generator 的使用方法和之前介紹過的 depth generator 或 image generator 差比較多,他主要還必須要透過 callback function 的機制,來做事件(event)的處理;而在 OpenNI 裡面,要為一個 production node 加上 callback function,基本上就是透過各種 node 提供、名稱為 RegisterXXXCallbacks() 的成員函式,來「註冊」(register)該 node 的 callbac
文档评论(0)